Docker-Compose 是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件 docker-compose.yml,配置好多个容器之间的调用关系,然后只需要一个命令就能同时启动/关闭这些容器。
① 一文件:docker-compose.yml
② 两要素:
项目 (project):由一组关联的容器组成的一个完整业务单元;
服务 (service):一个项目中的某一个容器实例 。
① 编写 Dockerfile 定义各个应用容器,构建出对应的镜像文件;
② 使用 docker-compose.yml,定义一个完整的业务单元,安排好整体应用中的各个容器服务;
③ 执行 docker-compose up 命令,创建并运行整个应用程序,完成一键部署上线。
compose模版:https://docker_practice.gitee.io/compose/compose_file.html
mkdir /root/ems/ (以ems目录作为项目名)
① version:
每个模版文件需要写上version版本号,代表所使用的docker-compose的项目版本。
● 版本号的选择与docker引擎有关:
官方提供的compose版本号与docker引擎的对应关系:
② services:
在模版文件里定义需要启动的容器:
● 启动 tomcat:
若要启动另一个tomcat,则要再写一组服务:
● 启动 redis:
● 启动 mysql:
docker compose up
这个命令必须在docker-compose.yml配置文件目录下执行
● 查看服务:
tomcat:
redis:
mysql:
● 停止服务:
附:完整docker-compose.yml
#代表使用的docker-compose项目版本号
version: "3.8"
services:
tomcat1: #tomcat服务名(名称唯一)
image: tomcat:8.0 #所使用的镜像
ports: #宿主机8080端口映射容器8080端口
- 8080:8080
tomcat2:
image: tomcat:8.0
ports:
- 8081:8080
redis1:
image: redis:6.0.8
ports:
- 6379:6379
mysql:
image: mysql:5.7
ports:
- 3306:3306
environment: #给当前容器启动指定环境 类似docker run -e MYSQL_ROOT_PASSWORD=123456
- "MYSQL_ROOT_PASSWORD=123456"
volumes: #给当前容器指定数据卷 类似docker run -v
- /root/mysqldata1:/var/lib/mysql
远程连接docker服务器,创建一个docker-compose.yml
编写docker-compose.yml,可根据提示信息自动补齐,编写完成后点击红框所示图标,即可完成上传
宿主机上启动docker-compose服务:
(1) up:
docker compose up [options] [SERVICE...]
该命令会尝试自动完成包括构建镜像,创建服务,启动服务,并关联服务相关容器的一系列操作。
docker compose up:启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
docker compose up -d:在后台启动并运行所有的容器。
(2) down:
docker compose down:关闭up命令所启动的服务容器,并移除网络。
(3) exec:
docker compose exec 服务id:进入某个服务容器。
(4) restart:
docker compose restart [options] [SERVICE...]:重启项目中的服务
-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
(5) rm:
docker compose rm [options] [SERVICE...]
删除所有停止状态的服务容器,先执行 docker compose stop 命令停止容器。
-f 强制直接删除,包括非停止状态的容器。
-v 删除容器所挂载的数据卷。
(6) top:
docker compose top
查看项目中所有服务容器运行进程,或某个指定id服务容器的进程。
(7) logs:
docker compose logs [options] [SERVICE...]
查看整个项目或某个id服务容器的日志。
https://vuepress.mirror.docker-practice.com/compose/compose_file/#
Portainer是一款轻量级的应用,提供图形化界面,用于管理Docker环境。
官网:Portainer: Container Management Software for Kubernetes and Docker
(1) docker 命令安装:
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.13.0-alpine
(2) 登录:
① 访问地址:服务器ip:9000;
② 设置 admin 密码;
类似 docker system df:
CAdvisor (监控收集) + InfluxDB (存储数据) + Granfana (展示图表),合称CIG
(1) CAdvisor:
CAdvisor是一个容器资源监控工具,包括容器的内存、CPU、网络IO、磁盘IO等监控,提供了一个Web页面用于查看容器的实时运行状态。
CAdvisor默认存储2分钟的数据,而且只针对单物理机。不过CAdvisor提供了很多数据集成接口,支持 InfluxDB、Redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
(2) InfluxDB:
为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储 CAdvisor 的数据。
(3) Granfana:
Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置和丰富的插件及模板功能,支持图表权限控制和报警。
(1) 新建docker-compose.yml:
① 新建目录:mkdir /mydocker/cig -p
② 编写docker-compose.yml:
services:
influxdb:
image: tutum/influxdb:0.9
restart: always
environment:
- PRE_CREATE_DB=cadvisor
ports:
- "8083:8083"
- "8086:8086"
volumes:
- ./data/influxdb:/data
cadvisor:
image: google/cadvisor:v0.32.0
links:
- influxdb:influxsrv
command:
- -storage_driver=influxdb
- -storage_driver_db=cadvisor
- -storage_driver_host=influxsrv:8086
restart: always
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
image: grafana/grafana:8.5.2
user: '104'
restart: always
links:
- influxdb:influxsrv
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
docker compose config -q:检查.yml文件语法
(2) 启动docker-compose文件,并检查服务是否启动:
(1) 浏览CAdvisor收集服务:
(2) 浏览 influxdb 存储服务:
(3) 浏览 grafana 展现服务:
初始用户名:admin ;密码:admin
● grafana 配置:
① 配置数据源:
② 配置面板panel: