docker-compose 详解

         docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

1、docker-compose 下载安装
# 1、下载(此例下载的是1.25.1版本,可以换成其他版本)
1)GitHub镜像
curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2)、国内镜像
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 2、添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 3、测试
docker-compose --version
2、docker-compose.yml 文件详解

        一份标准的 docker-compose.yml 文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分。  

2.1、总体配置文件 
version "3"      # 指定 compose 文件的版本
services:
  testname:         # 定义所有的 service 信息, services 下面的第一级别的 testname 即是一个 service 的名称
    image: test:1.0  # build 的镜像名和tag
    build:      # 指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile 文件以及 args 参数值
      context: /path/to/build/dir   # context: 指定 Dockerfile 文件所在的路径
      dockerfile: dockerfile     # dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile)
      args:          # args: Dockerfile 在build过程中需要的参数 (等同于docker container build --build-arg的作用)
        key: value
        name: my_app
      cache_from:       # v3.2中新增的参数, 指定缓存的镜像列表 (等同于 docker container build --cache_from 的作用)
        - my_app: 1.0
      labels:               # v3.3中新增的参数, 设置镜像的元数据 (等同于 docker container build --labels 的作用)
        version: 2.0
        released: true
      shm_size: 2gb # v3.5中新增的参数, 设置容器 /dev/shm分区的大小(等同于 docker container build --shm-size的作用)
    command: redis-server /etc/redis/redis.conf  # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式
    container_name:    # 指定容器的名称 (等同于 docker run --name 的作用)
    depends_on:
    networks:
 #     - app_net
       app_net:
         ipv4_address: 192.168.0.5  # 指定服务IP地址,这个在使用scale扩容的时候不适用
    ports:
      - 8080:8080  # 这个在使用scale扩容的时候不适用
    deploy:         # 布署配置
      replicas: 2   # 创建两个副本
      resources:    #设置容器占用资源           
         limits:
            cpus: "2.00"
            memory: 5G
         reservations:
            memory: 200M
    restart: always|on-failure|no|unless-stopped
# always:无论什么状态,容器停了就会重启
# on-failure:退出容器,返回值不是0就重启
# unless-stopped:docker服务停止,然后重启docker服务容器不会自动重启,always会
    volumes:
      - /opt/docker/:/tmp/
    environment:
      RACK_ ENV : development  # 或者 - RACK_ENV=development
      TZ: Asia/Shanghai        # 设置时区
    expose:                # 暴露端口, 但是不能和宿主机建立映射关系, 类似于 Dockerfile 的 EXPOSE 指令
      - 80
    configs:
2.2、各部分配置详情
# 自定义网络
networks:
    app_net:
      driver: bridge
        ipam:
          driver: default   # IPAM 驱动程序, bridge 或者 default
          config:
            - subnet: 172.28.0.0/16
              ip_range: 172.28.5.0/24
              gateway: 172.28.5.254
      external: true   # 外部网络, 如果设置为 true 则 docker-compose up 不会尝试创建它, 如果它不存在则引发错误

# 端口映射两种方式
ports:                 # 建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式
    - "3000"                          # 暴露容器的 3000 端口, 宿主机的端口由 docker 随机映射一个没有被占用的端口
    - "3000-3005"                     # 暴露容器的 3000 到 3005 端口, 宿主机的端口由 docker 随机映射没有被占用的端口
    - "8000:8000"                     # 容器的 8000 端口和宿主机的 8000 端口建立映射关系
    - "9090-9091:8080-8081"
    - "127.0.0.1:8001:8001"           # 指定映射宿主机的指定地址的
    - "127.0.0.1:5000-5010:5000-5010"   
    - "6060:6060/udp"                 # 指定协议
#### 注:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60并且没放到引号里,可能会得到错误结果,因为YAML会自动解析xx:yy这种数字格式为60进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
ports:
  - target: 80                    # 容器端口
      published: 8080               # 宿主机端口
      protocol: tcp                 # 协议类型
      mode: host                    # host 在每个节点上发布主机端口,  ingress 对于群模式端口进行负载均衡

# 数据卷挂载:两种方式
volumes:
  - type: volume                # mount 的类型, 必须是 bind、volume 或 tmpfs
      source: mydata            # 宿主机目录
      target: /data             # 容器目录
      volume:                   # 配置额外的选项, 其 key 必须和 type 的值相同
        nocopy: true            # volume 额外的选项, 在创建卷时禁用从容器复制数据
  - type: bind                  # volume 模式只指定容器路径即可, 宿主机路径随机生成; bind 需要指定容器和数据机的映射路径
      source: ./static
      target: /opt/app/static
      read_only: true             # 设置文件系统为只读文件系统

volumes:
  - /var/lib/mysql                # 映射容器内的 /var/lib/mysql 到宿主机的一个随机目录中
  - /opt/data:/var/lib/mysql      # 映射容器内的 /var/lib/mysql 到宿主机的 /opt/data
  - ./cache:/tmp/cache            # 映射容器内的 /var/lib/mysql 到宿主机 compose 文件所在的位置
  - ~/configs:/etc/configs/:ro    # 映射容器宿主机的目录到容器中去, 权限只读
  - datavolume:/var/lib/mysql     # datavolume 为 volumes 顶级键定义的目录, 在此处直接调用
3、docker-compose 常用命令
docker-compose -f docker-compose.yml up -d  # 指定文件构建镜像,启动容器,后台运行
docker-compose exec 容器名 bash              # 进入指定的容器中
docker-compose logs -f 容器名                # 查看实时日志
docker-compose config  -q   #验证docker-compose.yml文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
docker-compose pause 服务名   # 暂停服务的所有容器
docker-compose unpause 服务名   # 恢复服务的所有容器
docker-compose rm/stop/start/kill/restart 服务名 # 操作服务的所有容器
docker-compose down 容器名 # 删除容器
docker-compose build 服务名  # 构建服务
docker-compose run 服务名  # 运行服务
docker-compose scale <service1>=3 <service2>=3 # 设置某个服务要启动的容器的个数

总结:docker-compose 使用主要是统一容器管理,对对应的服务进行容器化部署,可以指定容器个数(通过副本数指定),其中主要掌握 docker 网络和数据卷挂载相关的内容。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值