docker-compose

docker-compose是基于docker的编排工具,能够更方便定义,管理容器,这个工具可以使用yml格式来定义,通过一条命令就可以根据编写的yml文件来创建,管理容器

为什么使用docker-compose

熟悉docker的伙伴就一定听说过docker-compose,在某些特定情况下我们要写dockerfile,构建镜像,再通过构建好的镜像 使用docker run 指定端口或者文件映射,如果只是几个容器的话,运行 管理不会很乱(规则上和使用上),一旦容器增多,你和你的同事小伙伴一起维护,因为我们每次运行的时候都要加上-v  -p 这些参数,难免会有缺少参数的情况

docker-compose就很好的解决了这个问题,可以在yml文件中提前定义好容器的镜像,数据卷,网络,端口映射等等,只需要 docker-compose up指定文件启动容器,方便维护管理

安装 docker-compose

docker-compose的安装非常的简单,只需要下载可执行的二进制文件,把他放到/use/local/bin 目录 给一个可执行权限就可以 我网盘里面有1.2版本和2.5版本,微信公众号后台回复docker-compose获取二进制包(linux的)

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 给权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version

docker-compose 参数

docker-compose通过yml文件来配置容器规则的,需要遵循yml的规则:

🥗 大小写敏感

🥗 缩进表示层级管理 

🥗不支持制表符tab,缩进要使用空格键,缩进一般是两个空格

🥗 字符后缩进1个空格 如 冒号 逗号

看一个我们使用的docker-compose 下面我们也会围绕这两段看内容

先看第一段 使用官方镜像的:

version: '3.0'
services:
  test-redis: 
    image: redis:7.0.0
    restart: always
    container_name: test-redis
    ports:
    - 6379:6379
    volumes:
    - ./data/init-data/redis/redis.conf:/etc/redis.conf
    - ./data/init-data/redis/data:/var/lib/redis
    command: redis-server /etc/redis.conf

可以通过上面的这个例子看出 每一行的缩进都是二的倍数 

下面我们来看他的参数

🥪  version

version字段表明使用了哪个版本的compose,不同的compose支持不同docker版本,可以在这个连接中查看版本对应关系:

https://docs.docker.com/compose/compose-file/compose-file-v3/

一般使用的是2.0,2.2,3.3 等等版本 

🥪  services

services标签定义所有的service信息,services下面的第一级是service的名字 上面的例子中 test-redis就是一个services的名称,也可以称之为子服务名

一个docker-compose文件中 version和services 这两行是必填在最开头的

🥪  image

image标签是指定服务的镜像 可以填写镜像的名称 或者是镜像:版本,也可以填写镜像的ID。镜像在本地不存在,会尝试拉取这个镜像

格式如下:

image: redis            # 默认pull laster镜像
image: redis:7.0.0    #  指定镜像版本
image: 镜像仓库/redis # 在镜像仓库中pull (个人或公司)
image: 6854c25e2674 # 通过镜像id pull

🥪  restart

restart标签 定义了启动容器的参数 就等同于 docker run中 --restart=always 一般经常使用的是always 在容器退出时总是重启容器,他还有其他参数:

no 默认策略,在容器退出时,不重启容器

on-failure 在容器非正常退出时(退出状态非0),才会重启

om-failure:3 在容器非正常退出时重启容器,最多重启三次

always 在容器退出时总是重启容器

格式如下:

  test-redis: 
    image: redis:7.0.0
    restart: always  # 在容器退出时总是重启容器

🥪  container_name

container_name标签是定义容器的名字,自定义

格式如下:

  test-redis: 
    image: redis:7.0.0
    restart: always
    container_name: test-redis  # 启动容器的名字


🥪  ports

ports标签是定义容器映射的端口,注意 容器端口要大于60 因为小于60你可能会得到一个错误的结果,yaml将会解析xx:yy这种数字格式为60进制,建议使用字符串格式

格式如下:

  ports:
  - 6379 # 容器内部6379,外部端口随机分配为主机未占用的端口
  - "6379"  # 上同
  - 6379:6379 # 容器内部6379映射容器外部6379
  - 7000-7010:7000-7010 # 这个范围的端口做映射
  - 6379:6379/udp # 限制为指定的协议

