docker-compose

docker compose:管理单节点容器

缺点:只能管理本机的,不能管理其他节点的

docker-compose简介

开源项目,负责实现对Docker容器集群的快速编排

可以简化docker容器的管理,使得多个容器之间的部署,连接变的更加的简单可靠,同时还能够实现服务自动扩展和容器的定期更新等功能

此外还支持设置各种容器之间的依赖关系 ,比如启动数据库容器才能启动应用容器

一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理

将所管理的容器分为三层:

工程(project) 服务(service) 容器(container)

使用 yml时需要注意下面事项:

  • 大小写敏感

  • 不支持制表符 tab 键缩进,只能使用空格缩进

  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

  • 用 # 号注释

  • 符号字符后缩进1个空格,如冒号 : 逗号, 横杠-

  • 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思

docker compose内部控制参数

  1. name

  2. 自定义挂载

  3. 自定义ENV 环境变量 【运行前------> 自定义网络】

  4. 自定义端口

  5. 自定义传参 【运行后】

docker-compose命令

build : 描述

ps : 重新构建服务

up :创建和启动容器

exec :在容器里面执行命令

scale :指定一个服务容器启动数量

top :显示容器进程

logs :日志

down :删除容器、网络、数据卷、镜像

stop/start :停止/启动服务

restart :重启服务

  • no:默认策略

  • on-failure:在容器非正常退出时(状态非0),才会重启容器

  • on-failure:3 :在容器非正常退出时重启容器,最多重启3次

  • always:在容器退出时总是重启容器

  • unless-stopped:在容器退出时总是重启,但不考虑在docker守护进程启动时就已经停止了

Docker Compose配置常用字段

servies:服务模块 【nginx、mysql、php】

container_name:容器名

build:指定dockerfile文件名

centext:指定dockerfile文件的路径

dockerfile:指定文件名Dockerfile

ports:开启端口

networks:加入网络

volumes:挂载

networks:网络模块

driver:网络模式

compose 部署
复制代码
1. Docker Compose 环境安装
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version   #查看版本 。

docker-compose部署lnmp

下载docker-compose并赋予执行权限

Consul:注册和发现

consul是一个基于分布式的服务发现和配置管理工具。

它具有快速构建分布式架构提供服务发现和服务治理等功能的特点

同时consul还提供了可靠的保证,多数据中心和强大的API以满足高可用、分布式环境下的需求

consul的工作:

  1. 动态服务发现:服务发现是指在分布式计算环境下,自动发现可用在服务实例,并将其注册到 consul 上,以便其他服务调用

  2. 动态配置管理(temlate):配置管理是指通过通过 consul 动态更新分布式架构中配置信息【包括:环境变量、属性值、文件、数据库等】

consul 可以与多种不同的服务一起使用,包括 kubernetes、dicjer、mescos等,因此 consul 成为分布式系统中心不可少的的一部分

8300:replication【副本代表同步】、leader【领导者】、farwarding【转发】的端口

8301:lan cossip的端门【内部同一数据中心端口通信】

8302:wan qossip的端口【不同数据中心端口通信】

8500:web ui界面的端口【用于http接口和web】

8600:使用dns协议查看节点信息的端口【用于已注册的服务发现】

consul agent 的 server模式

数据流向:

数据流向:

nginx和apache会将数据写入到docker.sock文件中,redistraror会对docker.sock文件自动监控,如果文件发生改动,并将其注册到 consul服务器中的自动注册模块,进行web的ui界面展示

consul-template

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。

consul服务器部署
复制代码
unzip consul_0.9.2_linux_amd64.zip   解包
mv consul /usr/local/bin

#设置代理,在后台启动 consul 服务端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.86.44 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

#查看members状态
  consul members   
复制代码
#查看集群状态
  1、consul operator raft list-peers
  2、consul info | grep leader
复制代码
节点服务器 registrator部署
#1、安装 Gliderlabs/Registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=本机IP地址 \
consul://consulIP地址:8500

#2、测试服务发现功能是否正常【-h:设置容器主机名】
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd

#3、验证 http 和 nginx 服务是否注册到 consul
浏览器访问consulIP地址:8500【192.168.86.44:8500】
点击 NODES(节点),然后单击"consurl-server01"

#在consul服务器使用curl测试连接服务器
curl 127.0.0.1:8500/v1/catalog/services

停止registrator服务器中的conmose-lnmp_php容器,再去web查看,可以看见conmose-lnmp_php容器不在了

相关推荐
qq_3164110310 小时前
商用冷柜售后报修运维管理系统开发案例
运维
智码看视界10 小时前
Day59-阿里云ACK实战:生产级K8s集群部署与运维
运维·阿里云·kubernetes·k8s·日志监控·容器运维·阿里云ack
码视野12 小时前
基于 Vue3 + Element Plus 的【智慧新能源汽车充电桩运维调度与分时共享租赁系统】设计与实现(附完整源码与PRD)
运维·人工智能·汽车·vue3
qq_4260039612 小时前
【UI自动化测试】UI自动化报错解决方案
运维·ui·自动化
网安蟹佬霸12 小时前
WAF绕过技术实战:从规则检测到编码绕过全指南(2026最新版,附Payload集与自动化脚本)
运维·安全·网络安全·架构·自动化·网安
小杨不想秃头13 小时前
信息安全工程师教程第二章密码学
运维·服务器·密码学
I'mChloe13 小时前
WGCLOUD怎么监控多台服务器?从Server、Agent 部署到监控面板实战
运维·服务器
Android系统攻城狮13 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
国科安芯13 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
Python自动化直播14 小时前
周末测试直播自动化时,发现一个棘手的并发问题
运维·自动化