compose篇
前言
Dockerfile可以让用户管理一个单独的应用容器,而compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目)
例如一个web服务再加上后端的数据库服务容器等。
docker-compose是docker官方的开源项目
负责实现对docker容器集群的快速编排
docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独分隔开,
但是这样我们又面临了一个问题
如果我需要同事部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署工具
例如要实现要给web微服务项目,除了Web服务容器本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心qureka,甚至还包括负载均衡容器等等。。
compose 使用的三个步骤
- 编写Dockerfile定义各个微服务应用并构建出对应的镜像
- 使用docker-compose 定义一个完整的业务单元,安排好整体应用中的各个容器
- 最后, 执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线
一、Docker-compose简介
1、docker-compose基础概念
docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。
docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)
docker-compose运行目录下的所有文件(docker-compose.yml文件、extends文件或环境变量等)组成一个工程,如无特殊指定,工程名即为当前目录名。
一个工程当中,可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
一个服务中可以包括多个容器实例,docker-compose并没有解决负载均衡的问题。因此需要借助其他工具实现服务发现及负载均衡,比如consul。
docker-compose的工程配置文件默认为docker-compose.yml。可以通过环境变量COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器。
2、为什么要使用docker-compose
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如要实现一个web项目,除了web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
compose允许用户通过一个单独docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
docker-compose项目由pypthon编写,调用docker服务提供的API来对容器进行管理,因此, 只要所操作的平台支持docker-API,就可以在其上利用conpose来进行编排管理。
简单来说:就是来管理多个容器的,定义启动顺序的,合理编排,方便管理。
二、YAML文件格式及编写注意事项
1、YAML文件格式
YAML是一种标记性语言,它可以很直观的展示数据序列化格式,可读性高。
类似于json数据描述语言,但是语法要比json简单很多。
YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号[ ] 括起来,bash用花括号{ } 括起来。
2、YAML格式的注意事项
不支持制表符tab键缩进,只能使用空格缩进
通常开头缩进2个空格
字符后缩进1个空格,如冒号【:】、逗号【,】、横杠【-】
用#号表示注释
如果包含特殊字符用单引号【’ '】引起来作为普通字符,如果用双引号【“ ”】表示特殊字符本身的意思,
布尔值必须用【“ ”】括起来
YAML区分大小写
3、YAML数据结构案例
version: '3'
services:
# mysql
mysql:
container_name: daoda-mysql //容器名字
image: mysql:5.7 //使用mysql:5.7镜像
ports:
- "60133:3306" //端口映射 不能低于60
environment:
- "MYSQL_ROOT_PASSWORD=root"
- "TZ=Asia/Shanghai"
command: // 执行命令,会覆盖容器启动后默认执行的命令(会覆盖dockefile中的CMD指令)
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--lower-case-table-names=1
--sql-mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
restart: always //重启策略,定义是否重启容器1、no,默认策略,在容器退出时不重启容器2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次4、always,在容器退出时总是重启容器,5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
privileged: true // 用来给容器root权限,注意是不安全的,true
networks: //加入网络,引用顶级networks下条目
bridge:
ipv4_address: 172.60.0.1
# 报告模块:lly
php:
container_name: php
build: // 编译指定内容
context: ../../Code_lly //设置编译文件夹
dockerfile: daoda-report-Dockerfile // 编译Dockerfile文件
restart: always
privileged: true
networks:
daoda-bridge:
ipv4_address: 172.60.0.2
networks:
daoda-bridge:
driver: bridge
ipam:
config:
- subnet: 172.60.0.0/16
volumes: 定义挂在宿主机目录
log:
driver_opts:
type: nfs
o: bind
device: "/home/data/log"
compose下载:
自动安装:
sudo yum update
sudo yum install docker-compose-plugin
docker compose version
手动安装:
第一步:
要下载并安装撰写 CLI 插件,请运行:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
第二步:
将可执行权限应用于二进制文件:
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
或者,如果您选择为所有用户安装 Compose:
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
第三步:
测试安装:
docker compose version
Docker Compose version v2.16.0
compose 常用命令
最好在yml同级目录下执行
docker-compose -h 查看帮助
docker-compose up 启动所有docker-compose服务
docker-compose up -d 启动所有docker-compose服务并后台运行
docker-compose down 停止并删除容器,网络,卷,镜像
docker-compose exec yml的服务id /bin/bash 进入容器实例内部
docker-compose ps 列出当前所有compose编排过运行的所有容器
docker-compose top 展示当前compose编排过的容器进程
docker-compose config 检查配置
docker-compose config -q 检查配置,有问题才有输出
docker-compose restart 重启
docker-compose start 启动
docker-compose stro 停止