1. 为什么要用docker compose
在多阶段构建章节中,我们将flask应用打包成了镜像myhello,然后创建myhello应用容器,它依赖redis服务,所以我们设定myhello容器通过宿主机网络与redis进行数据交换。
如果在别的服务器上,使用Docker重新部署一边,操作的过程还是比较麻烦的。一般来说,我们要求每个Docker容器只运行一个独立服务,每个镜像都要保持尽可能的简洁、功能单一,貌似这些规范反而降低了我们的效率。
同时,随着技术演进,我们越来越推崇将大型服务拆分成较小的微服务,分别部署到独立的机器或容器中,也就是说,我们的应用系统往往由数十个甚至上百个小型服务组成。试想一下,使用之前讲到的容器技术搭建系统,不仅需要众多复杂的命令,处理众多容器间的依赖更是非常消耗精力的。
归结下来,我们缺少一个对容器组合进行管理的工具。
Docker Compose 是 Docker 官方编排项目。使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。在 Docker Compose 里,我们通过一个配置文件,将所有与应用系统相关的软件及它们对应的容器进行配置,之后使用 Docker Compose 提供的命令进行启动,就能让 Docker Compose 将刚才我们所提到的那些复杂问题解决掉。
2. 获取 Docker Compose
安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
- 1
- 2
- 3
- 4
- 5
- 6
查看安装是否成功:
- 1
3. 使用 Docker Compose
使用 Docker Compose 的步骤分成三步。
- 也可以使用现有的镜像 ,或者根据需要编写容器所需镜像的 Dockerfile
- 编写获取用于配置容器的 docker-compose.yml
- 使用 docker-compose 命令启动应用
准备镜像这一过程我们之前已经掌握了,编写docker-compose.yml部分我们会放在下一节详细介绍,这里我们就直接来使用它,感受Docker Compose 的强大功能。
3.1 编写 docker-compose.yml
进入dockerfiledir目录,新建redis目录,将之前部署redis容器用到的redis.conf拷贝到redis目录下,修改redis.conf中的bind 127.0.0.1
为bind 0.0.0.0
,以便其他容器访问此服务。然后新建文件docker-compose.yml
,并将下面的内容写入到这个文件中。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
此时目录结构如下:
3.2 启动、重建和停止
docker-compose up
命令类似于 Docker 中的 docker run
,它会根据 docker-compose.yml 中配置的内容,创建所有的容器、网络、数据卷等等内容,并将它们启动。与 docker run
一样,默认情况下 docker-compose up
会在前台运行,我们可以用 -d
选项使其“后台”运行,大多数情况都会加上 -d
选项。
- 1
docker-compose
命令默认会识别当前控制台所在目录内的 docker-compose.yml 文件,而会以这个目录的名字作为组装的应用项目的名称。如果我们需要改变它们,可以通过选项 -f
来修改识别的 Docker Compose 配置文件。--build
用于执行重建服务镜像,更新镜像时使用。
- 1
docker-compose down
命令用于停止所有的容器,并将它们删除,同时消除网络等配置内容,也就是几乎将这个 Docker Compose 项目的所有影响从 Docker 中清除。
4. 小结
通过 Docker 让我们能够在开发过程中搭建一套不受干扰的独立环境,而 Docker Compose 则让我们可以处理多套环境,并能够做到进行快速切换。在服务搭建的场景中,使用Docker Compose 编排容器,可以使容器技术发挥更大的价值。下一节,我们将走进Docker Compose的核心,深入了解Compose配置文件的指令的作用和使用方式。