大纲
- 简介
- 编排与部署
- 安装与使用
- docker-compose 工作流程
- docker-compose.yml 模板文件配置说明
- docker-compose 命令说明
简介
docker Compose(https://docs.docker.com/compose/)
它是一个用于定义和运行多容器Docker 应用程序的命令行工具。
使用 Docker Compose,你可以在 YAML 文件中定义要运行的服务,然后通过 docker-compose 命令来启动服务。
docker-compose 中的核心概念就是 service, 每一个容器定义为一个service
docker-compose作用
- 1构建Docker镜像
- 2启动容器化的应用及服务 (多服务的快速编排)
- 3启动完整的服务系统
- 4管理系统中的单个服务的状态
- 5服务伸缩
- 6查看生成服务的容器的收集日志
编排与部署
编排 (orchestration)【窝颗死催新】
基于被部署对象**(多个)**之间的耦合关系(及某一个对象必须依赖其他对象部署完成后才能部署) 以及对象
之间的环境依赖(需要在同一个网络环境中),定制部署流程中的各个动作的执行顺序
部署 (deployment)
将对象在对应的机器上初始化,配置启动
编排侧重的是多个有依赖关系的服务的集合部署
安装与使用
docker-compose 就是一个脚本文件,只需要下载对应的脚本并对其赋予可执行权限即可
下载地址: https://github.com/docker/compose/releases
安装
1 下载docker-compose (可能网络原因无法下载)
curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
2 配置提示 (可能网络原因无法下载)
mkdir -pv ~/.local/share/bash-completion/completions/
curl -L https://raw.githubusercontent.com/docker/compose/1.18.0/contrib/completion/bash/docker-compose -o ~/.local/share/bash-completion/completions/
注意: 可能下载超时可以使用百度云盘上的docker-compose (版本1.18.0)放置在 /usr/local/bin下即可
3 给docker-compose执行权限
chmod +x /usr/local/bin/docker-compose 给docker-compose执行权限
4 验证安装结果
docker-compose --version 测试安装是否成功,成功的话打印出docker-compose的版本信息
快速使用
docker-compose -f compose.yml up -d 后台运行
docker-compose -f compose.yml up -d
docker-compose up 本质是docker-compose logs -f,它会收集所有容器的日志输出直到退出命令,或者容器都停止运行。
docker-compose up -d 以后台的方式运行容器。不会在终端上打印运行日志
docker-compose 工作流程
https://docs.docker.com/compose/networking/
当运行docker-compose up命令时,会做一下事情:
- 1 创建一个名为xxx_default 的network
- 2 根据配置创建container 加入xxx_default network 并且hostname为配置的container 名称
默认情况下docker-compose会建立一个默认的网络,名称为docker-compose.yml所在目录名称小写形式加上“_default”
每个service的container会加入这个default网络并且能够被这个网络上的其他container访问到,hostname就是container的name,通过这个hostname可以发现container
例如
services:
web:
image: xxx
port:
- 80:80
db:
image: mysql
prots:
3306:3306
web container内的进程可以使用mysql://db:5432访问db服务。 宿主机上的程序可以使用mysql://{DOCKER_IP}:8001 访问db服务。
docker-compose.yml 模板文件配置说明
link
常用的关键参数,可以让编排的服务之间的网络联通,注意程序中需要使用link name访问
user-service:
...
goods-service:
...
order-service:
links:
- user-service 【服务名称】
- goods-service:gdService 【服务名称】:【服务名称别名】
程序内不同服务间请求访问
UserEntity user = r.getForObject("http://user-service:5588/getUserEntityById?id=1", UserEntity.class);
GoodsEntity goods = r.getForObject("http://goods-service:5599/getGoodsEntityById?id=34", GoodsEntity.class);
UserEntity user = r.getForObject("http://usService:5588/getUserEntityById?id=1", UserEntity.class);
GoodsEntity goods = r.getForObject("http://gdService:5599/getGoodsEntityById?id=34", GoodsEntity.class);
volume | volume_from
volume 常用的关键参数 , 实现容器内部文件夹与主机文件夹的挂载
volumes_from允许您从另一个服务或容器挂载所有数据或卷,则必须指定访问级别
port 暴露端口
用于配置服务暴露的端口
ports:
#容器内的端口 与 主机端口映射
- 9000:9000
# 暴露多个端口 如下容器12201到12210的端口与主机12201到12210映射
- 12201-12210:12201-12210
# 如果加一个/ 表示支持协议 tcp 或 udp
- 12201:12201/udp
depends_on
配置服务依赖关系,启动时先启动依赖的服务,注意配置在需要有依赖的服务上
graylog:
depends_on:
- mongodb
- elasticsearch
network
可以指定编排服务中的网络,用于网络隔离
使用方式network
- 1 配置在外层
- 2 服务内
# 与services: 同级外层
networks:
#网络的名字,可以自定义定 如果是default 着替换默认的网络
#还可以配置ip
# external: 使用external来使用指定已经存在的网络
# name: bridge2
mynetwork1:
driver: bridge
mynetwork2:
driver: bridge
services:
user-service:
#服务内配置网络 使用外层定义好的网络
networks:
- mynetwork1
- mynetwork2
#配置网络后 容器内使用ip访问可以
#但是如果想使用服务名http://gdService:5577 访问还需要配置link
links:
- goods-service:gdService
goods-service:
#服务内配置网络 使用外层定义好的网络
networks:
- mynetwork1
order-service:
#服务内配置网络 使用外层定义好的网络
networks:
- mynetwork2
links:
- user-service:usService
- goods-service:gdService
使用docker network ls 查看出创建的网络
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tta5ZTD1-1674899460672)(4.5.png)]
基于上面的配置
- user-service 与 order-service 在一个网络中可以互通
- user-service 与 goods-service 在一个网络中可以互通
- goods-service 与 order-service 不在一个网络中 无法通信
dns
可以自定义DNS服务器
dns: 8.8.8.8
dns:
- 9.9.9.9
- 8.8.8.8
extends
docker-compose 命令说明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PMYHhGIE-1674899460673)(5.1.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9yfVzNI-1674899460673)(5.2.png)]
up
up是最重要的一个语句,可以创建镜像,创建服务,启动服务 (初始的时候必用)
docker-compose -f use-dockerfile.yml up 前台启动
docker-compose -f use-dockerfile.yml up -d 后台启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcELc1Ae-1674899460673)(4.0.png)]
ps
查看项目中的容器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3rHYpbO-1674899460674)(4.2.png)]
stop start restart
停止 起动 重启 服务项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Qf21OnV-1674899460674)(4.4.png)]
down 停止服务栈
注意down后就无法使用 start restart命令了
docker-compose -f use-dockerfile.yml down
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZI2oDGh-1674899460675)(4.1.png)]
logs 打印容器组日志
docker-compose -f use-dockerfile.yml logs -f 打印容器组的日志