🥪  volumes

volumes标签 挂载一个目录,文件或一个已存在的数据卷容器,compose的数据卷指定路径可以是相对目录,使用 . 或者 .. 来指定相对目录。

格式如下:

  volumes:
  # 只是指定一个容器内部的路径,docker会自动创建一个逻辑卷
  - /data/redis/data
  # 使用绝对路径挂载 容器外:容器内
  - /data/redis/data:/var/lib/redis
  # 相对路径 以docker-compose文件所在的目录为相对路径
  - ./data/init-data/redis/redis.conf:/etc/redis.conf
  # 使用用户的相对路径 root用户 相对路径/root
  - ~/data/redis:/var/lib/redis
  # 使用已存在命名的数据卷
  - redisvolume:/var/lib/redis

🥪  command

command标签 类似于dockerfile中的cmd ,entrypoint 它会覆盖容器启动后默认执行的命令

格式如下:

    command: redis-server /etc/redis.conf
    command: ["redis-server","/etc/redis.conf"]

看第二段 通过使用dockerfile构建完成的镜像运行容器

  test-minio:
    build:
      context: ./
      dockerfile: ./minio/Dockerfile
    image: minio
    restart: always
    container_name: test-minio
    ports:
    - 9000:9000
    - 8888:8888
    volumes:
    - ./data/init-data/minio:/data/minio

🥪  build

build标签 可以指定dockerfile所在的路径,也可以通过context和dockerfile配合使用指定路径 上面的例子中既有build标签,也有image标签 这个是说 build构建完成的镜像命名为image标签的内容

格式如下:

  build: ./minio
  image: minio

🥪  context

context标签设置上下文根目录,以该目录为准来指定dockerfile

格式如下

  test-minio:
    build:
      context: ./  # 指定当前目录为指定目录
      dockerfile: minio/Dockerfile # 以context为当前目录 指定dockerfile目录

🥪  dockerfile

dockerfile标签是指定dockerfile文件路径 注意 以dockerfile结尾 例子👆

下面是经常会使用的一些参数

🥪  extra_hosts

extra_hosts标签作用是 往容器内/etc/hosts文件中添加记录,注意格式是相反的

格式如下:

  test-smartid:
    build:
      context: ./
      dockerfile: ./smartid/Dockerfile
    restart: always
    container_name: test-smartid
    image: test-smartid
    extra_hosts: # 在这里噢
    - "test-mysql:192.168.8.241" # 添加主机名

🥪  hostname

hostname标签是设置容器的主机名

格式如下:

  test-mq:
    hostname: test-mq # 设置容器主机名为test-mq
    image: rabbitmq:3.8.30

🥪  environment

environment设置环境变量 和dockerfile中ENV作用一致

格式如下:

  test-mq:
    hostname: test-mq
    image: rabbitmq:3.8.30-management
    restart: always
    container_name: test-mq
    environment:  # 设置环境变量
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest

🥪  depends_on

depends_on标签解决了容器间依赖的问题,启动容器的先后顺序 ,假设我写了两个自服务 redis 和 mq 我在mq服务中设置 depends_on redis ,那就要等 redis启动之后 mq在启动

格式如下:

  test-mq:
    hostname: test-mq
    image: rabbitmq:3.8.30-management
    restart: always
    container_name: test-mq
    environment:
      RABBITMQ_DEFAULT_VHOST: "/"
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
    ports:
    - 5672:5672
    - 15672:15672
    - 25672:25672
    depends_on:  # 等待  test-redis容器启动之后 再启动mq
      - test-redis


🍨:ok 本期内容就到这里啦,如果这个文章写的有什么问题欢迎指正,也可以留言一起讨论,最后最后最后,如果觉得我的文对你有帮助的话,也欢迎 一键三连支持一下~

    preview

如果觉得我的文对你有帮助的话 可以关注下我的公众号 一般写文第一时间发布到公众号中

公众号名称 咕咕崽

二维码: 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值