Docker用法总结(二)compose文件

书接上文,上一篇介绍了dockerfiledocker-compose的关系,以及dockerfile中的常用指令。本篇将介绍docker-compose文件的写法。

Compose file

Docker-compose.yml是主要用于启动docker容器的配置文件,yaml格式,简单讲就配置容器怎样启动,比如使用哪个镜像、怎样映射端口、如何挂载volume,执行什么命令等等,相当于docker run的参数配置文件。

docker-compose命令根据Docker-compose.yml的内容生成镜像或管理容器(开启/停止/重启/查看/删除…)

此外,Docker-compose还可以用来定义和运行由多个容器组成的应用。

Define and run multi-container applications with Docker
https://docs.docker.com/compose/

格式

version: '3'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

最开头的是版本号,兼容性见下表

Compose file formatDocker Engine release
3.718.06.0+
3.618.02.0+
3.517.12.0+
3.417.09.0+
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.417.12.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+
1.01.9.1.+

配置

compose文件中定义的内容包括services, networksvolumes
默认的compose文件为./docker-compose.yml

services

容器的配置信息在services中定义。即:定义应用中包含的每个容器该如何启动

image

定义容器使用的镜像

version: "3"
services:
  webapp:
    image: redis:4
    # ...
build

定义通过docker-compose build命令创建镜像时使用的Dockerfile

version: "3"
services:
  webapp:
    build: ./dir

通过build来定义Dockerfile所在的目录

也可以通过以下的详细配置,自定义Dockerfile:

version: "3"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

其中args是在Dockerfile中定义的变量,比如:

ARG buildno
ARG gitcommithash

RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"

另一种定义格式:

build:
  context: .
  args:
    - buildno=1

此外,buildimage可以一起使用,image用于定义生成的镜像名

version: "3"
services:
  webapp:
    image: taqini/myapp
    build: ./dir
user

定义默认用户

restart

定义容器挂掉后是否自动重启

environment

定义环境变量

    environment:
      - UPLOAD_FOLDER=/var/uploads
      - WORKERS=1
      - LOG_FOLDER=/var/log/xxx
      - ACCESS_LOG=-
      - ERROR_LOG=-
volumes

定义挂载的数据卷

    volumes:
     - ./file/bin:/home/ctf:ro
     - ./file/config/motd:/etc/motd:ro
     - ./file/config/issue:/etc/issue:ro
     - ./file/config/legal:/etc/legal:ro

末尾加:ro可控制容器中数据卷权限为只读

若容器中存在同名文件(夹),本地文件将覆盖容器中文件(夹)

注意:若覆盖文件,文件权限也会覆盖

挂载数据卷,可以使得容器与数据(应用程序数据、配置信息等等)分离,这样在更新容器的时候不会丢失数据

ports

定义端口映射 本地:容器

    ports:
      - "10080:80"
      - "10022:22"
networks

定义网络

command

定义容器默认执行的命令

格式和dockerfile差不多:

version: "3"
services:
  webapp:
    build: ./
    command: bundle exec thin -p 3000
    #command: ["bundle", "exec", "thin", "-p", "3000"]

compose中定义的command会覆盖dockerfile中的CMD

entrypoint

和command类似,不多说了

Next

下一篇介绍docker命令和docker-compose命令

docker命令比较基础,但是命令繁杂

docker-compose像是一个容器管理工具,用起来比较简便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TaQini852

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

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

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

打赏作者

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

抵扣说明:

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

余额充值