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容器不在了

相关推荐
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木2 小时前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ3 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
HHoao7 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔7 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
winds~7 小时前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu
bush47 小时前
使用root账号ssh登录虚拟机ubuntu
运维·ubuntu·ssh
叫我龙翔8 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
S hh9 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
唐大爹9 小时前
项目实战:k8s部署考试系统
云原生·容器·kubernetes