赞
踩
Compose和Docker版本兼容性对应关系如下:
container_name: nginx-front
#指定容器名称后,该服务将不允许进行扩展(scale),因为Docker不允许多个容器具有相同的名称。
labels:
com.startupteam.description: "webapp for a startup team"
com.startupteam.department: "test department"
com.startupteam.release: "rc3 for v1.0"
3.构建过程中应用到的相关配置项
每个服务都必须通过 image 来指定镜像或 build 指令(需要 Dockerfile文件)等来自动构建生成镜像
如果使用 build 指令,那么在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置
image用法
指定镜像名称或镜像 ID。如果该镜像在本地不存在,Compose 将会拉取这个镜像
image: nginx:latest
image: 5673fdg8f9
build用法
类似于命令行的 docker build .
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 compose 将会利用它自动构建这个镜像,然后使用这个镜像
version: '3'
services:
nginx-front:
build: ./test
也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。同时使用 dockerfile 指令指定 Dockerfile 文件 名
version: '3'
services:
nginx-front:
build:
context: ./test
dockerfile: Dockerfile-nginx
如果同时指定了 image和 build, image 不在具有单独使用它的意义,而是指定了目前要构建的镜像的名称。 也就是说 Compose 会使用 build 指令中指定的 Dockerfile 构建的镜像,之后构建的镜像名称使用 image 中指定的名字 nginx-front:tag命名
build: ./test
image: nginx-front:tag
4 . command
command指令可以覆盖容器启动后默认执行的命令
command: bundle exec thin -p 3000
也可以写成类似 Dockerfile 中的格式
command: [bundle, exec, thin, -p, 3000]
version: '3'
services:
nginx-front:
build: ./test
depends_on:
- tomcat
- redis
redis:
image: redis
tomcat:
image: tomcat
6.environment
设置环境变量。可以使用数组或字典两种格式
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据
environment:
DEV_ENV: test
SESSION_SECRET:
environment:
- DEV_ENV=test
- SESSION_SECRET
ports:
- "80"
- "80:80"
- "6379:6379"
- "127.0.0.1:8080:8080"
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式
expose:
- "80"
- "443"
services:
nginx-front:
networks:
- test-network-01
...
networks:
test-network-01:
driver: bridge #设置自定义网络的驱动, bridge(默认)/host/none
1). 不显式声明网络环境
docker-compose.yml会创建一个$(basename ${PWD})_default命名的compose网络
version: '3' services: nginx: image: nginx:latest depends_on: - db ports: - "8081:80" links: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: X951068Zl@ [root@master jumpserver]# docker-compose up [root@master jumpserver]# docker network ls ... 3c2b843a81e7 jumpserver_default bridge local ...
2).使用已存在的自定义网络:
networks:
default:
external:
name: jumpserver_default
3).创建一个bridge类型compose网络:
networks:
nginx-network
10.extra_hosts
类似Docker中的 --add-host 参数,指定container额外的host解析
extra_hosts:
- "registry.yun-ti.com:192.168.0.50"
- "code.yun-ti.com:192.168.0.50"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 180s
timeout: 10s
retries: 3
version: '3'
services:
nginx-front:
images: nginx:latest
depends_on:
- tomcat
- redis
links:
- tomcat
- redis
#使用的别名将会自动在服务容器中的/etc/hosts里创建:
172.1.0.2 tomcat
172.1.0.3 redis
deploy # v3 版本以上, 指定与部署和运行服务相关的配置, deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarm endpoint_mode # v3.3 版本中新增的功能, 指定服务暴露的方式 vip # Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址 dnsrr # DNS轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表, 客户端直接访问其中的一个地址 labels # 指定服务的标签,这些标签仅在服务上设置 mode # 指定 deploy 的模式 global # 每个集群节点都只有一个容器 replicated # 用户可以指定集群中容器的数量(默认) placement # 不知道怎么用 replicas # deploy 的 mode 为 replicated 时, 指定容器副本的数量 resources # 资源限制 limits # 设置容器的资源限制 cpus: "0.5" # 设置该容器最多只能使用 50% 的 CPU memory: 50M # 设置该容器最多只能使用 50M 的内存空间 reservations # 设置为容器预留的系统资源(随时可用) cpus: "0.2" # 为该容器保留 20% 的 CPU memory: 20M # 为该容器保留 20M 的内存空间 restart_policy # 定义容器重启策略, 用于代替 restart 参数 condition # 定义容器重启策略(接受三个参数) none # 不尝试重启 on-failure # 只有当容器内部应用程序出现问题才会重启 any # 无论如何都会尝试重启(默认) delay # 尝试重启的间隔时间(默认为 0s) max_attempts # 尝试重启次数(默认一直尝试重启) window # 检查重启是否成功之前的等待时间(即如果容器启动了, 隔多少秒之后去检测容器是否正常, 默认 0s) update_config # 用于配置滚动更新配置 parallelism # 一次性更新的容器数量 delay # 更新一组容器之间的间隔时间 failure_action # 定义更新失败的策略 continue # 继续更新 rollback # 回滚更新 pause # 暂停更新(默认) monitor # 每次更新后的持续时间以监视更新是否失败(单位: ns|us|ms|s|m|h) (默认为0) max_failure_ratio # 回滚期间容忍的失败率(默认值为0) order # v3.4 版本中新增的参数, 回滚期间的操作顺序 stop-first #旧任务在启动新任务之前停止(默认) start-first #首先启动新任务, 并且正在运行的任务暂时重叠 rollback_config # v3.7 版本中新增的参数, 用于定义在 update_config 更新失败的回滚策略 parallelism # 一次回滚的容器数, 如果设置为0, 则所有容器同时回滚 delay # 每个组回滚之间的时间间隔(默认为0) failure_action # 定义回滚失败的策略 continue # 继续回滚 pause # 暂停回滚 monitor # 每次回滚任务后的持续时间以监视失败(单位: ns|us|ms|s|m|h) (默认为0) max_failure_ratio # 回滚期间容忍的失败率(默认值0) order # 回滚期间的操作顺序 stop-first # 旧任务在启动新任务之前停止(默认) start-first # 首先启动新任务, 并且正在运行的任务暂时重叠
volumes:
- /etc/conf
- cache/:/tmp/cache
- ~/home/nginxlogs:/var/logs/nginx:ro
version: "3.2" services: nginx-front: image: nginx:alpine volumes: # 卷 (volume) - type: volume source: ngx-cfg-data target: /etc/nginx volume: nocopy: true # 挂载 (bind) - type: bind source: /home/static target: /usr/share/nginx/html mysql: image: mysql:5.7.3 volumes: - "/var/run/mysql/mysql.sock:/var/run/mysql/mysql.sock" - "msyql-data:/var/lib/mysql" volumes: ngx-cfg-data: mysql-data
容器的限制的参数
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
2.sysctl
配置容器内核参数
sysctls:
net.core.somaxconn: 10240
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=10240
- net.ipv4.tcp_syncookies=0
version: "3.6" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure mysql: image: mysql:5.7.3 volumes: - db-data:/var/lib/mysql networks: - backend deploy: placement: constraints: [node.role == manager] vote: image: dockersamples/examplevotingapp_vote:before ports: - "5000:80" networks: - frontend depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - "5001:80" networks: - backend depends_on: - db deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 labels: [APP=VOTING] restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s placement: constraints: [node.role == manager] visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: frontend: backend: volumes: db-data:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。