Docker Compose使用方法

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 Docker Compose 可以高效管理具有多个服务(容器)的应用。

文章参考:菜鸟教程

一、基本介绍

一般每个Docker容器只运行一个进程,如果应用包含多个服务,每个服务又至少需要运行一个容器,这样如果每次启停应用都需要启停多个容器,这样就导致维护效率低而且容易出错,这时可以使用 Docker-compose 工具,Docker-compose 通过 YML 文件配置应用程序需要的所有服务,然后使用一个命令就可以创建并启动所有服务,使用过程主要包括两个步骤:

  1. 使用 docker-compose.yml 编写定义多服务(多容器)应用的 YAML 文件

  2. 执行docker-compose up命令来启动并运行整个应用程序

Docker-compose工具需要单独安装,可以使用下载安装包安装或者利用pip安装,具体安装方法可以参考:
Docker compose安装文档

二、使用方法

Docker-compose中有两个个核心概念:

  • 项目 (Project):由一个或一组关联的服务组成,Docker-compose面向项目进行管理
  • 服务 (Service):由一个或一组关联的Docker应用容器组成

(一) docker-compose 命令

命令格式为:docker-compose [OPTIONS] [COMMAND] [ARGS...]

OPTIONS 包括:

  • -h,–help:查看帮助信息
  • -f,–file FILE:指定yaml模板文件,默认为 docker-compose.yml
  • -p,–project-name NAME:指定项目名称,默认将所在目录名称作为项目名
  • –verbose:输出详细信息
  • -v,–version:打印版本信息

COMMAND 可大致分为服务依赖镜像管理和服务容器管理两类:

1.服务依赖镜像管理

拉取服务依赖的镜像:

docker-compose pull [options] [SERVICE...]
# OPTIONS:
# –ignore-pull-failures:忽略拉取镜像过程中的错误
# –parallel:多个镜像同时拉取
# –quiet:拉取镜像过程中不打印进度信息

构建项目中的服务镜像:

docker-compose build [OPTIONS] [SERVICE...]
# OPTIONS:
# --force-rm:总是删除镜像构建过程中产生的中间容器
# --no-rm:不删除构建过程中产生的中间容器
# --parallel:并行构镜像
# --pull:尝试拉取最新版本的镜像

推送服务依赖的镜像:

docker-compose push [options] [SERVICE...]
# OPTIONS:
# –ignore-push-failures:忽略推送镜像过程中的错误

验证并查看docker-compose.yml文件配置:

docker-compose config [options]
# OPTIONS:
# -q,--quiet:只验证配置,配置正确时不输出任何内容,配置错误时输出错误信息
# --services:打印服务名,一行一个
# --volumes:打印卷名,一行一个
2.服务容器管理

构建、创建、并启动运行服务容器:

docker-compose up [OPTIONS] [SERVICE...]
# OPTIONS:
# -d,--detach:后台运行
# --no-start:在创建服务镜像后并不运行
# --scale SERVICE=NUM:指定运行的服务数量,覆盖docker-compose.yml中设置的scale

停止服务,删除容器、网络、卷、镜像:

docker-compose down

列出服务容器:

docker-compose ps [options] [SERVICE...]
# OPTIONS:
# -q,--quiet:仅显示容器ID号
# -a,--all:显示所有容器,包括停止运行的容器
# --services:仅显示服务名称

为服务创建容器:

docker-compose create [options] [SERVICE...]
# OPTIONS:
# --force-recrete:重新创建容器,即使配置和镜像没有改变
# --no-recreate:如果容器已经存在,则不需要重新创建容器
# --no-build:不创建镜像,即使缺失
# --build:创建容器前生成镜像

启动/终止/暂停/恢复/重启 服务容器:

docker-compose start [SERVICE...]
docker-compose stop [SERVICE...]
docker-compose pause [SERVICE...]
docker-compose unpause [SERVICE...]
docker-compose restart [SERVICE...]

删除项目中的服务容器:

docker-compose rm [options] [SERVICE...]
# OPTIONS:
# -f,--force:强制直接删除,包括非停止状态的容器
# -s,--stop:在删除容器前停止其运行
# -v:删除容器所挂载的数据卷

强制终止服务容器:

