docker-compose基本使用

一、docker-compose介绍


(一)、简述

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

(二)、步骤

使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。

(三)、文件组成

  1. version
# 文件版本号,指定文件写法格式如:
version: "3"
  1. services
# 项目,多个容器服务的集合
# 每个service定义了镜像、网络配置、文件挂载、参数等如:
image: mysql
  1. networks
# 用于指定自定义网络,如:
networks:
  app:
    external: true
  1. volumes
# 数据卷
volumes:
  data-volume: 

二、docker-compose环境安装


(一)、安装

curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

(二)、授权

chmod +x /usr/local/bin/docker-compose

三、docker-compose基本命令使用


(一)、基本命令

build              Build or rebuild services
config             Validate and view the Compose file
create             Create services
down               Stop and remove containers, networks, images, and volumes
exec               Execute a command in a running container
images             List images
kill               Kill containers
logs               View output from containers
port               Print the public port for a port binding
ps                 List containers
pull               Pull service images
push               Push service images
restart            Restart services
rm                 Remove stopped containers
start              Start services
stop               Stop services
top                Display the running processes
up                 Create and start containers

(二)、常用命令使用

  1. 基本使用
# 显示实时容器日志
docker-compose logs -f --tail 20
# 进入容器
docker-compose exec 容器服务名 sh
# 重启容器
docker-compose restart
# v3版本中, non-Swarm模式启动容器(比如:容器资源限制)
docker-compose --compatibility up -d
# 构建并启动容器
docker-compose up -d
  1. 管理使用
# 验证docker-compose.yml文件
docker-compose config
# 构建镜像
docker-compose build
# 删除服务(containers, networks, images, and volumes)
docker-compose down --rmi all
# 显示所有容器
docker-compose ps
# 停止容器
docker-compose stop
# 启动容器
docker-compose start
# 拉取镜像
docker-compose pull
# 推送镜像
docker-compose push

四、docker-compose.yml文件管理


(一)、示例

version: "3"
services:
  eureka:
    image: 镜像名:tag
    build: .
    env_file:
      - .env
    deploy:
      resources:
        limits:
          cpus: '1.50'
          memory: 3072M
    volumes:
      - /data/Log:/data/log
      - /etc/localtime:/etc/localtime
    environment:
      SKYWALKING_AGENT_SERVICE_NAME: eureka
    network_mode: "host"
    ports:
      - 1111:1111

(二)、services的书写规则

  1. image
# 镜像
services: 
eureka: # 自定义服务名
image: 镜像名:tag # 镜像
# 格式如下
image: redis
image: mysql:5.7.26
image: 192.168.168.22/base/eureka:v1
  1. build
  # 基于Dockerfile,指定Dockerfile所在路径
  # 绝对路径
  build: /path/build
  # 相对路径
  build: .
  # 设置上下文和目录
  build:
    context: ../
    dockerfile: path/Dockerfile
  # 指定环境变量
  build: 
    context: .
    args:
      - key1=value1
      - key2=value2
  1. env_file
  # 指定配置文件
  env_file: .env
  # 注意: 若与environment指令冲突,以后者为准
  # 设置多个
  env_file:
    - .env
    - test.env
  1. volumes
  # 挂载一个目录或者已经存在的数据卷容器
  volumes:
    - /data/Log:/data/log # 使用绝对路径挂载数据卷
    - /var/lib/mysql # 只是指定一个路径,Docker 会自动在创建一个数据卷
    - ./log:/data/log # 使用相对路径挂载数据卷
    - datavolume:/var/lib/mysql #已经存在的命名的数据卷
  1. environment
   # 设置镜像变量
   environment:
     key1: value1
     key2: value2
   或者
   environment:
     - key1=value1
     - key2=value2
  1. network_mode
   # 网络模式
   network_mode: "host"
   network_mode: "bridge"
  1. ports
  # 映射端口
  ports:
    - 1111:1111
    - 8889:8888
  #映射端口:容器端口
  1. depends_on
 # 容器依赖
 depends_on:
   - eureka
   - db
  1. deploy
 # 指定与部署和运行服务相关的配置
 # 子项 resources
 deploy:
   resources:
     limits: # 资源不能超过限制
       cpus: '1.50'
       memory: 3072M
     reservations: # 保留资源
       cpus: '0.25'
       memory: 100M
  1. 其他
 dns
 tmpfs
 container_name

(三)、网络networks

  1. 自定义网络
version: "3"
networks:
  frontend:
    # Use a custom driver
    driver: custom-driver-1
  backend:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"
  1. 配置默认网络
version: "3"
networks:
  default:
    # Use a custom driver
    driver: custom-driver-1
  1. 使用现有网络
version: "3"
networks:
  default:
    external:
      name: my-pre-existing-network

(四)、数据卷volumes

  1. 创建数据卷
docker volume create datavolume
  1. 使用已有数据卷
version: "3"
services:
  web:
    volumes:
      - datavolume:/data/test
volumes:
  datavolume: 

(五)、环境变量文件

  1. 简述
Compose支持在名为执行命令 .env的文件夹(当前工作目录)中放置的名为环境文件中声明默认环境变量。
compose期望env文件中的每一行都采用VAR=VAL格式。
以开头#的行将作为注释处理并被忽略。
  1. 示例
$ cat .env
TAG=v1.5

$ cat docker-compose.yml
version: '3'
services:
  web:
    image: "webapp:${TAG}"
# 定义相同的变量是,compose文件优先
$ cat ./Docker/api/api.env
NODE_ENV=test

$ cat docker-compose.yml
version: '3'
services:
  api:
    image: 'node:6-alpine'
    env_file:
     - ./Docker/api/api.env
    environment:
     - NODE_ENV=production

posted @ 2020-12-31 10:11  qms19  阅读(534)  评论(0编辑  收藏  举报