七、Docker Compose

1.概述

官网地址:https://docs.docker.com/compose/

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

使用Compose三步:

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

一个 docker-compose.yml 看起来如下:

# yaml 配置实例
version: '3'
services:
  web:
    build: .
    ports:
   - "5000:5000"
    volumes:
   - .:/code
    - logvolume01:/var/log
    links:
   - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
  • Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)

  • Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

2.安装

https://docs.docker.com/compose/install/

3.docker-compose.yml 常用命令

  • version:描述 Compose 文件的版本信息
  • services:多个容器集合
  • build:基于指定路径的 Dockerfile 文件构建;也可以是一个对象,用于指定 Dockerfile 的参数
version: '3'
services:
  web:	# 指定服务名称
    build: ./dir
-------------------
version: '3'
services:
  web:	# 指定服务名称
    build:
    	content: ./dir #Dockerfile 文件的绝对/相对路径,也可以是远程 Git 仓库的 URL
    	dockerfile: Dockerfile #声明自定义的 Dockerfile 文件名

  • image:指定运行的镜像名称
  • container_name:指定容器名称,默认名称格式:工程名称_服务名称_序号,工程名称则为当前 yml的目录名
  • ports:容器对外暴露的端口(HOST:CONTAINER)
  • expose:容器暴露的端口不映射到宿主机,只允许能被连接的服务访问
  • volumes:将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)
  • environment:配置环境变量
  • links:连接其他容器的服务(SERVICE:ALIAS)
# 运行的是mysql5.7的镜像
version: '3'
services:
  db: # 指定服务名称
	image: mysql:5.7 # 指定容器名称
    container_name: mysql
    # 指定服务运行的端口
    ports:
    	- 3306:3306
    # 将外部文件挂载到myql容器中
    volumes:
      - /mydata/mysql/log:/var/log/mysql
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql
    # 设置mysqlroot帐号密码的环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=root
    # 可以以database为域名访问服务名称为db的容器 官网推荐使用自定义网络替换 links
    links:
      - db:database
    
  • depends_on 以依赖性顺序启动服务,解决容器依赖、启动先后问题的配置项
#db和redis在之前启动web
version: "3"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
  • networks 网络设置
  • aliases 同一网络上的其他容器可以使用服务名或此别名连接到服务容器。同一服务在不同的网络上可以具有不同的别名。
# 定义服务,可以多个
services:
  nginx: # 服务名
    networks: # 配置容器连接的网络,引用顶级 networks 下的条目
      frontend: # 一个具体网络的条目名称
        aliases: #服务别名,可以多个
          - nginx1 #同一网络上的其他容器可以使用服务名或此别名连接到服务容器

# 定义网络,可以多个。如果不声明,默认会创建一个网络名称为"工程名称_default"的 bridge 网络
# 使用docker network ls可以查看网络列表
networks:
  frontend: # 一个具体网络的条目名称
    name: custom_frontend # 网络名称,默认为"工程名称_网络条目名称"
    driver: custom-driver-1 

4.docker-compose 常用命令

# 构建、启动、创建相关容器 -d表示在后台运行
docker-compose up -d
#指定文件启动
docker-compose -f docker-compose.yml up -d
#停止所有相关容器
docker-compose stop
#列出所有容器信息
docker-compose ps
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值