2020-03-22 21:45:12
Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具。使用 Docker Compose,可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。
Docker Compose 定位是 ‘defining and running complex applications with Docker’,前身是 Fig,兼容 Fig 的模板文件。
Docker Compose 发展至今,有 Version 1、Version 2、Version 3 三个大版本。如果不声明版本,默认为 Version 1。Version 1 不能使用 volumes,、networks、 build参数。Version 2,必须在版本中申明,所有的服务,都必须申明在 service 关键字下。Version 3 删除了 volume_driver、volumes_from、cpu_shares、cpu_quota、cpuset、mem_limit、memswap_limit、extends、group_add关键字,新增了 deploy,全面支持 Swarm mode。更详细的比较可以查看参考链接。
本文中主要以 Version 2 为例学习 Docker Compose 容器的编排。
Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml、extends文件、环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。
一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose 的工程配置文件默认为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。以下是一个简单的配置文件:
version: '2'
services:
web:
build: .
ports:
- "80:90"
volumes:
- .:/code
links:
- redis
redis:
image: redis
其定义了两个服务 web 和 redis。web 服务的镜像需要使用当前目录的 Dockerfile 实时构建,其容器运行时需要在宿主机开放端口 80 并映射到容器端口 90 ,并且挂载存储卷 /code 以及关联服务 redis。redis 服务通过镜像 redis 启动。
Docker Compose 是由 Python 语言实现的,它通过调用 docker-py 库(可参考
http://github.com/docker/docker-py )与 docker engine 通信实现构建 docker 镜像,启动停止 docker 容器等。Docker-py 库调用 docker remote API(可参考 http://docs.docker.com/reference/api/docker_remote_api/ )与 Docker Daemon 通信,可通过 DOCKER_HOST 配置本地或远程 Docker Daemon 的地址。
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
build: /path/to/build/dir
覆盖容器启动后默认执行的命令。
command: echo "hello world"
如果需要指定额外的编译镜像的 Dockefile 文件,可以通过该指令来指定。例如:
dockerfile: Dockerfile-alternate
注意,该指令不能跟 image 同时使用,否则 Compose 将不知道根据哪个指令来生成最终的服务镜像。
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
环境变量文件中每一行必须符合格式,支持 # 开头的注释行。
# common.env: Set development environment
PROG_ENV=development
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。例如:
environment:
RACK_ENV: development
SESSION_SECRET:
或者
environment:
- RACK_ENV=development
- SESSION_SECRET
注意,如果变量名称或者值中用到 true|false,yes|no 等表达布尔含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。
http://yaml.org/type/bool.html 中给出了这些特定词汇,包括
y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF
暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数
expose:
- "3000"
- "8000"
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。例如:
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以。
links:
- db
- db:database
- redis
使用的别名将会自动在服务容器中的 /etc/hosts 里创建。例如:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
被链接容器中相应的环境变量也将被创建。
数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。该指令中路径支持相对路径。例如
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
从另一个服务或容器挂载它的数据卷。
volumes_from:
- service_name
- container_name
Docker Compose 项目打包部署
04-17
Ubuntu 16.04安装Docker Compose及简单的使用示例
05-21
Docker环境的CI/CD持续集成持续交付
03-20
给 Python 初学者:从零入门 Django 开发网站教程
04-01
使用 Docker 搭建 Tomcat 运行环境
07-24
快速入门: Compose和Rails
07-02
Dockerfile参考(1) – 用法
05-22
Dockerfile参考(2) – 格式
05-31
Docker使用示例(3) – 调试容器
06-16
Docker使用示例(4) – 清理容器和镜像
06-10
Docker命令行参考(11) – Docker load从tar归档文件或STDIN导入镜像
07-20
Docker命令行参考(14) – Docker attach附着到一个运行中的容器
07-19
Docker命令行参考(18) – Docker exec在运行中的容器执行一个命令
06-02
Docker命令行参考(2) – Dockerd启动Docker daemon
05-03
Docker命令行参考(26) – Docker stats实时显示容器资源使用统计
06-21
Docker命令行参考(4) – Docker inspect显示容器或镜像相关信息
07-19
Docker命令行参考(6) – Docker commit提交容器的更改创建新镜像
07-15
Docker安装配置tomcat jdk
06-21
Docker-postfix, 在 Docker 容器中,使用smtp身份验证( sasldb ) 运行后缀
06-26
Ubuntu 16.04使用Docker部署WordPress
06-13
SimLab Composer 10(三维场景制作软件) v10.5 免费版 附安装教程
252.84M
下载Geany windows(集成开发环境) V1.31 官方版
15.1MB
下载HTML5可视化开发工具下载
13.9M
下载PHP开发工具(PHP程序开发软件) V7.3.3.0 中文版
22.56 MB
下载h3c模拟器(网络虚拟环境配置工具) 1.5.2 正式版
59.1M
下载jre7(java运行环境软件)v7.0.650.20 免费版
25.7M
下载pl sql developer(Oracle数据库存储程序单元的开发软件)2021 免费版
25.2M
下载proteus(系统仿真开发软件) v8.8 中文版
371.9MB
下载360压缩软件
11.36 MB
下载BIGEMAP离线地图服务器下载
48.9M
下载Enigma Virtual Box下载
4.2M
下载Keil5下载
285MB
下载WampServer
378.36 MB
下载codeblocks
35.64 MB
下载slashB下载
51.8M
下载vs2012下载
1.1GB
下载wordpress下载 v5.2.3官方中文版
12M
下载x-studio365下载
15.7M
下载微信域名防封检测工具
7.6M
下载炫彩界面库下载
8.76 MB
下载