如何在Ubuntu 14.04上安装和使用Docker Compose

介绍

Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭(更不用说彼此交谈)可能很快变得难以处理。

Docker社区提出了一个名为Fig的流行解决方案,它允许您使用单个YAML文件来编排所有Docker容器和配置。这变得如此受欢迎,以至于Docker团队最终决定基于Fig源制作他们自己的版本。他们称之为Docker Compose。简而言之,它使得处理Docker容器的编排过程(例如启动,关闭和设置容器内链接和卷)非常容易。

在本文结束时,您将安装Docker和Docker Compose,并对Docker Compose的工作原理有基本的了解。

Docker和Docker撰写概念

使用Docker Compose需要将一堆不同的Docker概念合二为一,所以在我们开始之前,让我们花一点时间来回顾一下所涉及的各种概念。如果您已经熟悉Docker概念,如卷,链接和端口转发,那么您可能希望继续前进到下一部分。

Docker图像

每个Docker容器都是Docker镜像的本地实例。您可以将Docker镜像视为完整的Linux安装。通常,最小安装仅包含运行映像所需的最少包。这些映像使用主机系统的内核,但由于它们在Docker容器内运行并且只能看到自己的文件系统,因此完全可以在Ubuntu主机上运行像CentOS这样的分发(反之亦然)。

大多数Docker镜像都是通过Docker Hub分发的,Docker Hub由Docker团队维护。大多数流行的开源项目都有相应的图像上传到Docker Registry,您可以使用它来部署软件。在可能的情况下,最好抓住“官方”图像,因为Docker团队保证他们遵循Docker最佳实践。

Docker镜像之间的通信

默认情况下,Docker容器与主机隔离,这意味着默认情况下主机无法访问Docker容器内的文件系统,也无法通过网络与其通信。毋庸置疑,这使得默认情况下配置和处理在Docker容器内运行的映像很困难。

Docker有三种主要方法可以解决这个问题。第一个也是最常见的是让Docker指定将在Docker容器中设置的环境变量。然后,在Docker容器内运行的代码将在启动时检查这些环境变量的值,并使用它们来正确配置自身。

另一种常用的方法是Docker数据卷。Docker卷有两种形式 - 内部和共享。

指定内部卷只意味着对于为特定Docker容器指定的文件夹,数据将在删除容器时保留。例如,如果您想确保挂起的日志文件可能指定了内部/var/log卷。

共享卷将Docker容器内的文件夹映射到主机上的文件夹。这使您可以轻松地在Docker容器和主机之间共享文件。

与Docker容器通信的第三种方式是通过网络。Docker允许通过links端口转发在不同的Docker容器之间进行通信,允许您将Docker容器内的端口转发到主机服务器上的端口。例如,您可以创建一个链接,以允许您的WordPress和MariaDB Docker容器相互通信并进行端口转发,以便将WordPress暴露给外部世界,以便用户可以连接到它。

课程准备

要阅读本文,您需要具备以下条件:

  • Ubuntu 14.04 腾讯CVM,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 具有sudo权限的非root用户。

第1步 - 安装Docker

首先,如果你还没有安装Docker。安装Docker的最快方法是下载并安装他们的安装脚本(系统会提示您输入sudo密码)。

wget -qO- https://get.docker.com/ | sh

上面的命令下载并执行Docker团队编写的小型安装脚本。

如果未正确配置用户,使用Docker会很麻烦,因此请使用以下命令将用户添加到docker组中。

sudo usermod -aG docker $(whoami)

注销并从服务器登录以激活新组。

第2步 - 安装Docker Compose

现在你已经安装了Docker,让我们继续安装Docker Compose。首先,安装python-pip是先决条件:

sudo apt-get -y install python-pip

然后你可以安装Docker Compose:

sudo pip install docker-compose

第3步 - 使用Docker Compose运行容器

公共Docker注册表Docker Hub包含一个简单的Hello World图像。现在我们已经安装了Docker Compose,让我们用这个非常简单的例子来测试它。

首先,为我们的YAML文件创建一个目录:

mkdir hello-world

然后切换到目录:

cd hello-world

现在使用您喜欢的文本编辑器创建YAML文件(我们将使用nano):

nano docker-compose.yml

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

my-test:
  image: hello-world

第一行将用作容器名称的一部分。第二行指定用于创建容器的图像。该图像将从官方Docker Hub存储库下载。

仍在~/hello-world目录中时,执行以下命令来创建容器:

docker-compose up

输出应从以下开始:

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 | 

输出然后解释了Docker正在做什么:

  1. Docker客户端联系了Docker守护程序。
  2. Docker守护程序从Docker Hub中提取了“hello-world”图像。
  3. Docker守护程序从该映像创建了一个新容器,该容器运行生成您当前正在读取的输出的可执行文件。
  4. Docker守护程序将该输出流式传输到Docker客户端,后者将其发送到您的终端。

如果该过程没有自行退出,请按CTRL-C

这个简单的测试没有显示Docker Compose的主要优点之一 - 能够同时上下移动一组Docker容器。

第4步 - 学习Docker撰写命令

让我们回顾一下该docker-compose工具支持的命令。

