version: "3"
services:
webapp:
build:
context: ./dir # 指定 Dockerfile所在文件夹的路径
dockerfile: Dockerfile-alternate # 指定 Dockerfile文件名
args: # 指定构建镜像时的变量
buildno: 1
cache_from: # 指定构建镜像的缓存
- alpine:latest
- corp/web_app:3.14
cap_add: # 指定容器内核能力分配
- ALL
cap_drop: # 剔除哪些能力
- NET_ADMIN
command: # 覆盖容器启动后默认执行的命令
echo "hello world"
configs: # 仅用于 Swarm mode
cgroup_parent: cgroups_1 # 指定父 cgroup组,意味着将继承该组的资源限制
container_name: docker-web-container # 指定容器名称,一般是 项目名称-服务名称-序号
deploy: # 仅用于 Swarm mode
devices: # 指定设备映射关系
- "/dev/ttyUSB1:/dev/ttyUSB0"
depends_on: # 解决容器的依赖、启动先后的问题
- db
- redis
dns: # 自定义 DNS服务器,可以是一个值,也可以是一个列表
- 8.8.8.8
- 114.114.114.114
dns_search: # 配置 DNS搜索域
- domain1.example.com
- domain2.example.com
tmpfs: # 挂载一个 tmpfs文件系统到容器
- /run
- /tmp
env_file: # 从文件中获取环境变量 env_file中变量的路径会基于模版文件的路径,如果有变量名称域 environment指令冲突,以后者为准
- ./common.env
- ./apps/web.env
# 环境变量文件中每一行必须符合格式,支持 #开头的注视行
# # common.env: Set development environment
# PROG_ENV=development
environment: # 设置环境变量,如果这些变量名称中使用到了 true,false,yes,no等敏感词汇,最好放到引号中
- RACK_ENV=development
- SESSION_SECRET
expose: # 暴露端口,但不映射到宿主机,只被连接的服务访问
- "3000"
- "8000"
external_links: # (不建议使用)链接到 docker-compose.yml外部的容器中,甚至并非 compose管理的外部容器不建议使用
- redis_1
- project_db_1:mysql
extra_hosts: # 指定额外的 host名称映射信息,会在启动后服务容器中的 /etc/hosts文件中添加配置的内容
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
healthcheck: # 通过命令检查容器是否健康运行
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
image: ubuntu # 指定为镜像名称或镜像 ID
labels: # 添加 Docker元数据(metadata信息)
com.startupteam.description: "webapp for a startup team"
com.startupteam.department: "devops department"
com.startupteam.release: "rc3 for v1.0"
links: #(不推荐使用)创建同其他容器间的连接
logging: # 配置日志选项
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
# 目前支持 3种格式的日志驱动类型
# driver: "json-file"
# driver: "syslog"
# driver: "none"
#
# options 配置日志驱动的相关参数
# max-size: "200k"
# max-file: "10"
networks: # 配置容器链接的网络
some-network:
other-network:
pid: "host" # 跟主机系统共享进程命名空间,在开启该选型的容器之间以及容器同宿主机之间可以通过进程 ID相互访问
ports: # 暴露端口信息,使用 宿主端口:容器端口 (HOST:CONTAINER)的格式
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
# 如果使用的容器端口小于 60并且没放到引号里,可能会得到错误结果,因为 yml会自动解析 xx:yy这种数字格式为 60进制
secrets: # 存储敏感数据,例如 mysql服务密码
- db_root_password
- my_other_secret
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
security_opt: # 指定容器模版标签(label)机制的默认属性(用户、角色、类型、级别等)
- label:user:USER
- label:role:ROLE
stop_signal: SIGUSR1 # 设置另一个信号来停止容器,在默认情况下使用的是 SIGTERM停止容器
sysctls: # 配置容器内核参数
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
ulimits: # 指定容器的 ulimits限制值,例如可以指定最大进程数为 65535,指定文件句柄数为 20000,都可作为软限制
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes: # 数据卷所挂载路径设置,可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER)
# 并且可以设置访问模式(HOST:CONTAINER:ro)
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
# 如果引号前路径设置为数据卷名称,就必须在文件中配置数据卷
# services:
# my_src:
# image: mysql:8.0
# volumes:
# - mysql_data:/var/lib/mysql
#
# volumes:
# mysql_data
entrypoint: /code/entrypoint.sh # 指定服务容器启动后执行的入口文件
user: nginx # 指定容器中运行应用的用户名
working_dir: /code # 指定容器中工作目录
domainname: your_website.com # 指定容器中搜索域名
hostname: test # 主机名
mac_address: 08-00-27-00-0C-0A # mac 地址
privileged: "true" # 允许容器中运行一些特权命令
restart: always # 指定容器退出后的重启策略,该命令对保持服务始终运行十分有效
read_only: "true" # 以只读模式挂载容器的 root文件系统
stdin_open: "true" # 打开标准输入,可以接收外部输入
tty: "true" # 模拟一个伪终端
# Compose模板文件支持动态读取主机的系统环境变量和当前目录下的 .env文件中的变量
# version: "3"
# services:
# db:
# image: "mongo:${MONGO_VERSION}"
```yml