介绍
Docker 是一个让在容器中运行和管理应用程序进程变得更容易的平台。它提供了一种将您的应用程序与基础设施分离的方法。容器与虚拟机非常相似,但它们更轻便、高效且易于使用。有多种方法可以在 Linux 发行版上安装 Docker。在现有操作系统上安装 Docker 最流行且最简单的方法是使用 yum 命令。
本教程将演示如何在几步简单的操作中,在 CentOS 7 上设置和使用 Docker。
前提条件:
- 64位 CentOS 7 实例.
- 具有 sudo 特权的非 root 用户。
您在本教程中执行的所有命令都作为非 root 用户运行,如果需要,将使用 sudo 关键字提供 root 访问权限。
步骤 1:在 CentOS 7 实例上设置 Docker
官方 CentOS 7 软件源可能没有最新的 Docker 安装包。在本节中,您将从官方 Docker 软件源安装最新版本的 Docker。首先,您需要使用以下命令更新软件包数据库:
|
1 |
sudo yum check-update |
更新步骤完成后,运行以下命令下载并安装最新版本的 Docker:
|
1 |
curl -fsSL https://get.docker.com/ | sh |
Docker 现已安装,因此您可以通过运行以下命令启动 Docker 守护进程:
|
1 |
sudo systemctl start docker |
要验证 Docker 守护进程是否正在运行,请键入以下内容:
|
1 |
sudo systemctl status docker |
systemctl status 命令的输出应该与下面分享的输出类似,这表明它正在运行:
|
1 2 3 4 5 6 |
输出: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-02-17 18:22:06 UTC; 10s ago Docs: https://docs.docker.com Main PID: 21884 (dockerd) |
最后,为了确保 Docker 在您重启机器时自动启动,请使用以下命令:
|
1 |
sudo systemctl enable docker |
Docker 安装为您提供了 Docker 服务以及客户端工具(Docker 命令行客户端)。在本教程的下一部分中,您将能够通过使用 Docker 命令进行更多实际操作。
您也可以查看我们的关于如何在公共云中的 Ubuntu 上安装&操作 Docker 的深入教程.
步骤 2:在不使用 Sudo 前缀的情况下使用 Docker 命令
Docker 命令需要 root 特权才能运行。因此,如果您想运行这些命令,必须在它们前面加上 sudo。在安装过程中,默认会创建一个 Docker 用户组。如果您将用户添加到该组中,则可以在不使用 sudo 的情况下运行 Docker 命令。尝试在不使用 sudo 或未将用户添加到该组的情况下运行 Docker 命令将导致类似于以下的输出:
|
1 2 3 |
输出: docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. |
将您的用户名添加到 Docker 组将确保您无需使用 sudo 来运行 Docker 命令:
|
1 |
sudo usermod -aG docker $(whoami) |
要将另一个用户添加到 Docker 组,您只需替换命令中的用户名:
|
1 |
sudo usermod -aG docker username |
在本指南的其余部分中,我们将假设所有命令都由 Docker 用户组中的用户执行。如果不是这种情况,您可以在命令中使用 sudo 前缀。
步骤 3:执行 Docker 命令
现在您已经安装并运行了 Docker,让我们来看一些命令,以熟悉 Docker 命令行工具。Docker 命令通常采用以下形式:
|
1 |
docker [选项] [命令] [参数] |
要查找所有可用的子命令,您应该使用:
|
1 |
docker |
截至 Docker 20.10.3,可用子命令的完整列表包括:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
输出: attach 附加 本地 标准 输入, 输出, 和 错误 流 到 一个 正在运行的 容器 build 构建 一个 镜像 从 一个 Dockerfile commit 创建 一个 新 镜像 从 一个 容器的更改 cp 在容器和本地文件系统之间复制文件/文件夹 create 创建一个新容器 diff 检查容器的 文件系统上的文件或目录的更改 events 获取来自服务器的实时事件the server exec 在 正在运行的 容器中运行 一个 命令container export 将 容器 的'文件系统 导出为 tar 归档文件 history 显示镜像的历史记录image images 列出镜像 import 导入tar包中 的 内容以 创建 文件系统 镜像image info 显示系统-范围的信息 inspect 返回 Docker-对象的底层信息Docker objects kill 杀死一个或 多个正在运行的容器 load 从tar归档文件 或 STDIN加载镜像 STDIN login 登录到 Docker 注册表 Docker registry logout 从Docker注册表 注销 Docker registry logs 获取容器的日志 a container pause 暂停一个或多个容器内的 所有进程容器 port 列出端口映射或 一个 特定映射对于 该容器 ps 列出容器 pull 拉取一个镜像或 一个 仓库从 一个 注册表 push 推送一个镜像或 一个 仓库到 一个 注册表 rename 重命名 一个 容器 restart 重启一个或 多个容器 rm 删除一个或 多个容器 rmi 删除一个或 多个镜像 run 运行 一个 命令在 一个 新 容器 save 保存一个或 多个镜像到 一个 tar 归档文件 (流式传输到 STDOUT 默认情况下) search 搜索该Docker Hub 以寻找 镜像 start 启动一个或 多个已停止的容器 stats 显示 一个 实时流的容器(的) 资源使用统计信息 stop 停止一个或 多个运行中的容器 tag 创建 一个 标签TARGET_IMAGE 指向源镜像的 SOURCE_IMAGE top 显示该运行中的进程属于 一个 容器 unpause 恢复所有进程在一个或 多个容器 update 更新配置属于一个或 多个容器 version 显示该Docker 版本信息 wait 阻塞直到一个或 多个容器停止, 然后 打印它们的退出状态码 |
You can use –help flag with a specific command to get more information about it:
|
1 |
docker subcommand --help |
要获取有关系统的详细信息,请使用:
|
1 |
docker info |
步骤 4:使用 Docker 镜像
Docker 镜像可以被称为 Docker 容器的蓝图。这些镜像通常是从 Docker Hub 拉取的,这是一个由 Docker 项目管理的注册表。任何人都可以创建自己的镜像并将其推送到 Docker Hub。因此,您可以在该注册表中轻松找到各种各样的应用程序和操作系统发行版。让我们尝试运行一个简单的程序,以确认对 Docker Hub 的访问:
|
1 |
docker run hello-world |
您应该会得到如下输出,这表明 Docker 正在正常工作:
|
1 2 3 4 |
输出: Hello from Docker! 此 消息表明您的安装似乎正在正常 工作working correctly. ... |
您可以使用 search 命令在 Docker Hub 上找到各种 Docker 镜像。例如,查看以下命令以搜索 CentOS 镜像:
|
1 |
docker search centos |
搜索查询将显示与该子字符串匹配的所有镜像的列表。在您的情况下,输出应该类似于:
|
1 2 3 4 5 6 7 8 |
输出: NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The 官方构建的 CentOS. 6410 [OK] ansible/centos7-ansible Ansible 在 Centos7 132 [OK] consol/centos-xfce-vnc Centos 容器 带有 "无头" VNC sess… 125 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL 仓库… 117 [OK] centos/systemd systemd 已启用 基础 容器. 96 [OK] ... |
在搜索结果中,有不同的列描述了关于镜像的信息。OFFICIAL(官方)列中的 OK 表示该镜像是由该应用程序背后的公司创建并支持的。确定镜像后,您可以使用 Docker pull 命令将其下载到本地计算机:
|
1 |
docker pull centos |
下载镜像后,您可以使用 Docker run 命令运行容器。如果您在未事先下载的情况下直接尝试运行镜像,Docker 将会先下载镜像,然后运行容器:
|
1 |
docker run centos |
您可以使用以下命令列出已下载到本地计算机的镜像:
|
1 |
docker images |
您应该会得到类似的输出:
|
1 2 3 4 |
输出: REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 2 个月 前 209MB hello-world latest bf756fb1ae65 13 个月 前 13.3kB |
在本教程的后面部分,您将能够修改镜像以运行容器。这些新镜像可以添加或推送到 Docker Hub 以及其他托管 Docker 镜像的注册表中。
步骤 5:以交互方式运行容器
有不同类型的容器。您在步骤 4 中运行的 hello-world 容器是一种在打印消息后运行并退出的容器。另一种类型的容器是交互式容器。您可以像使用虚拟机一样使用交互式容器。
让我们从最新的 CentOS 镜像创建一个容器。在 Docker run 命令中使用 -i 和 -t 标志将提供对 CentOS 容器的交互式访问:
|
1 |
docker run -it centos |
命令提示符将发生变化,它应该类似于下面的输出:
|
1 2 |
输出: [root@3ce69d2a35b9 /]# |
|
1 |
注意: 该 容器 ID 显示 在 该 命令 提示符 是 唯一的 并且 它 将 派上 用 场 在之后, 在 该 示例 中它 是 3ce69d2a35b9。 |
现在您执行的任何命令都将在容器内部运行。这类似于在虚拟机中运行命令。让我们尝试安装 MySQL 服务器到 CentOS 容器中。您可以使用以下命令来执行此操作:
|
1 |
yum install mysql |
步骤 6:将容器中的更改提交到 Docker 镜像
启动容器后,您可以执行在类似虚拟机中可以执行的所有操作,例如创建/修改文件或设置应用程序。请注意,这些更改仅保留在该容器中,在您销毁该容器后,您所做的更改将丢失。
在本部分教程中,您将学习如何从包含您所做更改的容器中创建一个新的 Docker 镜像。在 Step5 之后,您将运行一个安装了 MySQL 服务器的 CentOS 容器。该容器现在与纯 CentOS 镜像不同。您可以保存此容器状态以便进一步使用。首先,您需要使用以下命令退出容器:
|
1 |
exit |
使用以下命令将您在容器中所做的更改提交到新的 Docker 镜像中:
|
1 |
docker commit -m "Changes done to the image" -a "Author Name" container-id repository/new_image_name |
在命令中,-m 指的是提交信息,基本上应该表示所做的更改,-a 标签用于提及作者。Container-id 是来自 Step5 的 ID,这是您在交互模式下运行容器后获得的,通常,repository 是您在 Docker Hub 的用户名。例如:
|
1 |
docker commit -m "added mysql-server" -a "CloudSigma" 59839a1b7de2 finid/centos-mariadb |
|
1 |
注意: 在该新 镜像被 提交它被 保存在您的系统上. 在 该后续阶段的本 教程, 您将学习如何将 镜像推送到Docker Hub 以及和 在 该类似的注册表其中托管docker 镜像. 一旦您的镜像被 推送到 该注册表, 它可以被访问由其他人也 一样. |
现在镜像已经提交,Docker images 命令应该会列出新镜像以及旧镜像:
|
1 |
docker images |
该命令的输出应该类似于下面这样:
|
1 2 3 4 5 |
输出: REPOSITORY TAG IMAGE ID CREATED SIZE cloudsigma23/centos-mysql latest 1b9368efea70 13 秒前 308MB centos latest 300e315adb2f 2 个月前 209MB hello-world latest bf756fb1ae65 13 个月前 13.3kB |
如示例所示,使用来自 Docker Hub 的 CentOS 镜像创建了一个新的镜像 centos-mysql。大小的差异表明进行了一些更改。在本示例中,是在容器中添加了 MySQL 服务器。下次如果您需要一个带有 MySQL 服务器的容器,您只需运行这个新镜像,瞧!您就拥有了一个运行着预装 MySQL 服务器的 CentOS 容器。
步骤 7:管理 Docker 容器
现在您已经熟悉了 Docker,在使用一段时间后,您已经拥有了一些正在运行的和一些未激活的容器。要获取活动容器的列表,您应该使用:
|
1 |
docker ps |
您应该会看到类似的输出:
|
1 2 3 |
输出: 容器 ID 镜像 命令 创建时间 状态 端口 名称 604c889cf404 centos "/bin/bash" 20 分钟 前 运行 20 分钟 intelligent_easley |
要列出所有处于活动和非活动状态的容器,您应该在命令中使用 -a 标志:
|
1 |
docker ps -a |
要查找您创建的最后一个容器,可以提供 -l 标志:
|
1 |
docker ps -l |
要停止正在运行/活动的容器,请运行一个简单的命令:
|
1 |
docker stop container-id |
您可以在 Docker ps 命令的输出中找到 container-id。
步骤 8:将镜像发布到仓库
创建新镜像后的下一步是与您的朋友分享。您还可以使用 Docker Hub 或任何其他注册表将其提供给全世界。在推送镜像之前,您需要登录到相应的注册表。
在本教程的下一部分中,您将学习如何将镜像推送至 Docker Hub。首先,在 Docker Hub 上注册。您需要登录 Docker Hub 才能使用以下命令推送镜像:
|
1 |
docker login -u docker-registry-username |
输入正确的密码且身份验证成功后,您就可以推送镜像了。要推送镜像,请使用以下命令:
|
1 |
docker push docker-registry-username/docker-image-name |
该命令 of 输出将类似于以下内容:
|
1 2 3 4 5 |
输出: 此 推送 指向 至 仓库 [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: 已推送 2653d992f4ef: 已挂载 自 library/centos ... |
推送镜像后,它应该会显示在您账户的控制面板中,如下图所示:

如果出现类似的失败,很可能是因为您没有登录:
|
1 2 3 4 5 6 7 |
输出: 此 推送 指向 至 仓库 [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: 图层 已经 存在 2653d992f4ef: 图层 已经 存在 错误: 拒绝: 请求的 访问 至 该 资源 被 拒绝 未授权: 身份验证 需要 |
您可以登录并重新尝试推送。
结论
您可以通过多种方式使用 Docker。本教程应该为您提供了足够的信息来帮助您入门。由于 Docker 是一个非常热门的项目,您可以从其项目的博客页面中找到许多关于其用法以及不同使用案例的详细信息。.
您还可以查看我们的其他 Docker 教程,以了解更多关于您可以使用 Docker 做些什么的信息:
- 清理 Docker 资源 – 镜像、容器和数据卷
- 使用 Docker Compose 部署 Laravel、Nginx 和 MySQL
- 使用 OpenVPN Access Server 在 Docker 下运行您自己的 VPN 服务器
祝您计算愉快!
评论
暂无评论。发表第一条评论吧。