如果有什么错误的地方,希望指出。
之前的文章中介绍了 Dockerfile,知道了 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker Compose 。
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker applications)」,其前身是开源项目 Fig。
Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的 Docker 中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了 Docker-Compose 只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器。恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件 (YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
- 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。
使用
创建 Python 服务
1、创建项目文件夹:
1 | $ mkdir composetest |
2、在目录下创建 app.py
文件
1 | import time |
在这个例子中,Redis 使用容器内默认端口 6379。
3、在同目录下创建requirements.txt文件,添加项目依赖的python包:
1 | flask |
创建 Dockerfile
在项目文件下创建 Dockerfile
1 | FROM python:3.4-alpine |
这段代码表示:
- 使用基础镜像 Python 3.4
- 将当前目录映射到镜像/code目录下
- 设置工作目录为 /code
- 安装 Python 依赖包
- 启动 app.py 程序
创建 docker-compose.yml
1 | version: '3' |
这个 Compose 文件定义了两个服务, 一个 Pyhon Web 服务和 redis 服务。
- Pyhon Web 服务:使用 Dockerfile 构建了当前镜像。将 Web 容器内部的5000端口映射到 host 的5000端口;并将 Web 容器与 redis 容器连接。
- redis服务:该容器直接由官方的 redis 镜像创建。
启动 docker-compose.yml
在项目目录下,使用命令 docker-compose up
启动
测试
Docker Compose 其他命令
在 docker-compose.yml
同一目录下,使用命令:
1 | #后台运行服务 |
命令选项
- -f, –file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml ,可以 多次指定。
- -p, –project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
- –x-networking 使用 Docker 的可拔插网络后端特性
- –x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
- –verbose 输出更多调试信息。
- -v, –version 打印版本并退出。