Docker 教程 – Linux 中的 Docker 入门

这个详细的 Docker 教程涵盖了 Docker 命令基础知识,例如如何创建新容器、如何运行容器、删除容器、如何从容器构建自己的 Docker 映像等等。 让我们开始吧!

如果您尚未安装 Docker,请参阅以下指南:

  • 如何在 CentOS 中安装 Docker
  • 如何在 Ubuntu 中安装 Docker

内容

  1. 在 Linux 中开始使用 Docker
    1. 1. 搜索 Docker 镜像
    2. 2.下载Docker镜像
    3. 3. 运行 Docker 容器
    4. 4. 构建您的自定义 Docker 镜像
    5. 5. 移除容器
    6. 6. 移除 Docker 镜像
      1. 故障排除
  2. 结论

在 Linux 中开始使用 Docker

下面给出的所有步骤都在 Ubuntu 18.04 LTS 服务器版中进行了测试。

在开始使用 Docker 之前,让我先澄清一下什么是 Docker 镜像和 Docker 容器。

Docker Image 是决定 Container 应该如何表现的文件,而 Docker Container 是 Docker 映像的运行或停止阶段。

容器与主机的其余文件隔离。

当我们运行 Docker 容器时,它使用由 Docker 映像提供的隔离文件系统。 Docker 映像包含运行应用程序所需的一切——所有依赖项、配置、脚本、二进制文件等。

该映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。

1. 搜索 Docker 镜像

例如,我们可以从注册表中获取图像 码头工人中心,或者创建我们自己的,对于那些想知道的人来说,Docker hub 是一个在线中央存储库,所有 Docker 用户在其中构建、测试和保存他们的 Docker 映像。

Docker hub 拥有数以万计的 Docker 镜像。 您可以使用以下命令搜索任何 Docker 映像 "docker search" 命令。

例如,要搜索基于 Ubuntu 的 docker 映像,请运行:

$ sudo docker search ubuntu

样本输出:

搜索 Docker 镜像

要基于 CentOS 搜索图像,请运行:

$ sudo docker search ubuntu

要搜索 AWS 的图像,请运行:

$ sudo docker search aws

对于wordpress:

$ sudo docker search wordpress

Docker hub 拥有几乎所有类型的镜像。 无论是操作系统、应用程序还是任何东西,您都可以在 Docker hub 中找到预构建的 Docker 镜像。

如果您正在寻找的东西不可用,您可以构建它并使其可供公共使用,或者将其保密以供您自己使用。

2.下载Docker镜像

要下载 Ubuntu 操作系统的 Docker 映像,请从终端运行以下命令:

$ sudo docker pull ubuntu

上面的命令将从 码头工人中心.

样本输出:

Using default tag: latest latest: Pulling from library/ubuntu 6abc03819f3e: Pull complete  05731e63f211: Pull complete  0bd67c50d6be: Pull complete  Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5 Status: Downloaded newer image for ubuntu:latest
下载泊坞窗图像

您还可以使用以下命令下载特定版本的 Ubuntu 映像:

$ docker pull ubuntu:18.04

Docker 允许我们下载任何图像并启动容器,而不管主机操作系统如何。

例如,要下载 CentOS 映像,请运行:

$ sudo docker pull centos

所有下载的 Docker 镜像都将保存在 /var/lib/docker/ 目录。

要查看下载的 Docker 镜像列表,请运行:

$ sudo docker images

样本输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE ubuntu              latest              7698f282e524        14 hours ago        69.9MB centos              latest              9f38484d220f        2 months ago        202MB hello-world         latest              fce289e99eb9        4 months ago        1.84kB

正如你在上面看到的,我已经下载了三个 Docker 镜像—— Ubuntu, 中央操作系统你好世界.

现在,让我们继续看看如何根据下载的图像启动或运行容器。

3. 运行 Docker 容器

我们可以通过两种方式启动一个容器——或者使用它的 标签 或者 图像 ID.

标签 是指图像的特定快照和 图像 ID 是该图像的相应唯一标识符。

正如你在上面的结果 "latest" 是所有容器的 TAG,并且 7698f282e524 是 IMAGE ID 的 Ubuntu 码头工人形象, 9f38484d220f 是 CentOS Docker 镜像的镜像 ID 和 fce289e99eb9 是图像 id 你好世界 码头工人形象。

