docker compose文件常用指令大全
前言
写yaml/yml文件相当于把运行的docker run命令保存下来,方便使用
#######################################################
1、images
指定镜像名称或镜像 ID。
如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
用法:
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
2、ports
暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,
或者仅仅指定容器的端口(宿主将会随机选择端口)。
用法:
ports:
- "3000"
- "8000:8000"
- "127.0.0.1:8001:8001"
3、extra_hosts
类似 Docker 中的 --add-host 参数,配置静态DNS解析。
用发:
extra_hosts:
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
启动后,会在容器的/etc/hosts
文件中添加如下两条条目
8.8.8.8 googledns
52.1.157.61 dockerhub
4、restart
指定容器退出后的重启策略为始终重启。
在生产环境中推荐配置为 always 或者 unless-stopped
用法:
restart: always
restart: unless-stopped
5、hostname && mac_address && domainname
指定容器中搜主机名、mac 地址、索域名等。
用法:
hostname: my_container1
mac_address: 08-00-27-00-0C-0A
domainname: your_website.com
6、labels
打标签,为容器添加 Docker 元数据(metadata)信息。
是解释型语句
用法:
labels:
com.startupteam.description: "webapp for a startup team"
service: ceshi_nginx
7、logging
配置日志选项。
用法:
logging:
driver: syslog
testions:
syslog-address: "tcp://192.168.0.42:123"
常用下面这种:
logging:
options:
labels: "service"
max-size: "100m"
max-file: "4"
目前支持三种日志驱动类型。
driver: "json-file"
driver: "syslog"
driver: "none"
testions 配置日志驱动的相关参数
testions:
max-size: "200k"
max-file: "10"
8、volumes
数据卷所挂载路径设置。
可以设置为宿主机路径(HOST:CONTAINER)
或者数据卷名称(VOLUME:CONTAINER),
并且可以设置访问模式 (HOST:CONTAINER:ro)。
该指令中路径支持相对路径。
用法:
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
如果路径为数据卷名称,必须在文件中配置数据卷。(不建议用)
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
9、deploy(swarm专用)
deploy参数是Docker Compose针对Swarm集群部署提供的,
子参数 专门用于指定与服务部署和运行相关的配置
用法:
deploy:
replicas: 1
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
9.1 mode(可缺省)
部署模式
global:强制在每个 node 上都运行一个且最多一个副本
replicas:副本模式,随机分配
9.2 replicas
表示服务实例的副本数量
9.3 restart_policy
同 4、restart
只是该属性配置在deploy参数下,并只在集群环境下生 效。
有子参数如下:
9.3.1 condition
表示服务重启的条件,值有none、on-failure和 any
9.3.2 delay
表示重启服务之间等待时间,默认为0
9.3.3 max_attempts
表示失败后尝试重启的次数
9.3.4 window
表示等待多久来确定服务是否启动成功
10、depends_on
解决容器的依赖、启动先后的问题。
以下例子中会先启动 redis db 再启动 web,
但是web 服务不会等待 redis db 「完全启动」之后才启动
用法:
services:
web:
build: .
depends_on:
- db
- redis
11、environment(带密码服务的常用)
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据
用法:
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
12、secrets
存储敏感数据,例如 mysql 服务密码
用法:
secrets:
- db_root_password
- my_other_secret
13、healthcheck
通过命令检查容器是否健康运行
用法:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
14、networks
配置容器连接的网络
用法:
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
15、command
覆盖容器启动后默认执行的命令
用法:
command: echo "hello world"
16、placement
平台扩展名,常用在deploy下面,子参数constraints
做约束
用法:
placement:
constraints: [node.hostname == node2]
以上命令已经够用,其他的可参考:
https://yeasy.gitbook.io/docker_practice/compose/compose_file#networks
https://docs.docker.com/compose/compose-file/