docker-compose配置详解

1 配置文件的格式

  • 一份示例docker-compose.yml
    services:
      elasticsearch:
        image: elasticsearch:7.14.2
        container_name: es
        environment:
          discovery.type: single-node
          ES_JAVA_OPTS: "-Xms512m -Xmx512m"
        ports:
          - "9200:9200"
          - "9300:9300"
        healthcheck:
          test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
          interval: 10s
          timeout: 10s
          retries: 3
        networks:
          - elastic
      logstash:
        image: logstash:7.14.2
        container_name: log
        environment:
          discovery.seed_hosts: logstash
          LS_JAVA_OPTS: "-Xms512m -Xmx512m"
        volumes:
          - ./logstash/pipeline/logstash-nginx.config:/usr/share/logstash/pipeline/logstash-nginx.config
          - ./logstash/nginx.log:/home/nginx.log
        ports:
          - "5000:5000/tcp"
          - "5000:5000/udp"
          - "5044:5044"
          - "9600:9600"
        depends_on:
          - elasticsearch
        networks:
          - elastic
        command: logstash -f /usr/share/logstash/pipeline/logstash-nginx.config
      kibana:
        image: kibana:7.14.2
        container_name: kib
        ports:
          - "5601:5601"
        depends_on:
          - elasticsearch
        networks:
          - elastic
    networks:
      elastic:
        driver: bridge
    

2 详解services部分

2.1 image

  • web 用户自定义的服务名称
  • image 可以指定为镜像名称或镜像ID,如果本地不存在会自动去尝试拉取
services:
  web:
    image: redis

2.2 build

  • 服务启动可以基于2.1 image,也可以基于Dockerfile文件,启动时会在up的时候执行构建任务。
  • 子标签context 设定上下文根目录
  • 子标签dockerfile 指定Dockerfile文件
  • 子标签args 指定构建过程中使用到的环境变量
    services:
      web:
        build:
          context: ../
          dockerfile: Dockerfile
          args:
          	- buildno=1
          	- password=123456
    
  • 同时指定image和build标签会将构建的镜像命名为image后面的名称
    services:
      web:
        build: .
        image: webapp:tag
    

2.3 command

  • 使用command会覆盖镜像启动后要默认执行的命令
    services:
      web:
        command: redis-server /etc/redis/redis.conf --appendonly yes
    
    services:
      web:
        command: ["redis-server", "/etc/redis/redis.conf", "--appendonly", "yes"]
    

2.4 container_name

  • docker-compose启动容器名称格式为:<项目名称><服务名称><序号>
  • 也可以通过container_name自定义容器名称
    services:
      web:
        container_name: redis-6379
    

2.5 depends_on

  • 一般在项目中容器需要有特定的启动顺序,否则会因为依赖问题而启动失败。
  • 示例:如果没有启动数据库就启动应用容器,那么应用容器可能会因为找不到数据库而退出
  • 解决:depends_on
    services:
      web: 
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis:latest
      db:
        image: mysql:5.7
    

2.6 dns

  • 和docker run中的--dns参数一样用途
    services:
      web: 
        dns: 8.8.8.8
    
    services:
      web: 
        dns: 
          - 8.8.8.8
          - 114.114.114.114
    

2.7 entrypoint

  • Dockerfile中有个指令ENTRYPOINT用于指定接入点,docker-compose.yml中定义entrypoint会覆盖Dockerfile中的定义
    services:
      web: 
        entrypoint: java -jar app.jar --spring.profiles.active=release 
    
    services:
      web: 
        entrypoint: 
          - java
          - -jar
          - app.jar
          - --spring.profiles.active=release 
    

2.8 environment

  • 相当于docker run -e的功能
    services:
      mysql: 
        image: mysql
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - MYSQL_ALLOW_EMPTY_PASSWORD=yes 
    

2.9 extra_hosts

  • 添加主机名的映射,相当于往/etc/hosts添加记录,相当于docker run --add-host的功能
    services:
      web: 
        extra_hosts: 
          - webnode1:192.168.171.100
          - webnode2:192.168.171.101
    
  • 这时容器中/etc/hosts可以看到
    192.168.171.100 webnode1
    192.168.171.101 webnode2
    

2.10 ports

  • 端口映射标签,相当于docker run -p功能
    services:
      web: 
        ports:
          - 80:80
          - 1180:1180 
    

2.11 volumes

  • 挂载一个目录,或者一个已经存在的数据卷容器,相当于docker run -v功能
  • HOST:CONTAINER HOST:CONTAINER:ro:ro表示只读,默认为可读可写
    services:
      web: 
        volumes:
          - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
          - ./webdist:/home/webdist
    

2.12 volumes_from

  • 从其他容器或者服务挂载数据卷
  • 可选参数为::ro表示容器对数据卷是只读、:rw表示可读可写。默认是可读可写。
    services:
      web:
        volumes_from:
          - service_name
          - service_name:ro
          - container:container_name
          - container:container_name:rw
    

2.13 networks

  • 加入指定网络
    services:
      web:
        networks:
          - web-net
          - backend-net
    

2.14 cap_add、cap_drop

  • 添加或删除容器的内核功能

2.15 cgroup_parent

  • 指定容器的父级cgroup

2.16 其他

  • 还有其他单值标签:user working_dir hostname privileged restart
    services:
      web:
        user: mysql
        working_dir: /home/webdist
        hostname: webnode
        privileged: true
        restart: always
    
参考文章:

https://www.jianshu.com/p/2217cfed29d7

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值