下载您选择的 Docker 映像后,运行以下命令以使用其 TAG 启动 Docker 容器。

$ sudo docker run -t -i ubuntu:latest /bin/bash

这里,

  • -t :在 Ubuntu 容器内分配一个新的伪终端。
  • -i :允许我们通过抓取容器的(STDIN)中的标准来建立交互式连接。
  • ubuntu:latest :带有“最新”标签的 Ubuntu 容器。
  • /bin/bash : 新容器的 BASH shell。

或者,您可以使用 IMAGE ID 启动容器,如下所示:

$ sudo docker run -t -i 7698f282e524 /bin/bash

这里,

  • 7698f282e524 – 图像 ID

启动容器后,您将自动进入容器的外壳(命令提示符):

Docker 容器的外壳Docker 容器的外壳

要返回主机系统的终端(在我的情况下,它是 Ubuntu 18.04 LTS)而不终止容器(来宾操作系统),请按 CTRL+P 其次是 CTRL+Q.

现在,您将安全地返回到原始主机的终端窗口。 请注意,容器仍在后台运行,我们还没有终止它。

要查看容器的运行列表,请运行以下命令:

$ sudo docker ps

样本输出:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 32fc32ad0d54        ubuntu:latest       "/bin/bash"         7 minutes ago       Up 7 minutes                            modest_jones
列出正在运行的容器列出正在运行的容器

这里,

  • 32fc32ad0d54 – 容器 ID
  • ubuntu:latest – 码头工人形象

请注意 容器 ID 和 Docker 镜像 ID 不同.

要列出所有可用(正在运行或已停止)的容器,请运行:

$ sudo docker ps -a

要从主机的 shell 停止(关闭容器电源),请运行以下命令:

$ sudo docker stop <container-id>

例子:

$ sudo docker stop 32fc32ad0d54

要重新登录或附加到正在运行的容器,只需运行:

$ sudo docker attach 32fc32ad0d54

正如你已经知道的, 32fc32ad0d54 是容器的 ID。

通过键入以下命令从其外壳内部关闭容器:

# exit

您可以使用以下命令验证正在运行的容器列表:

$ sudo docker ps

4. 构建您的自定义 Docker 镜像

Docker 不仅仅用于下载和使用现有的容器。 您也可以创建自己的自定义 docker 映像。

为此,请启动一个容器:

$ sudo docker run -t -i ubuntu:latest /bin/bash

现在,您将在容器的外壳中。

然后,安装任何软件或在容器中执行您想做的任何事情。

例如,让我们安装 Apache 网络服务器 在容器中。

# apt update # apt install apache2

同样,在容器中安装和测试您选择的任何软件。

完成所有设置后,返回主机系统的 shell。 不要停止或关闭容器。 要在不停止 Container 的情况下切换到主机系统的 shell,请按 CTRL+P 其次是 CTRL+Q.

在主机的 shell 中,运行以下命令来查找容器 ID:

$ sudo docker ps

最后,使用命令创建正在运行的容器的 Docker 镜像:

$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache

样本输出:

sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

这里,

  • 3d24b3de0bfc – Ubuntu 容器 ID。
  • ostechnix – 创建容器的用户的名称。
  • ubuntu_apache – 用户 ostechnix 创建的 docker 镜像的名称。

让我们使用命令检查是否创建了新的 Docker 映像:

$ sudo docker images

样本输出:

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE ostechnix/ubuntu_apache   latest              ce5aa74a48f1        About a minute ago   191MB ubuntu                    latest              7698f282e524        15 hours ago         69.9MB centos                    latest              9f38484d220f        2 months ago         202MB hello-world               latest              fce289e99eb9        4 months ago         1.84kB
列出泊坞窗图像列出泊坞窗图像

正如你在上面的输出中看到的,新的 Docker 镜像已经在我们的本地主机系统中从正在运行的容器中创建。

现在,您可以像往常一样使用以下命令从新创建的 Docker 映像创建一个新容器:

$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash

5. 移除容器

一旦你完成了 Docker 容器的所有研发,如果你不再需要它们,你可以删除它们。

为此,首先我们必须停止(关闭)正在运行的容器。

