Docker-compose容器编排与容器监控

一、Docker-compose

1、概念:

Docker-Compose 是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。

2、作用:

Docker-Compose可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件 docker-compose.yml,配置好多个容器之间的调用关系,然后只需要一个命令就能同时启动/关闭这些容器。

3、compose核心概念:

① 一文件:docker-compose.yml

② 两要素:

项目 (project):由一组关联的容器组成的一个完整业务单元;

服务 (service):一个项目中的某一个容器实例 。

4、compose 使用步骤:

① 编写 Dockerfile 定义各个应用容器,构建出对应的镜像文件;

② 使用 docker-compose.yml,定义一个完整的业务单元,安排好整体应用中的各个容器服务;

③ 执行 docker-compose up 命令,创建并运行整个应用程序,完成一键部署上线。

5、compose示例:

compose模版:https://docker_practice.gitee.io/compose/compose_file.html

(1) 创建一个项目:

mkdir /root/ems/ (以ems目录作为项目名)

(2) 在ems目录里创建一个docker-compose.yml文件:

① version:

每个模版文件需要写上version版本号,代表所使用的docker-compose的项目版本。

● 版本号的选择与docker引擎有关:

官方提供的compose版本号与docker引擎的对应关系:

② services:

在模版文件里定义需要启动的容器:

● 启动 tomcat:

若要启动另一个tomcat,则要再写一组服务:

● 启动 redis:

● 启动 mysql:

(3) 启动docker-compose服务:

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:8080tomcat2:image: tomcat:8.0ports:- 8081:8080redis1:image: redis:6.0.8ports:- 6379:6379mysql:image: mysql:5.7ports:- 3306:3306environment:  #给当前容器启动指定环境 类似docker run -e MYSQL_ROOT_PASSWORD=123456- "MYSQL_ROOT_PASSWORD=123456" volumes:   #给当前容器指定数据卷 类似docker run -v- /root/mysqldata1:/var/lib/mysql

(4) 在IDEA上创建docker-compose.yml:

远程连接docker服务器,创建一个docker-compose.yml

编写docker-compose.yml,可根据提示信息自动补齐,编写完成后点击红框所示图标,即可完成上传

宿主机上启动docker-compose服务:

6、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服务容器的日志。

7、docker-compose 模版文件常用指令:

https://vuepress.mirror.docker-practice.com/compose/compose_file/#

二、可视化工具Portainer

1、简介:

Portainer是一款轻量级的应用,提供图形化界面,用于管理Docker环境。

官网:Portainer: Container Management Software for Kubernetes and Docker

2、安装:

(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:

3、Portainer创建容器:

三、容器监控CIG

1、简介:

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是一个开源的数据监控分析可视化平台,支持多种数据源配置和丰富的插件及模板功能,支持图表权限控制和报警。

2、docker-compose 部署 CIG:

(1) 新建docker-compose.yml:

① 新建目录:mkdir /mydocker/cig -p

② 编写docker-compose.yml:

services:influxdb:image: tutum/influxdb:0.9restart: alwaysenvironment:- PRE_CREATE_DB=cadvisorports:- "8083:8083"        - "8086:8086"            volumes:- ./data/influxdb:/datacadvisor:image: google/cadvisor:v0.32.0links:- influxdb:influxsrvcommand:- -storage_driver=influxdb- -storage_driver_db=cadvisor- -storage_driver_host=influxsrv:8086restart: alwaysports:- "8080:8080"volumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:rografana:image: grafana/grafana:8.5.2user: '104'restart: alwayslinks:- influxdb:influxsrvports:- "3000:3000"volumes:- grafana_data:/var/lib/grafanaenvironment:- HTTP_USER=admin- HTTP_PASS=admin- INFLUXDB_HOST=influxsrv- INFLUXDB_PORT=8086

docker compose config -q:检查.yml文件语法

(2) 启动docker-compose文件,并检查服务是否启动:

3、测试:

(1) 浏览CAdvisor收集服务:

(2) 浏览 influxdb 存储服务:

(3) 浏览 grafana 展现服务:

初始用户名:admin ;密码:admin

● grafana 配置:

① 配置数据源:

② 配置面板panel:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256043.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostGIS学习教程十一:投影数据

PostGIS学习教程十一:投影数据 地球不是平的,也没有简单的方法把它放在一张平面纸地图上(或电脑屏幕上),所以人们想出了各种巧妙的解决方案(投影)。 每种投影方案都有优点和缺点,一…

LabVIEW使用单板RIO开发远程监控电源信号

LabVIEW使用单板RIO开发远程监控电源信号 设计和构建用于智能电网的本地功耗分析系统,主要服务于领先的电力监控设备设计者和制造商。随着智能电网投资的增加,对于能够有效处理替代电源(如太阳能和风能)间歇性功率水平的技术需求…

揭秘强化学习:Python 实践指南

一、说明 强化学习 (RL) 是机器学习和人工智能 (AI) 的一个子领域,专注于开发能够通过与环境交互进行学习的智能代理。与传统的监督和无监督学习不同,强化学习主要关注动态、顺序环境中的决策。它在人工智能中具有重要意义,特别是在自主代理必…

数字与数学基础问题

关卡名 数字与数学基础问题 我会了✔️ 内容 1.数字里统计的处理技巧 ✔️ 2.必须熟练掌握溢的处理方法 ✔️ 3.掌握进制的处理方法 ✔️ 1. 数字统计专题 统计一下特定场景下的符号,或者数字个数等是一类非常常见的问题 。如果按照正常方式强行统计&#xf…

MX6ULL学习笔记 (八) platform 设备驱动实验

前言: 什么是 Linux 下的 platform 设备驱动 Linux下的字符设备驱动一般都比较简单,只是对IO进行简单的读写操作。但是I2C、SPI、LCD、USB等外设的驱动就比较复杂了,需要考虑到驱动的可重用性,以避免内核中存在大量重复代码&…

uc_13_共享内存_消息队列_IPC对象

1 IPC对象 多个IPC -> 一个IPC对象 -> 一个IPC对象标识符 -> 一个键(整数)(即IPC对象的外部名称) 共享内存、消息队列和信号量,这三种IPC一般被合称为XSI IPC,它们有很多相似之处。 为了实现进程间的数据交换,系统内核会为参…

dockerfile简单实践部署(jenkins,wordpress)

实现部署jenkins的流程 配置java环境,导入jenkins包,运行命令 java -jar jenkins包,这里为了减少进入jenkins的web端安装插件,将插件提前部署到容器内。 制作dockerfile 创建镜像所在的文件夹和Dockerfile文件 mkdir /test cd …

【项目日记(一)】高并发内存池项目介绍

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:项目日记-高并发内存池⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 项目日记 1. 前言2. 什么是高并发内存池…

Textual Inversion

参考博客1:https://www.bilibili.com/read/cv25430752/

移动云荣获OpenInfra社区“算力基础设施技术突破奖”

近日,一年一度的 OpenInfra Days China在北京召开,大会汇聚了全球各大云厂商的技术专家,共同分享全球前沿基础设施技术的展望和实践经验。在本次大会上,移动云荣获OpenInfra社区颁发的“算力基础设施技术突破奖”,表明…

基于ssm实验室课程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 摘 要 随着科学实验规模的不断扩大,实验室课程数量的急剧增加,有关实验室课程的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有…

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)

前言 开发 ChatGPT 应用,我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问,这没问题,会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢,我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…