发布时间: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
Simlab Composer 10下载
252.84M
Enigma Virtual Box(单文件打包工具) v9.70 中文版
4.2M
HTML5可视化开发工具下载
13.9M
PHP开发工具下载
22.56 MB
h3c模拟器(网络虚拟环境配置工具) 1.5.2 正式版
59.1M
jre7(java运行环境软件)v7.0.650.20 免费版
25.7M
proteus(系统仿真开发软件) v8.8 中文版
371.9MB
slashB(web开发浏览器) v1.4.5 官方版
51.8M
炫彩界面库 (桌面软件开发工具) V2.1.1.0 破解版
8.76 MB
360压缩官方版 v4.0.0.1150
11.36 MB
BIGEMAP离线地图服务器下载
48.9M
Geany下载
15.1MB
Keil5下载
285MB
WampServer
378.36 MB
codeblocks v17.12
35.64 MB
pl sql developer下载
25.2M
vs2012下载
1.1GB
wordpress下载 v5.2.3官方中文版
12M
x-studio365下载
15.7M
微信域名防封检测工具
7.6M
2020-07-08
联想笔记本G460 BIOS虚拟界面
工作过程中蓝屏,报错代码为0x00000124
bind nsupdate动态dns更新工具介绍
联想一体机台式机设置从U盘引导的方法
ubuntu 16.04升级nginx版本
万全T168 G5/T468 G5主板有两个纽扣电池位,另外一个空闲有什么作用?
IdeaCentre B5系列电脑开机或重启时,电源指示灯亮但无显示也无报警声
光驱无法使用,驱动有感叹号,恢复bios重装主板驱动都无效
使用nginx ngx_http_referer_module模块配置防盗链