首页 > 技术文章 > docker-compose.yml

yuanchuziwen 2021-09-25 17:03 原文

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

推荐阅读