Docker化重新定义了软件行业的部署和自动化流程。自诞生以来,Docker 团队一直致力于实现无缝的自动化部署。容器化技术 不仅能实现快速的应用开发和高效运行,还能节省时间和精力。编排、定义和运行多容器应用等无与伦比的功能,使 Docker 成为开发者的首选。
Docker 容器和镜像
在深入了解 Docker 之前,温习一下基础知识是很有必要的。如果您没有使用 Docker 的经验,理解它的工作原理可能会有些困难。在本节中,我们将定义一些对初学者至关重要的概念。如果您觉得已经熟悉这些概念,可以随时跳过并进入下一节。您也可以查看我们的 全面指南,其中解释了 Docker 的基本概念.
-
Docker 镜像
Docker 镜像是一组只读文件。一旦创建了 Docker 镜像,就无法对其进行修改,但可以将其删除。我们根据需要使用 Docker 镜像来创建一个或多个 Docker 容器。要查看系统中运行的镜像数量,请使用以下命令:
|
1 |
$docker images |
当您从远程注册表(如 Docker Hub)拉取镜像时,您正在下载文件和文件夹。要拉取镜像,请使用以下命令:
|
1 |
$docker pull (名称 的 该 镜像) |
-
Docker 容器
Docker 镜像是 Docker 容器的蓝图。从技术上讲,Docker 容器是 Docker 镜像的一个实例。想象一下,如果 Docker 镜像就像父母,那么 Docker 容器就是孩子。与只能创建一次的 Docker 镜像不同,您可以使用单个镜像创建多个容器。要查看系统中运行的镜像列表,请使用以下命令:
|
1 |
$docker ps |
要拉取容器,请使用以下命令:
|
1 |
$docker pull (名称 的 该 容器) |
-
Docker 镜像和容器的工作原理
Docker 镜像和容器携手合作,释放 Docker 的潜力。通过 run 命令,使用 Docker 镜像构建单个容器。当您创建 Docker 容器时,会创建一个名为“容器层”(Container Layer)的新层。新创建的层包含应用程序及其依赖项。您创建的每个容器都有一个不同的可读写容器层,在 Docker 容器中所做的任何更改都会自动反映在容器层上。请记住,如果您选择删除容器,您也将丢失该容器层。
向 Docker Compose 问好
Docker Compose 是一个容器管理工具,允许您将所有 Docker 容器配置和编排到单个 YAML 文件中。使用此工具,启动、停止以及创建容器内链接和数据卷都变得更加容易。
-
Docker Compose 是做什么的?
简单来说,Docker Compose 通过消除冲突和组织问题,使复杂的任务变得更容易。它允许用户集中管理不同的 Docker 容器。换句话说,Docker Compose 不是将所有服务都放在一个大容器中,而是将一个服务分解为多个服务,以便用户可以毫不费力地访问和管理它们。
在本指南中,我们将引导您完成在 CentOS 7 上安装当前版本的 Docker Compose 以管理多容器应用程序的步骤。我们还将介绍成功使用该软件所需的一些基本命令.
-
如何使用 Docker Compose
即使对于新手来说,使用 Docker Compose 也非常简单。让我们来看看 Docker Compose 涉及的三个步骤:
1. 构建:首先,根据项目需求在 Dockerfile 中构建镜像,或者从注册表中拉取。
2. 定义:接下来,您需要在 compose.yml 文件中定义所有组件服务。
3. 运行:定义好组件后,就可以使用 docker-compose 命令来运行了。
前提条件
在我们在您的 CentOS 服务器上安装 Docker Compose 之前,请确保您拥有:
- 一个 在 CentOS 7 服务器上具有 sudo 权限的非 root 用户.
- 您的机器上已安装 Docker。请参考这篇关于如何在 Ubuntu 18.04 上安装和操作 Docker.
现在您已准备就绪。接下来,请按照以下步骤在 CentOS 7 上安装 Docker Compose。
步骤 1:安装 Docker Compose
要获取最新版本的 Docker Compose,请按照以下文档中的说明进行操作:Docker 文档 并从以下地址下载二进制文件:Docker’s GitHub 仓库。通过运行以下命令检查您是否拥有该软件的最新版本:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
要使二进制文件运行,请设置以下权限:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
接下来,查看您的版本以检查安装是否成功:
|
1 |
$docker-compose --version |
以下代码将打印已安装的版本:
然后,您可以使用已安装的 Docker Compose 运行一个 “Hello World” 示例。
步骤 2:使用 Docker Compose 运行容器
Docker Hub(公共 Docker 注册表)中有一个 “Hello World” 镜像,可用于演示和测试。它展示了如何使用最少的配置通过 Docker Compose 运行容器。首先,您需要为我们的 YAML 文件创建一个目录:
|
1 |
$mkdir hello-world |
接下来,移动到该目录:
|
1 |
$cd hello-world |
然后,使用您首选的文本编辑器生成 YAML 文件。在本教程中,我们将使用 Vi:
|
1 |
$vi docker-compose.yml |
按 i 进入插入模式,然后将以下内容输入到文件中:
|
1 2 |
my-test: image: hello-world |
在容器名称中,第一行将合并到容器名称中。第二行指示程序应使用哪个镜像来创建容器。docker-composeup 将在您输入命令时寻找名为 hello-world 的本地镜像以检查其是否可用。要退出插入模式,请按 ESC。然后,输入 :x 并按 ENTER 保存并退出文件。可以使用 docker images 命令手动检查您机器上的镜像:
|
1 |
$ sudo docker images |
当根本没有本地镜像时,只会显示列标题:
要创建容器,请在仍处于 /hello-world 目录:
|
1 |
$sudo docker-compose up |
当您第一次运行该命令且没有名为 hello-world 的本地镜像时,它将从 Docker Hub 仓库下载:
为了确保安装正常工作,Docker Compose 会拉取镜像、构建容器、连接它并执行 hello 程序:
之后,将显示所做操作的描述打印输出:
当 hello 完成其任务后,容器将被关闭,并且该命令将不再在容器中运行。查看活动进程时将显示列标题。但是,hello-world 容器将不会被列出,因为它当前没有运行:
|
1 |
$sudo docker ps |
要查看所有容器,而不仅是当前的容器,请使用 -a 标志:
|
1 |
$sudo docker ps -a |
既然您已经尝试过运行容器,您可以继续学习一些基本的 Docker Compose 命令。
步骤 3:Docker Compose 命令
为了帮助您开始使用 Docker Compose,本节将介绍由 docker-compose 工具提供的基本命令。docker-compose 是一个基于目录运行的命令。通过为每个容器生成一个目录,并且每个目录包含一个 docker-compose.yml 文件,您可以在同一台计算机上运行多组 Docker 容器。
到目前为止,您一直在自己运行 Docker Compose。您可以通过按 Ctrl-C。这使终端窗口能够显示调试消息。然而,在生产环境中运行时,建议将 docker-compose 作为服务运行。可以使用 -d 选项作为实现此目的的简单方法:
|
1 |
docker-compose up -d |
现在,docker-compose 会分叉到后台运行。您可以使用以下命令管理您的 Docker 容器组(无论是停止的还是运行中的):
|
1 |
$sudo docker-compose ps -a |
容器的 State(状态)如果处于停止状态,将被报告为 Exited,如下面的示例所示:
当前正在运行的容器将显示:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
您可以在与用于启动 Docker 组的 docker-compose.yml 文件相同的目录中终止所有正在运行 of Docker 容器:
|
1 |
$docker-compose stop |
注意:如果您需要更强制地关闭,也可以使用 docker-compose kill。
在某些情况下,Docker 容器可能能够在内部保存其旧数据。如果您想从头开始,请使用 rm 命令从容器组中删除所有容器:
|
1 |
$docker-compose rm |
在放置 Docker 容器和 .yml 文件的目录之外的其他目录运行这些命令中的任何一个,都将导致错误消息:
|
1 2 3 4 5 6 |
ERROR: Can't find a suitable configuration file in this directory 或 any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml |
在本节中,我们’已经介绍了使用 Docker Compose 操作容器的基础知识。如前所述,如果您需要对容器进行额外的控制,在下一节中,您可以访问 Docker 文件系统并从容器内部的命令提示符运行命令。
第 4 步:访问 Docker 容器文件系统
可以使用命令行工具 docker exec 在容器中运行命令提示符并访问容器的文件系统。例如,运行 “Hello World” 并查看 docker exec 命令完成需要多长时间。为了本教程的目的,可以使用 Nginx 的 Docker Hub 镜像。创建一个名为 nginx 的新目录并进入其中:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
您现在应该有一个 docker-compose.yml 文件,您可以在文本编辑器中打开它:
|
1 |
vi docker-compose.yml |
然后,在文件中添加以下内容:
|
1 2 |
nginx: image: nginx |
是时候关闭应用程序了。要在后台启动 Nginx 容器,请使用以下命令:
|
1 |
$sudo docker-compose up -d |
Docker Compose 将下载 Nginx 镜像并在后台运行容器。要继续,您需要输入容器的 CONTAINER ID。您可以使用以下命令查看当前所有正在运行的容器:
|
1 |
$sudo docker ps |
您将看到以下内容:
如果您想修改此容器内部的文件系统,可以使用 docker exec,您将使用容器的唯一 ID(在本例中为 f139d0d78ca7)在容器内构建一个 shell:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
通过使用 -t 选项可以打开一个交互式终端,而 /bin/bash 为容器提供了一个 bash shell。之后您将看到该容器的 bash 提示符:
|
1 |
root@b86b6699714c:/# |
在您的容器内,您将找到一个命令提示符。重启容器将覆盖您所做的任何更改,除非您在已保存为数据卷一部分的目录中工作。如果您习惯于使用 Linux 命令行工具,您应该知道大多数 Docker 镜像都是使用最基础的 Linux 安装制作的。
结论
我们已引导您完成了在 CentOS 7 上安装当前版本的 Docker Compose 以管理多容器应用程序的步骤。Docker Compose 同时启动和关闭大量容器的能力令人印象深刻。从模板到应用程序只需几分钟。因此,如果您的工作涉及同时运行多个容器,那么坚持使用 Docker Compose 是一个极好的选择。然而,它并不是一个万能的解决方案。根据您的特定需求,您还可以找到一些更好的选择,例如,Kubernetes.
要进一步探索 Docker Compose 的强大功能,您可以参考来自 我们博客:
祝您计算愉快!






评论
暂无评论。发表第一条评论吧。