如何部署 Docker Compose

Docker是一个很好的工具,用于在软件容器中自动部署Linux应用程序,但要充分利用其潜力,应用程序的每个组件都应该在自己的单独容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以启动,通信和关闭可能很快变得难以处理。Docker社区提出了一个名为Fig的流行解决方案,它允许您使用单个YAML文件来编排所有Docker容器和配置。这变得如此受欢迎,以至于Docker团队决定基于Fig源制作Docker Compose,现在已弃用。Docker Compose使用户可以更轻松地编排Docker容器的进程,包括启动,关闭和设置容器内链接和卷。

在本教程中,我们将向您展示如何安装最新版本的Docker Compose以帮助您管理多容器应用程序。还没有云服务器的同学可以到腾讯云官网点击产品中的云服务器,进行购买。您也可以到这里免费领取一台腾讯云服务器。

安装 Docker Compose

虽然我们可以从官方的Ubuntu存储库安装Docker Compose,但它是最新版本背后的几个次要版本,所以我们将从Docker的GitHub存储库安装Docker Compose。以下命令与您在“ 版本”页面上找到的命令略有不同。通过使用-o标志首先指定输出文件而不是重定向输出,此语法可避免遇到使用sudo时导致的权限被拒绝错误``。

我们将检查当前版本,如有必要,请在以下命令中进行更新:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

接下来我们将设置权限:

sudo chmod +x /usr/local/bin/docker-compose

然后我们将通过检查版本来验证安装是否成功:

docker-compose --version

这将打印出我们安装的版本:

docker-compose version 1.21.2, build a133471

现在我们已经安装了Docker Compose,我们已准备好运行“Hello World”示例。

使用 Docker Compose 运行容器

公共Docker注册表Docker Hub包含一个用于演示和测试的Hello World镜像。它说明了使用Docker Compose运行容器所需的最小配置:调用单个映像的YAML文件:

首先,我们将为YAML文件创建一个目录并移入其中:

mkdir hello-world
cd hello-world

然后,我们将创建YAML文件:

nano docker-compose.yml

将以下内容放入文件,保存文件,然后退出文本编辑器:

my-test:
 image: hello-world

YAML文件中的第一行用作容器名称的一部分。第二行指定用于创建容器的镜像。当我们运行docker-compose up命令时,它将按我们指定的名称查找本地镜像hello-world。有了这个,我们将保存并退出该文件。

我们可以使用以下docker images命令手动查看系统上的镜像:

docker images

当根本没有本地镜像时,只显示列标题:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

现在,在仍然在~/hello-world目录中时,我们将执行以下命令:

docker-compose up

我们第一次运行命令时,如果没有指定本地映像hello-world,Docker Compose将从Docker Hub公共存储库中提取它:

Pulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .

拉动镜像后,docker-compose创建一个容器,附加并运行hello程序,然后确认安装似乎正在工作:

. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .

然后它打印出它所做的解释:

1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
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.

Docker容器只在命令处于活动状态时才运行,因此一旦hello完成运行,容器就会停止。因此,当我们查看活动进程时,将显示列标题,但hello-world不会列出容器,因为它没有运行。

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

通过使用-a显示所有容器的标志,我们可以看到容器信息,我们将在下一步中使用它,而不仅仅是活动容器:

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
06069fd5ca23        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                       drunk_payne

这将显示我们完成后删除容器所需的信息。

删除镜像(可选)

为避免使用不必要的磁盘空间,我们将删除本地映像。为此,我们需要使用docker rm命令删除引用该镜像的所有容器,然后删除CONTAINER ID或NAME。下面,我们使用我们刚刚运行的docker ps -a命令中的CONTAINER ID 。请务必替换容器的ID:

docker rm 06069fd5ca23

一旦删除了引用该镜像的所有容器,我们就可以删除该镜像:

docker rmi hello-world

结论

我们现在已经安装了Docker Compose,通过运行Hello World示例测试了我们的安装,并删除了测试镜像和容器。虽然Hello World示例确认了我们的安装,但简单的配置并没有显示Docker Compose的主要优点之一 - 能够同时上下一组Docker容器。

腾讯云容器服务(Tencent Kubernetes Engine ,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的 CBS、CLB 等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零学习云计算

Docker学习记录(1)——搭建自己的Docker Registry

最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。 由于“墙”...

83400
来自专栏喵了个咪的博客空间

Docker使用命令和技巧

16550
来自专栏应兆康的专栏

Docker 简介与安装

Github: https://github.com/yingzk/MyDocker

450230
来自专栏搜云库

Docker Hub 仓库使用,及搭建 Docker Registry

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中...

461100
来自专栏二进制文集

Docker 动手实战

本文首先介绍 Docker 的整体概念,接着讲述 Docker 的基础用法,网上已经有很多好文章了,本文只是作学习记录使用。

11130
来自专栏云计算教程系列

如何在Ubuntu上安装使用Docker

在本教程中,您将安装Docker,并学会使用容器和镜像,将镜像推送到Docker存储库。

10.9K1960
来自专栏点滴积累

Docker Registry

前言 上一篇文章讲了Docker Machine实现多主机Docker节点的管理。本文讲解如何实现Docker Registry,其实这个在第一篇Docker入...

44470
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Docker Compose

Docker是一个很好的工具,用于在软件容器中自动部署Linux应用程序,但要充分利用其潜力,应用程序的每个组件都应该在自己的单独容器中运行。对于具有大量组件的...

94320
来自专栏后台及大数据开发

kubernetes集群搭建(2):docker私有仓库

kubernetes集群搭建(1):环境准备 中各节点已经安装好了docker,请确认docker已启动并正常运行

9110
来自专栏应兆康的专栏

Docker 简介与安装

Github:https://github.com/yingzk/MyDocker 1. Docker 简介 Docker是一个开源(Github地址: htt...

355120

扫码关注云+社区

领取腾讯云代金券