Docker——Docker Compose

介绍

容许用户经过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。php

两个重要的概念:mysql

  • 服务 (service):一个应用容器,实际上能够运行多个相同镜像的实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元。

一个项目能够由多个服务(容器)关联而成,Compose 面向项目进行管理。nginx

compose 模版文件

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。web

每一个服务都必须经过 image 指令指定镜像或 build 指令(须要 Dockerfile)等来自动构建生成镜像。redis

若是使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。sql

version: '3'
services:

  web:
    build: .
    ports:
     - "5000:5000"

  redis:
    image: "redis:alpine"
复制代码

build

指定 Dockerfile 所在文件夹的路径(能够是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,而后使用这个镜像。docker

build: docker/redis
# 使用 context 指令指定 Dockerfile 所在文件夹的路径
# 使用 dockerfile 指令指定 Dockerfile 文件名
# 使用 arg 指令指定构建镜像时的变量。
# 使用 cache_from 指定构建镜像的缓存
build:
    context: .
    dockerfile: docker/nginx-php7/Dockerfile
    args:
        buildno: 1
    cache_from:
        - alpine:latest
        - corp/web_app:3.14

复制代码

image

指定为镜像名称或镜像 ID。若是镜像在本地不存在,Compose 将会尝试拉取这个镜像。ubuntu

image: ubuntu
复制代码

command

覆盖容器启动后默认执行的命令缓存

command: echo "hello world"
复制代码

container_name

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。bash

container_name: docker-web-container
复制代码

devices

指定设备映射关系

devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"
复制代码

depends_on

解决容器的依赖、启动前后的问题。如下例子中会先启动 redis db 再启动 web

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis

  redis:
    image: redis

  db:
    image: postgres
复制代码

dns

自定义 DNS 服务器。能够是一个值,也能够是一个列表。

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 114.114.114.114
复制代码

env_file

从文件中获取环境变量,能够为单独的文件路径或列表。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env
复制代码

environment

设置环境变量。若是变量名称或者值中用到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号里

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET
复制代码

expose

暴露端口,但不映射到宿主机,只被链接的服务访问,仅能够指定内部端口为参数

expose:
 - "3000"
 - "8000"
复制代码

ports

暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)均可以。

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"
复制代码

labels

为容器添加 Docker 元数据(metadata)信息。例如能够为容器添加辅助说明信息。

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"
复制代码

networks

配置容器链接的网络

networks:
  some-network:
  other-network:
复制代码

secrets

存储敏感数据,例如 mysql 服务密码。

mysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
  secrets:
    - db_root_password
    - my_other_secret
复制代码

volumes

数据卷所挂载路径设置。能够设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。

该指令中路径支持相对路径。

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro
复制代码

读取变量

Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。经过${变量名}读取

# ${MONGO_VERSION}会读取env文件中的值
version: "3"
services:
db:
  image: "mongo:${MONGO_VERSION}"
复制代码

compose 命令

对于 Compose 来讲,大部分命令的对象既能够是项目自己,也能够指定为项目中的服务或者容器。若是没有特别的说明,命令对象将是项目,这意味着项目中全部的服务都会受到命令影响。

build

构建(从新构建)项目中的服务镜像

up

运行 compose 项目

# 在后台启动并运行全部的容器
$ docker-compose up -d
复制代码

down

中止 up 命令所启动的容器,并移除网络

config

验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误缘由。

exec

进入指定的容器

$ docker-compose exec <容器名(docker-compose.yml定义的名)> bash
复制代码

images

列出 Compose 文件中包含的镜像

kill

强制中止服务容器

$ docker-compose kill [容器名(docker-compose.yml定义的名)]
复制代码

logs

$ docker-compose log [容器名(docker-compose.yml定义的名)]
复制代码

pause

暂停服务容器

$ docker-compose pause [容器名(docker-compose.yml定义的名)]
复制代码

ps

列出项目中目前的容器

$ docker-compose ps [容器名(docker-compose.yml定义的名)]
# 只打印容器ID
$ docker-compose ps -q [容器名(docker-compose.yml定义的名)]
复制代码

pull

拉取服务依赖的镜像

$ docker-compose pull [容器名(docker-compose.yml定义的名)]
复制代码

restart

重启项目中的服务

$ docker-compose restart [容器名(docker-compose.yml定义的名)]
复制代码

rm

删除全部(中止状态的)服务容器。

须要执行 docker-compose stop 命令来中止容器。

$ docker-compose rm [容器名(docker-compose.yml定义的名)]
复制代码

start

$ docker-compose start [容器名(docker-compose.yml定义的名)]
复制代码

stop

$ docker-compose stop [容器名(docker-compose.yml定义的名)]
复制代码
相关文章
相关标签/搜索