让我们用命令找出正在运行的容器:

$ sudo docker ps

样本输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley

使用它的 ID 停止正在运行的容器:

$ sudo docker stop 3d24b3de0bfc

现在,使用命令删除容器:

$ sudo docker rm 3d24b3de0bfc

同样,停止所有容器并在不再需要时将其删除。

一个一个地删除多个容器可能是一项乏味的任务。 因此,我们可以一次性删除所有停止的容器,只需运行:

$ sudo docker container prune

类型 "Y" 并击中 ENTER 删除容器的键。

WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564 5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0  Total reclaimed space: 5B

此命令仅适用于最新的 Docker 版本。

6. 移除 Docker 镜像

删除容器后,您可以删除不再需要的 Docker 映像。

要查找已下载 Docker 映像的列表:

$ sudo docker images

样本输出:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE ostechnix/ubuntu_apache   latest              ce5aa74a48f1        5 minutes ago       191MB ubuntu                    latest              7698f282e524        15 hours ago        69.9MB centos                    latest              9f38484d220f        2 months ago        202MB hello-world               latest              fce289e99eb9        4 months ago        1.84kB

如您在上面看到的,我们的主机系统中有三个 Docker 映像。

让我们使用它们的 IMAGE id 删除它们:

$ sudo docker rmi ce5aa74a48f1 

样本输出:

Untagged: ostechnix/ubuntu_apache:latest Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962 Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd

故障排除

如果 Docker 映像被任何正在运行或停止的容器使用,Docker 将不允许您删除它们。

例如,当我尝试删除带有 ID 的 Docker 映像时 b72889fa879c,来自我的一台旧 Ubuntu 服务器。 我收到以下错误:

Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377

这是因为您要删除的 Docker 映像当前正被另一个 Container 使用。

因此,让我们使用命令检查正在运行的容器:

$ sudo docker ps

样本输出:

显示正在运行的 docker 容器显示正在运行的 docker 容器

哎呀! 没有正在运行的容器。

让我们再次使用命令检查所有容器(运行和停止):

$ sudo docker ps -a

样本输出:

显示正在运行和停止的 docker 容器显示正在运行和停止的 docker 容器

如您所见,仍有一些停止的容器正在使用其中一个 Docker 映像。 所以,让我们删除所有容器。

例子:

$ sudo docker rm 12e892156219

同样,使用它们各自的容器 ID 删除所有容器,如上所示。

删除所有容器后,最后删除 Docker 映像。

例子:

$ sudo docker rmi b72889fa879c

而已。 现在使用命令验证主机中是否有任何其他 Docker 映像:

$ sudo docker images

您现在可能不会看到任何 docker 图像。

接下来阅读:

  • 解释 Docker 网络概念
  • 用示例解释 Docker 卷
  • Dockerfile 简介
  • 在 Linux 中开始使用 Docker Compose
  • 如何在 Linux 中以非 root 用户身份运行 Docker
  • Podman 教程 – Podman 入门

结论

在这个全面的 Docker 入门教程中,我们解释了 Docker 基础知识,例如创建、运行、搜索、删除容器以及从容器构建自己的 Docker 映像。

希望您对 Docker 的使用有基本的了解。

有关更多详细信息,请参阅本指南末尾提供的官方资源链接或在下面的评论部分发表评论。

下载免费的 Docker 电子书:

Download - Free eBook: "Docker Containerization Cookbook"
Download - Free Guide: "Understanding Docker"
Download - Free Guide: "What is Docker and Why is it So Popular?"
Download - Free Guide: "Introduction to Docker"
Download - Free Guide: "Docker in Production"

建议阅读:

  • 如何自动更新正在运行的 Docker 容器
  • ctop – Linux 容器的命令行监控工具
  • Portainer – 管理 Docker 的最简单方法
  • PiCluster – 一个简单的、基于 Web 的 Docker 管理应用程序
  • Dockly – 从终端管理 Docker 容器

资源:

  • 码头工人网站
  • Docker 文档

ContainersDevOpsDockerDocker基础知识Docker CommandsDocker hubDocker ImagesDocker tutorialgetting started with dockerLinuxLinux 管理开源操作系统级虚拟化Ubuntu虚拟化