docker-compose kill [options] [SERVICE...]
# OPTIONS:
# –s SIGNAL:终止容器时发给容器的信号,默认为SIGKILL

创建并启动指定的容器,然后执行一个命令:

docker-compose run [options] SERVICE [COMMAND] [ARGS...]
# OPTIONS:
# -d,--detach:后台运行
# --name NAME:为服务容器指定名字
# --entrypoint CMD:覆盖容器启动时的运行命令

在运行的容器中执行一个命令:

docker-compose exec [options] SERVICE COMMAND [ARGS...]
# OPTIONS:
# -d,--detach:后台运行 
# -u,--user USER:以USER身份执行命令
# -T:禁止分配TTY,默认分配
# --privileged:给执行命令的进程赋予特权
# --index=INDEX:当服务拥有多个容器时,通过INDEX指定执行命令的容器

显示正在运行的进程:

dokcer-compose top [SERVICE...]

设置指定服务运行容器的个数,通过service=num的参数来设置数量:

docker-compose scale SERVICE=NUM [SERVICE1=NUM1] ...

注意:大部分命令需要在 docker-compose.yml 目录下执行,不然需要用 -f 参数指定。

(二) docker-compose.yml

YAML是一种通用的数据串行化格式,主要注意以下几点:

  • 大小写敏感,使用缩进表示层级关系
  • 缩进不允许使用Tab,只允许空格,空格数不重要,只要相同层级的元素左对齐即可
  • 数据类型包括:
    对象:键值对的集合,格式为:key: value,冒号后面要加一个空格
    数组:一组按次序排列的值,-开头的行表示构成一个数组,也可以单行表示 key: [value1, value2, ...]
    纯量:最基本的、不可再分的值,包括字符串、布尔值、整数、Null、浮点数、时间、日期等

docker-compose.yml是Compose用于自动化管理服务镜像和容器的配置文件,主要包括三个部分:

  • version:版本信息
  • services:服务信息
  • networks:网络配置信息

下面以模板形式介绍docker-compose.yml的常用配置方法:

version: "1.0"           # 声明版本

services:

  <service_name1>:       # 服务名称
    image: <image_name1> # 镜像名称/ID,如果本地不存在Compose会拉取镜像  
    ports:               # 端口映射
      - <host_num>:<container_num>
    build: <path>        # 指定Dockerfile所在路径,Compose利用其构建镜像
    depends_on:          # 指定服务容器依赖,避免因为顺序导致启动失败的问题
      - <service_name2>  # Compose会先启动依赖的服务容器
      - <service_name3>
    volumes:
      - <container_path>             # 仅指定一个容器内路径,Compose会自动创建
      - <container_path>:<host_path> # 数据卷映射(挂载),以便于服务和数据持久化
    command: <command>               # 覆盖容器启动时执行的命令
    dns:                             # 指定DNS服务器
      - <dns_server1>
      - <dns_server2>
    environment:
      <var_name1>: <value1>          # 以对象(键值对)的形式表示,也可以以序列(-)形式表示
      <var_name2>: <value2>
    networks:                        # 加入指定的网络
      - <network_name1>
      - <network_name2>
    deploy:                          # 指定与部署和运行服务相关的配置   
    mode: replicated                 # 默认为replicated,此时需要指定容器数量;如果为global,则为只有一个容器,不用再指定数量
    replicas: <num>                  # 指定容器数据量
    restart_policy:                  # 配置容器重启条件
      condition: on-failure
      delay: <sec>
      max_attempts: <num>
    update_config:                   # 配置容器更新服务
      parallelism: <num>
      delay: <sec>
    
  <service_name2>:             
    image: <image_name2> 
    build: 
      context: <context_path>        # 指定上下文路径
      dockerfile: <relative_path>    # 在上下文路径基础上指定相对路径
      args:
        <arg_name>: <value>          # 指定构建过程中环境变量,构建成功变量释放
    links:
      - <service_name1>              # 指定相关联的服务
  
  ...  

networks:                            # 定义网络配置
  <network_name1>:
    driver: bridge
    config:
      - ipv4_address: <address>

  <network_name2>: 
    ...   

下面是Docker官网部署Wordpress的例子,配置文件名为 “stack.yml”:

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

运行命令sudo docker-compose -f stack.yml up,启动所有服务容器,然后访问:http://localhost:8080

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值