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内部控制参数
-
name
-
自定义挂载
-
自定义ENV 环境变量 【运行前——> 自定义网络】
-
自定义端口
-
自定义传参 【运行后】
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的工作:
-
动态服务发现:服务发现是指在分布式计算环境下,自动发现可用在服务实例,并将其注册到 consul 上,以便其他服务调用
-
动态配置管理(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容器不在了