本文介绍安装 Docker,运行 Docker 容器,解释 Docker 镜像和容器的关系,以及容器的基本操作。
服务器准备
让我们准备使用 Docker 的环境。 在本系列中,我们将假设 CentOS。
如果你想使用 Sakura 的云,我认为参考虚拟服务器和虚拟磁盘 - “Sakura Cloud 简介”(1) 是个好主意。
您仍然可以使用适用于 Mac/Windows 等的 Docker 运行 Docker,因此在这种情况下,Docker for Windows 入门,
Docker for Mac 入门请参考。 (Docker for Windows 需要 64 位 Windows 10 专业版环境。 )
Docker 设置
yum 存储库设置等,并安装 Docker CE。
Docker 安装的存储库配置
首先,安装 yum-utils 和 devicemapper 所需的软件包。 如果您想了解更多关于 Docker 和 devicemapper 之间的关系,请参阅配置 Docker 以使用 devicemapper。
# yum install -y yum-utils
device-mapper-persistent-data
lvm2
要安装 Docker CE,请添加 yum 存储库。
# yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# ll /etc/yum.repos.d/
合計 32
-rw-r--r--. 1 root root 1664 4月 1 2015 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 4月 1 2015 CentOS-CR.repo
-rw-r--r--. 1 root root 649 4月 1 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 4月 1 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1002 4月 1 2015 CentOS-Vault.repo
-rw-r--r--. 1 root root 290 4月 1 2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 2424 2月 24 09:32 docker-ce.repo
您可以看到已添加 docker-ce.repo。
Docker 安装
安装 Docker CE。
# yum install docker-ce
您现在已经安装了 Docker CE。 让我们使用以下命令检查它是否安装。
# yum list installed | grep docker-ce
docker-ce.x86_64 17.12.0.ce-1.el7.centos @docker-ce-stable
启动 Docker 服务
启动 Docker 服务。
# systemctl start docker
我们来检查 Docker 服务是否正在运行。
# systemctl status docker
如果使用以下命令将服务设置为自动启动,则即使重新启动计算机,Docker 服务也会自动启动。
# systemctl enable docker
您可以使用以下命令查看有关 Docker 的信息。
# docker info
Docker 现在可以使用了。
Docker 容器的基本操作
让我们使用公开可用的 Docker 镜像对容器执行基本操作。
这一次,我们获取已发布的 Docker 镜像,基于它启动容器,确认启动后,停止并删除容器,删除 Docker 镜像,并查看基本 Docker 镜像和容器的生命周期。
检查初始状态
您可以使用以下命令检查本地环境中的 Docker 镜像列表。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
目前,仅显示标题,不显示任何内容。
通过从管理公共 Docker 镜像的 “Docker Hub” 下载或创建自己的 Docker 镜像,它将首次显示在列表中。
以下命令允许您查看本地环境中的 Docker 容器列表。 (Docker 容器是基于 Docker 镜像启动的容器。 )
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
由于我们还没有启动容器,这个结果同样只会显示 headers。
使用 你好 world 映像移动容器
现在,执行以下命令以获取名为 你好 world 的已发布 Docker 映像并启动容器。
# docker run hello-world
Unable to find image 'hello-world:latest' locally ・・・①
latest: Pulling from library/hello-world ・・・②
ca4f61b1923c: Pull complete
Digest: sha256:083de497cff944f969d8499ab94f07134c50bcf5e6b9559b27182d3fa80ce3f7
Status: Downloaded newer image for hello-world:latest
Hello from Docker! ・・・③
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
很难说发生了什么。 我将简要解释一下。
运行命令 “docker run” 是使用 Docker 镜像启动容器的命令。 在本例中,我尝试使用名为“你好世界”的 Docker 映像来启动容器。
但是,如 (1) 中的输出所示,本地环境中最初没有 Docker 镜像。 因此,请转到 Docker Hub 并下载 Docker 镜像(如果存在)。 这是第 (2) 部分。
下载 你好 world 映像后,将使用该映像启动容器。 此 你好 world 映像是一个 Docker 映像,当容器启动时,它在容器中输出 (3) 之后的消息。
(实际上,我刚才解释的内容是用 1.~4 的输出内容写的。 )
执行以下命令,检查是否已获取 Docker 镜像。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest f2a91732366c 3 months ago 1.85kB
这一次,有一行写着你好世界。 这是您之前通过运行 docker run 命令从 Docker Hub 下载的 Docker 映像。 此外,这次从 Docker 镜像下载到容器开始执行 docker run 命令,但也可以使用以下命令仅下载 Docker 镜像。
# docker pull hello-world
接下来,让我们看看容器的状态。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1b9013f9f66 hello-world "/hello" 27 minutes ago Exited (0) 27 minutes ago distracted_swirles
输出一行。
从左到右依次为容器的 ID、使用的 Docker 镜像、容器启动时要在容器中执行的命令、容器的创建时间、容器的状态(启动、停止等)、端口转发设置和容器的名称。
正如在 COMMAND 中编写的那样,文件 “/你好” 应该输出上面 (3) 的内容。
如果您不指定容器的名称,它将像在这种情况下一样自动设置。 (如何指定容器的名称将在后面显示。 )
此外,此容器的状态为 “Exited”,这意味着它已停止。 (在启动期间它将为 “Up”。 容器中的一个
进程必须正在运行。
在这个你好世界映像中,进程只是输出一条消息,因此容器在进程结束时停止。
Docker 容器、删除镜像
接下来,让我们删除我们创建的 Docker 容器和我们获取的 Docker 镜像。
您可以使用以下命令删除 你好世界 容器:
# docker rm <コンテナ名> (今回でいえば「distracted_swirles」)
または
# docker rm <CONTAINER ID> (今回でいえば「c1b9013f9f66」)
让我们运行以下命令来验证容器是否已被删除。 如果你让那些停止的保持原样,垃圾数据会留下来,这会导致磁盘压力,所以不要忘记删除你不再需要的那些。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
请注意,如果运行 “docker ps” (不带 “-a”),则不会看到任何已停止的容器。 在不知不觉中,您可能已经积累了很多不必要的容器。
此外,删除容器不会删除 Docker 映像。 您可以使用以下命令删除 Docker 镜像。
# docker rmi <Dockerイメージ名> (今回でいえば「hello-world」)
または
# docker rmi <IMAGE ID> (今回でいえば「f2a91732366c」)
让我们运行以下命令来验证映像是否已被删除。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
至于图片,请删除您不需要的图片。 特别是,如果您使用 Jenkins 等 CI(持续集成)工具自动创建 Docker 镜像或启动容器,请注意,不必要的数据将继续保留,而不会引起您的注意,从而对磁盘造成压力。 (如果发生 Disk Full,可能很难恢复 Docker 环境,因此最好小心。 )
使用 Nginx 镜像移动容器
接下来,我们使用 Nginx Docker 镜像。
首先,获取 Nginx 的 Docker 镜像。
# docker pull nginx
使用获取的 Nginx 镜像启动容器。
# docker run -d --name nginx-container -p 8181:80 nginx
由于 Nginx 容器会通过上述执行启动,因此如果将 8181 端口设置为可以从外部访问(防火墙等),则可以通过以下 URL 访问 Nginx。
您创建的实例的 IP 地址 http://<>:8181/
nginx
描述 run 命令的选项。
-d | 在后台运行容器。 如果未指定此选项,则将执行启动容器时执行的命令,并显示该命令的控制台输出。 |
--名字 | 指定容器名称。 (在你好世界示例中,我没有指定它,因此它被自动命名。 ) |
-p | 主机和容器之间的端口转发。 基本上,它是用 “-p < port on the host side>:< port >on the container side” 来写的。 (如果省略 host 端,它将自动设置。 由于 容器属于 Docker 创建的网络,如果不使用此选项,您将无法使用主机的 IP 地址访问容器使用的端口。 |
此外,对于 Nginx 镜像,容器启动时 nginx 进程仍在运行,因此容器将处于启动状态,不会停止。
如果使用 docker ps 命令查看它,则 STATUS 为 “Up”。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a61413193f44 nginx "nginx -g 'daemon ..." 7 days ago Up 8 seconds 0.0.0.0:8181->80/tcp nginx-container
要停止容器,请运行以下命令:
# docker stop nginx-container
nginx-container
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a61413193f44 nginx "nginx -g 'daemon ..." 7 days ago Exited (0) 3 seconds ago 0.0.0.0:8181->80/tcp nginx-container
至于删除,它类似于你好世界示例。
Docker 设置注意事项
代理设置
很容易忘记,如果你想在 Proxy 下使用 Docker,你需要配置它。 请注意,如果不设置,您将无法从 Docker Hub 获取 Docker 镜像。 (在 Docker for Mac/Windows 中也有一个设置位置。 )
具体来说,可以按如下方式进行设置。
# mkdir -p /etc/systemd/system/docker.service.d
# vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://<プロキシサーバのIPアドレス>:<プロキシサーバのポート>/ HTTPS_PROXY=http://<プロキシサーバのIPアドレス>:<プロキシサーバのポート>/"
# systemctl daemon-reload
# systemctl restart docker
总结
在本文中,我们使用 Sakura 的云来介绍 Docker 安装和容器启动。 在下一篇文章中,我们将更多地讨论容器操作,例如访问和复制容器内的文件。
上一条:什么是 Docker,什么是好的
下一条:docker是干啥的
品质保证
多年的生产力软件专家
专业实力
资深技术支持项目实施团队
安全无忧
多位认证安全工程师
多元服务
软件提供方案整合,项目咨询实施
购软平台-找企业级软件,上购软平台。平台提供更齐全的软件产品、更专业的技术服务,同时提供行业资讯、软件使用教程和技巧。购软平台打造企业级数字产品综合应用服务平台。用户体验和数字类产品的专业化服务是我们不断追求的目标。购软平台您身边的企业级数字产品优秀服务商。