Loading

docker-compose

总结:

文件定义的为一个应用程序应该如何运行。所以其内容应该由两个部分组成,一份为资源定义,也就是容器需要的存储资源,网络资源, 第二部分是容器的定义。

例子:

定义

  • 两个服务,一个前端web服务,以及一个后台数据库服务。
  • 一个数字证书用于HTTPS
  • web服务配置
  • 一个持久化卷用于数据库服务
  • 两个网络

services:
  frontend:
    image: awesome/webapp
    ports:
      - "443:8043"
    networks:
      - front-tier
      - back-tier
    configs:
      - httpd-config
    secrets:
      - server-certificate

  backend:
    image: awesome/database
    volumes:
      - db-data:/etc/data
    networks:
      - back-tier

volumes:
  db-data:
    driver: flocker
    driver_opts:
      size: "10GiB"

configs:
  httpd-config:
    external: true

secrets:
  server-certificate:
    external: true

networks:
  # The presence of these objects is sufficient to define them
  front-tier: {}
  back-tier: {}

容器属性配置
  • privileged
    privileged : true 设置容器以root模式运行。这会影响很多东西,例如,物理机的/proc目录与容器的/proc目录将完全一致。
  • environment
    设置容器环境变量
  • runtime
    运行时容器的实现,容器是一个规范,由OCI组织定义,至于实现,就有各种各样的实现了。
  • sysctls
    只能修改具有名称空间的内核参数,因为需要实现进程间隔离。
sysctls:
	net.core.somaxconn: 1024
	net.ipv4.tcp_syncookies: 0
  • restart
    容器终止时采用的策略
no : 不执行任何操作
always:一直尝试重启
on-failure: 如果退出代码指示错误,策略将重新启动容器。
unless-stopped: 策略将重新启动容器,而不考虑退出代码,但在服务停止或删除时将停止重新启动。
网络配置

(1) IP地址配置

ipam:
  driver: default  # 网络驱动类型
  config:
    - subnet: 172.28.0.0/16 # 子网网段
      ip_range: 172.28.5.0/24 # 容器允许使用的IP地址
      gateway: 172.28.5.254 # 网关
      aux_addresses:        # hostname 与 IP地址的映射
        host1: 172.28.1.5
        host2: 172.28.1.6
        host3: 172.28.1.7
  options:
    foo: bar
    baz: "0"

(2) 定义网络是否为外部

# 网络的生命周期是否大于容器,如果大于容器,则 compose 不应该试图创建。而是查询使用已有的网络。

services:
  proxy:
    image: awesome/proxy
    networks:
      - outside
      - default
  app:
    image: awesome/app
    networks:
      - default

networks:
  outside:
    external: true

(3) 端口映射
使用端口映射的前提是网络模式不能为host。

# 短语法格式
ports:
  - "3000" # 单一端口号
  - "3000-3005" # 范围端口号
  - "8000:8000" # 单一端口号映射
  - "9090-9091:8080-8081" # 范围映射
  - "49100:22"
  - "127.0.0.1:8001:8001" # 网段指定
  - "127.0.0.1:5000-5010:5000-5010" # 网段范围指定
  - "6060:6060/udp" # 网络协议指定

# 长语法格式
ports:
  - target: 80 # 容器端口地址
    host_ip: 127.0.0.1 # 主机IP地址
    published: 8080 # 主机端口号
    protocol: tcp # 协议
    mode: host # ingress 用于负载均衡 host用于暴露端口 

容器标签
labels:
  com.example.description: "Financial transaction network"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
labels:
  - "com.example.description=Financial transaction network"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

参考资料
https://github.com/compose-spec/compose-spec/blob/master/spec.md

posted @ 2021-09-29 15:06  Test002  阅读(4)  评论(0)    收藏  举报