栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker Compose

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker Compose

1. 简介

Docker-Compose 项目是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层:

工程(project)服务(service)容器(container)

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。

2. 安装
$ curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

$ docker-compose --version
Docker Compose version v2.2.3
3. YAML 模板

默认模板文件为 docker-compose.yml

version:指定版本,不同版本的语法略有差异

build:镜像构建参数

version: "3.7"
services:
  webapp:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        buildno: 1
      labels:
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
      target: prod

context:路径dockerfile:Dockerfile 文件名args:构建参数,即构建过程中的环境变量labels:设置构建镜像的标签target:多层构建,可以指定构建哪一层

cap_add,cap_drop:添加或删除容器拥有的宿主机的内核功能

cap_add:
  - ALL # 开启全部权限

cap_drop:
  - SYS_PTRACE # 关闭 ptrace权限

cgroup_parent:为容器指定父 cgroup 组,意味着将继承该组的资源限制

cgroup_parent: m-executor-abcd

command:覆盖容器启动的默认命令

command: ["bundle", "exec", "thin", "-p", "3000"]

container_name:指定自定义容器名称,而不是自动生成的名称

container_name: mysql-server

depends_on:启动依赖关系

docker-compose up :以依赖性顺序启动服务。docker-compose up SERVICE :自动包含 SERVICE 的依赖项。docker-compose up web 还将创建并启动 db 和 redisdocker-compose stop :按依赖关系顺序停止服务。先启动的后停止

注意:web 服务不会等待 redis db 完全启动 之后才启动。

version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

devices:指定设备映射列表

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

dns: 自定义 DNS 服务器

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 9.9.9.9

dns_search: 自定义 DNS 搜索域。可以是单个值或列表

dns_search: google.com

dns_search:
  - google.com
  - baidu.com

entrypoint: 覆盖容器默认的 entrypoint

entrypoint: /bin/entrypoint.sh

entrypoint:
  - redis-server
  - /etc/redis/redis.conf

env_file: 从文件添加环境变量

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

environment: 添加环境变量

environment:
  RACK_ENV: development
  SHOW: 'true'

expose:暴露端口,但不映射到宿主机,只被连接的服务访问。

expose:
 - "3000"
 - "8000"

extra_hosts: 添加主机名映射。类似 docker client --add-host。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:

162.242.195.82  somehost
50.31.209.229   otherhost

healthcheck: 用于检测 docker 服务是否健康运行。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"] 
  interval: 1m30s 
  timeout: 10s 
  retries: 3 
  start_period: 40s # 启动后,多少秒开始启动检测程序

image: 指定容器运行的镜像

image: ubuntu:14.04

logging:服务的日志记录配置。

driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

json-filesyslognone

仅在 驱动程序下,可以使用以下参数,限制日志得数量和大小。当达到文件限制上限,会自动删除旧得文件。

# json-file
logging:
  driver: json-file
  options:
    max-size: "200k"
    max-file: "10"
    
# syslog
logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

network_mode:网络模式

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

networks:配置容器连接的网络,引用顶级 networks 下的条目

aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
      other-network:
        aliases:
         - alias2
networks:
  some-network:
    # Use a custom driver
    driver: custom-driver-1
  other-network:
    # Use a custom driver which takes special options
    driver: custom-driver-2

restart:重启策略

no:默认不重启always:容器总是重新启动on-failure:在容器非正常退出时(退出状态非0),才会重启容器。unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

secrets: 存储敏感数据:

version: "3.1"
services:

mysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
  secrets:
    - my_secret

secrets:
  my_secret:
    file: ./my_secret.txt

security_opt: 修改容器默认的 schema 标签

security-opt:
  - label:user:USER   # 设置容器的用户标签
  - label:role:ROLE   # 设置容器的角色标签
  - label:type:TYPE   # 设置容器的安全策略标签
  - label:level:LEVEL  # 设置容器的安全等级标签

stop_grace_period: 指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。默认的等待时间是 10 秒。

stop_grace_period: 1s # 等待 1 秒
stop_grace_period: 1m30s # 等待 1 分 30 秒 

stop_signal: 设置停止容器的替代信号。默认情况下使用 SIGTERM 。

以下示例,使用 SIGUSR1 替代信号 SIGTERM 来停止容器。

stop_signal: SIGUSR1

sysctls: 设置容器中的内核参数,可以使用数组或字典格式。

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

tmpfs: 在容器内安装一个临时文件系统。可以是单个值或列表的多个值

tmpfs: /run

tmpfs:
  - /run
  - /tmp

ulimits: 覆盖容器默认的 ulimit

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

volumes: 将主机的数据卷或着文件挂载到容器里

version: "3.7"
services:
  db:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

其他:

user: nginx   						# 容器运行用户
working_dir: /opt/mysql             # 工作空间

domainname: your_website.com
hostname: test
mac_address: 08-00-27-00-0C-0A

privileged: true

read_only: true
stdin_open: true                    # 打开标准输入,可以接受外部输入
tty: true                           # 模拟一个伪终端
4. 示例 4.1 redis-mysql
$ mkdir -p ~/redis-mysql && cd $_
$ mkdir -p conf
$ mkdir -p data/redis
$ mkdir -p data/mysql

$ cat > conf/redis.conf < conf/mysql.cnf < docker-compose.yml < 
5. 管理命令 
docker-compose up -d  # 后台方式
docker-compose up --no-recreate -d
docker-compose up -d redis  # 只启动容器 redis

docker-compose stop 
docker-compose start

docker-compose down # 停止并销毁容器
6. 开机自启
# 方法一:跟随系统
crontab -e
@reboot sleep 60 && /usr/local/bin/docker-compose -f /root/redis-mysql/docker-compose.yml up -d

# 方法二:重启策略
restart: always
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/728141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号