首页>软件资讯>常见问题

常见问题

Docker设置和容器启动

发布时间:2024-09-25 18:40:33人气:434

本文介绍安装 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是干啥的