docker-compose命令基于每个目录工作。您可以在一台计算机上运行多组Docker容器 - 只需为每个容器创建一个目录,为其目录中的每个容器创建一个docker-compose.yml文件。

到目前为止,我们一直在运行docker-compose up并使用CTRL-C来关闭它。这允许调试消息显示在终端窗口中。但这并不理想,在生产中运行时,您会希望docker-compose更像是一种服务。一种简单的方法是当你在up你的会话时添加选项-d

docker-compose up -d

docker-compose 现在将会被分叉到后台。

要显示您的Docker容器组(已停止且当前正在运行),请使用以下命令:

docker-compose ps

例如,以下显示helloworld_my-test_1容器已停止:

       Name           Command   State    Ports 
-----------------------------------------------
helloworld_my-test_1   /hello    Exit 0         

正在运行的容器将显示Up状态:

    Name              Command          State        Ports      
---------------------------------------------------------------
nginx_nginx_1   nginx -g daemon off;   Up      443/tcp, 80/tcp 

要停止应用程序组的所有正在运行的Docker容器,请在与用于启动Docker组的docker-compose.yml文件相同的目录中发出以下命令:

docker-compose stop

注意: 如果您需要强制性地关闭东西,也可以使用docker-compose kill

在某些情况下,Docker容器会将其旧信息存储在内部卷中。如果要从头开始,可以使用该rm命令完全删除构成容器组的所有容器:

docker-compose rm 

如果您从包含Docker容器和.yml文件的目录以外的目录中尝试这些命令中的任何一个,它将会抱怨并且不会显示您的容器:

Can't find a suitable configuration file in this directory or any parent. Are you in the right directory?
​
        Supported filenames: docker-compose.yml, docker-compose.yaml, fig.yml, fig.yaml

第5步 - 访问Docker容器文件系统(可选)

如果需要在容器内部处理命令提示符,则可以使用该 docker exec命令。

世界,你好!示例在运行后退出,因此我们需要启动一个将继续运行的容器,以便我们可以使用docker exec来访问容器的文件系统。我们来看看Docker Hub 中的Nginx图像

为它创建一个新目录并更改为:

mkdir ~/nginx && cd $_

在我们的新目录中创建一个docker-compose.yml文件:

nano docker-compose.yml

并粘贴如下:

nginx:
  image: nginx

保存文件并退出。我们只需要使用以下命令启动Nginx容器作为后台进程:

docker-compose up -d

将下载Nginx图像,然后在后台启动容器。

现在我们需要CONTAINER ID容器。正在运行的所有容器的列表:

docker ps

您将看到类似于以下内容的内容:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
e90e12f70418        nginx               "nginx -g 'daemon off"   6 minutes ago       Up 5 minutes        80/tcp, 443/tcp     nginx_nginx_1

注意:仅使用该docker ps命令列出正在运行的容器。

如果我们想对这个容器中的文件系统进行更改,我们将获取其ID(在此示例中e90e12f70418)并用于docker exec在容器内启动shell:

docker exec -it e90e12f70418 /bin/bash

-t选项打开一个终端,该-i选项使其具有交互性。这些/bin/bash选项为正在运行的容器打开一个bash shell。请务必使用容器的ID。

您将看到容器的bash提示符类似于:

root@e90e12f70418:/#

从这里,您可以从命令提示符处工作。但请记住,除非您位于作为数据卷一部分保存的目录中,否则一旦容器重新启动,您的更改就会消失。另一个需要注意的是,大多数Docker镜像是使用非常少的Linux安装创建的,因此您习惯使用的某些命令行实用程序和工具可能不存在。

结论

太棒了,所以它涵盖了Docker Compose的基本概念以及如何安装和运行它。

有关该docker-compose.yml文件的配置选项的完整列表,请参阅Compose文件参考

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Use Docker Compose on Ubuntu 14.04》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微服务

Docker的核心概念,镜像操作

简介 在实际使用Docker的过程中,遇到一些问题,但是总没有系统的博文可以详细的介绍Docker,所以个人写一个由浅入深的系统学习Docker过程。 这里首...

42380
来自专栏IT笔记

Docker学习之CentOS 7安装配置

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统...

1.2K90
来自专栏应兆康的专栏

Docker 简介与安装

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

455230
来自专栏A周立SpringCloud

Docker系列教程10-使用Docker Registry管理镜像

很多场景下,我们需使用私有仓库管理Docker镜像。相比Docker Hub,私有仓库有以下优势: 节省带宽,对于私有仓库中已有的镜像,无需从Docker Hu...

32880
来自专栏算法修养

Docker 学习应用篇之二: Docker的介绍和安装

   之前说过Docker的好处,Docker可以集装箱化的部署应用程序。那么Docker是通过什么实现的呢。要理解Docker内部构建,需要先理解Docker...

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

Docker使用命令和技巧

17050
来自专栏实用工具入门教程

如何部署 Docker Compose

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

5.2K30
来自专栏Java 源码分析

Docker 入门

27960
来自专栏吴柯的运维笔记

Docker安装及基本指令教程

? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟...

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

如何在CentOS 7上安装和使用Docker Compose

Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

85300

扫码关注云+社区

领取腾讯云代金券