docker 编排工具:
yum install -y docker-compose
使用方式:
创建一个工作目录, 在工作目录中创建一个 docker-compose.YAML 文件!
docker-compose 相关参数:
build
构建或重新构建服务.
服务一旦构建后, 将会带上一个标记名, 例如 web_db.
可以随时在项目目录下运行 docker-compose build 来重新构建服务.
help
获得一个命令的帮助.
kill
通过发送 SIGKILL 信号来强制停止服务容器. 支持通过参数来指定发送的信号, 例如
logs
查看服务的输出.
port
打印绑定的公共端口.
ps
列出所有容器.
pull
拉取服务镜像.
rm
删除停止的服务容器.
run
在一个服务上执行一个命令.
start
启动一个已经存在的服务容器.
stop
停止一个已经运行的容器, 但不删除它. 通过 docker-compose start 可以再次启动这些容器.
up
构建,(重新)创建, 启动, 链接一个服务相关的容器.
链接的服务都将会启动, 除非他们已经运行.
默认情况, docker-compose up 将会整合所有容器的输出, 并且退出时, 所有容器将会停止.
如果使用 docker-compose up -d , 将会在后台启动并运行所有的容器.
默认情况, 如果该服务的容器已经存在,
docker-compose up 将会停止并尝试重新创建他们(保持使用 volumes-from 挂载的卷),
以保证 docker-compose.YAML 的修改生效. 如果你不想容器被停止并重新创建,
可以使用 docker-compose up --no-recreate. 如果需要的话, 这样将会启动已经停止的容器.
docker-compose.YAML 文件中配置项:
build
指定 Dockerfile 所在文件夹的路径. Compose 将会利用它自动构建这个镜像, 然后使用这个镜像.
使用格式:
- build: /path/to/build/dir
- image
指定为镜像名称或镜像 ID. 如果镜像在本地不存在, Compose 将会尝试拉去这个镜像.
command
覆盖容器启动后默认执行的命令
使用格式:
- command: bundle exec thin -p 3000
- links
链接到其它服务中的容器. 使用服务名称 (同时作为别名) 或服务名称: 服务别名 (SERVICE:ALIAS) 格式都可以.
使用的别名将会自动在服务容器中的 /etc/hosts 里创建
使用格式:
- links:
- - db
- - db:database
- - Redis
- external_links
链接到 docker-compose.YAML 外部的容器, 甚至 并非 Compose 管理的容器. 参数格式跟 links 类似.
使用格式:
- external_links:
- - redis_1
- - project_db_1:MySQL
- - project_db_1:PostgreSQL
- ports
暴露端口信息.
使用宿主: 容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口 (宿主将会随机选择端口) 都可以.
使用格式:
- ports:
- - "3000"
- - "8000:8000"
- - "49100:22"
- - "127.0.0.1:8001:8001"
- expose
暴露端口, 但不映射到宿主机, 只被连接的服务访问.
仅可以指定内部端口为参数
使用格式:
- expose:
- - "3000"
- - "8000"
- volumes
卷挂载路径设置. 可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)
volumes_from
从另一个服务或容器挂载它的所有卷.
使用格式:
- volumes:
- - /var/lib/MySQL
- - cache/:/tmp/cache
- - ~/configs:/etc/configs/:ro
- environment
设置环境变量. 你可以使用数组或字典两种格式.
只给定名称的变量会自动获取它在 Compose 主机上的值, 可以用来防止泄露不必要的数据.
使用格式:
- environment:
- RACK_ENV: development
- SESSION_SECRET:
- environment:
- - RACK_ENV=development
- - SESSION_SECRET
- env_file
从文件中获取环境变量, 可以为单独的文件路径或列表.
如果通过 docker-compose -f FILE 指定了模板文件, 则 env_file 中路径会基于模板文件路径.
如果有变量名称与 environment 指令冲突, 则以后者为准.
使用格式:
- env_file: .env
- env_file:
- - ./common.env
- - ./apps/Web.env
- - /opt/secrets.env
- extends
基于已有的服务进行扩展. 例如我们已经有了一个 webapp 服务, 模板文件为 common.YAML
net
设置网络模式. 使用和 docker client 的 --net 参数一样的值
使用格式:
- net: "bridge"
- net: "none"
- net: "container:[name or id]"
- net: "host"
- pid
跟主机系统共享进程命名空间. 打开该选项的容器可以相互通过进程 ID 来访问和操作.
使用格式:
pid: "host"
dns
配置 DNS 服务器. 可以是一个值, 也可以是一个列表.
使用格式:
- dns: 8.8.8.8
- dns:
- - 8.8.8.8
- - 9.9.9.9
- dns_search
配置 DNS 搜索域. 可以是一个值, 也可以是一个列表.
实际案例: 单机编排博客软件
首先说明: 三个镜像都是自己做的!
所以直接使用即可!
- [root@www22:33:54docker-compose]#cat docker-compose.YAML
- #version: '3'
- #services:
- apache-Web:
- image: 7b8b22661c10
- volumes:
- - /var/lib/docker/volumes/df3d545290f33921568de287532f8bed74551e7df113e054239a9e56a042e805/_data:/Web/html
- ports:
- - "80:80"
- restart: always
- PHP-fpm:
- image: 172.20.23.31/phpapp1/CentOS-PHP-app1:v1
- ports:
- - "9000:9000"
- volumes:
- - /var/lib/docker/volumes/df3d545290f33921568de287532f8bed74551e7df113e054239a9e56a042e805/_data:/Web/HTML
- restart: always
- server_db:
- image: 172.20.23.31/mysqlapp1/centos7.5-MySQL-app1:v1
- ports:
- - "3306:3306"
- volumes:
- - /var/lib/docker/volumes/3daa3a70e12236e18f32454b3612a419de3070ae70ba41ac7fc2974a95b6eb05/_data:/mydata/data
- restart: always
来源: http://www.bubuko.com/infodetail-2846195.html