共计 9686 个字符,预计需要花费 25 分钟才能阅读完成。
这篇文章给大家分享的是有关 Docker 容器中 Compose 编排、consul 集群、te 如何实现的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。
docker compose 容器编排
(1)docker compose 的前身 Fig,它是一个定义及运行多个 docker 容器的工具
(2)使用 docker compose 不再需要使用 shell 脚本启动容器
(3)docker compose 非常适合组合使用多个容器进行开发的场景
YAML 是一种标记语言很直观的数据序列化格式文件格式及编写注意事项:
不支持制表符 tab 键缩进,需要使用空格缩进
通常开头缩进 2 个空格
字符后缩进 1 个空格,如冒号,逗号,横杆
用井号注释
如果包含特殊字符用单引号引起来
布尔值必须用引号括起来
docker compose 配置常用字段字段描述 build dockerfile context 指定 Dockerfile 文件名构建镜像上下文路径 image 指定镜像 command 执行命令,覆盖默认命令 container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法 scaledeploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用 environment 添加环境变量 networks 加入网络 ports 暴露容器端口,与 - p 相同,但端口不能低于 60volumes 挂载宿主机路径或命令卷 restart 重启策略,默认 no,always, no-failure,unless-stopedhostname 容器主机名 docker compose 常用命令字段描述 build 重新构建服务 ps 列出容器 up 创建和启动容器 exec 在容器里面执行命令 scale 指定一个服务 容器启动数量 top 显示容器进程 logs 查看容器输出 down 删除容器、网络、数据卷和镜像 stop/start/restart 停止 / 启动 / 重启服务 compose 命令说明基本的使用格式
docker-compose [options] [COMMAND] [ARGS...]
docker-compose 选项
--verbose 输出更多调试信息
--version 打印版本并退出
-f,--file FILE 使用特定的 compose 模板文件,默认为 docker-compose.yml
-p,--project-name NAME 指定项目名称,默认使用目录名称
1、安装 docker 容器和 compose 编排工具
[root@localhost ~]# yum install -y \
yum-utils \ ## 设置源工具
device-mapper-persistent-data \ ## 映射工具
lvm2 ## 映射工具
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 加载阿里云镜像源
[root@localhost ~]# yum install docker-ce -y ## 安装 docker 容器
[root@localhost ~]# systemctl stop firewalld.service ## 关闭防火墙
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start docker ## 开启 docker 容器
[root@localhost ~]# systemctl enable docker ## 开机自启动
[root@localhost ~]# ps aux | grep docker ## 查看 docker 进程是否开启
[root@localhost ~]# tee /etc/docker/daemon.json - EOF ## 进行镜像加速
{ registry-mirrors : [ https://3a8s9zx5.mirror.aliyuncs.com]
}
EOF
registry-mirrors : [https://3a8s9zx5.mirror.aliyuncs.com]
[root@localhost ~]# systemctl daemon-reload ## 重载守护进程
[root@localhost ~]# systemctl restart docker ## 重启 docker 服务
[root@localhost ~]# mount.cifs //192.168.100.100/LNMP-C7 /mnt/
Password for root@//192.168.100.100/LNMP-C7:
[root@localhost ~]# cd /mnt/docker/
[root@localhost docker]# cp -p docker-compose /usr/bin/
## 将 docker-compose 复制到 /usr/bin/ 目录下
[root@localhost docker]# docker-compose -v ## 查看版本信息
docker-compose version 1.21.1, build 5a3f1a3
2、创建 Nginx 编排实例
[root@localhost docker]# cd ~
[root@localhost ~]# mkdir compose-nginx ## 创建工作目录
[root@localhost ~]# cd compose-nginx/
[root@localhost compose-nginx]# mkdir nginx ## 创建 Nginx 的目录
[root@localhost compose-nginx]# cd nginx/
[root@localhost nginx]# vim run.sh ## 编辑启动脚本
#!/bin/bash
/usr/local/nginx/sbin/nginx ## 启动 Nginx 服务
[root@localhost nginx]# mkdir /abc
[root@localhost nginx]# mount.cifs //192.168.100.3/LNMP-C7 /abc/
Password for root@//192.168.100.3/LNMP-C7:
[root@localhost nginx]# cp /abc/nginx-1.12.2.tar.gz ./ ## 将 Nginx 的压缩包复制到当前目录下
[root@localhost nginx]# vim Dockerfile ## 编写容器文件
FROM centos:7
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module make make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo daemon off; /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD [/run.sh]
[root@localhost nginx]# cd ../
[root@localhost compose-nginx]# vim docker-compose.yml ## 创建 compose 模板脚本
version: 3 ## 版本
services: ## 服务
nginx:
hostname: nginx ## 容器主机名
build:
context: ./nginx ## 创建容器的文件路径
dockerfile: Dockerfile
ports:
- 1216:80 ## 映射端口
- 1217:443
networks:
- abc ## 网络名称
volumes:
- ./wwwroot:/usr/local/nginx/html ## 数据卷关联宿主站点目录
networks: ## 对外申明网络
abc:
[root@localhost compose-nginx]# docker-compose -f docker-compose.yml up -d
## 执行 compose 脚本开启,- d 守护进程
[root@localhost compose-nginx]# cd wwwroot/
[root@localhost wwwroot]# vim index.html
this is test!!! ## 编辑首页内容
[root@localhost wwwroot]# yum install tree -y
[root@localhost wwwroot]# tree ~ ## 查看整个所需的内容结构
/root
├── anaconda-ks.cfg
├── compose-nginx
│ ├── docker-compose.yml ## 编排模板
│ ├── nginx
│ │ ├── Dockerfile ## 容器脚本
│ │ ├── nginx-1.12.2.tar.gz ## 安装包
│ │ └── run.sh ## 启动服务脚本
│ └── wwwroot
│ └── index.html ## 网站首页
3、用浏览器查看网页
consul 概述 consul 是开源工具,用于实现分布式系统的服务发现与配置 consul 的特性:
(1)consul 支持健康检查,允许存储键值对(2)一致性协议采用 Raft 算法,用来保证服务的高可用(3)成员管理和消息广播采用 GOSSIP 协议,支持 ACL 访问控制
方便部署,与 docker 等轻量级容器可无缝配合建立 consul 服务
每个提供服务的节点上都要部署和运行 consul 和 agent
consul agent 有两种运行模式:server,client
server 和 client 知识 consul 集群层面的区分,与搭建在 cluster 之上的应用服务无关
架构拓扑图
实验环境
consul 服务端 192.168.13.128 Docker-ce 、Compose 3、Consul、Consul-template
client 客户节点 192.168.13.129 Docker-ce 、registrator
1、配置 consul 服务器
[root@consul ~]# mkdir consul
[root@consul ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for root@//192.168.100.3/LNMP-C7:
[root@consul ~]# cd /mnt/docker/
[root@consul docker]# cp consul_0.9.2_linux_amd64.zip /root/consul/
[root@consul docker]# cd /root/consul/
[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip ## 解压 consul
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@consul consul]# mv consul /usr/bin/ ## 便于系统识别
[root@consul consul]# consul agent \ ## 代理
-server \ ## 提供 server
-bootstrap \
-ui \ ##web 访问界面
-data-dir=/var/lib/consul-data \ ## 数据存储目录
-bind=192.168.13.128 \ ## 本地地址
-client=0.0.0.0 \ ## 所有节点
-node=consul-server01 /var/log/consul.log ## 指定本地节点名称
[root@consul consul]# consul members ## 查看群集信息
Node Address Status Type Build Protocol DC
consul-server01 192.168.13.128:8301 alive server 0.9.2 2 dc1
[root@consul consul]# consul info | grep leader ## 查看 leader
leader = true
leader_addr = 192.168.13.128:8300
[root@consul consul]# systemctl stop firewalld.service ## 关闭防火墙
[root@consul consul]# setenforce 0
## 通过 httpd api 获取集群信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/peers ## 查看群集 server 成员
[root@localhost consul]# curl 127.0.0.1:8500/v1/status/leaders ## 群集中 Raf leader
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services ## 注册的所有服务
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nodes ## 群集节点详细信息
[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/nginx ## 查看 nginx 服务信息
2、配置 client 节点服务器
[root@client ~]# docker run -d \
--name=registrator \ ## 安装 registrator 自动注册功能
--net=host \ ## 指定网络
-v /var/run/docker.sock:/tmp/docker.sock \ ## 指定数据卷
--restart=always \
gliderlabs/registrator:latest \ ## 镜像
-ip=192.168.13.129 \ ## 本地地址
consul://192.168.13.128:8500 ##consul 服务器地址
3、在节点服务器上测试发现功能是否正常
[root@client ~]# docker run -itd -p 83:80 --name test-01 -h test01 nginx
[root@client ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx
[root@client ~]# docker run -itd -p 88:80 --name test-03 -h test03 httpd
[root@client ~]# docker run -itd -p 89:80 --name test-04 -h test04 httpd
[root@client ~]# systemctl stop firewalld.service ## 关闭防火墙
[root@client ~]# setenforce 0
4、验证 http 和 Nginx 服务是否注册到 consul
consul-template 概述
是基于 Consul 的自动替换配置文件的应用;
可以查询 Consul 中的服务目录:Key、Key-values 等;
特别适合动态的创建配置文件;
是一个守护进程,用于实时查询 consul 集群信息;
1、在 consul 服务器上配置模板文件
[root@consul consul]# vim /root/consul/nginx.ctmpl
upstream http_backend { ## 申明后端服务器池
{{range service nginx}}
server {{.Address}}:{{.Port}};
{{end}}
server {
listen 1216; ## 代理端口
server_name localhost 192.168.13.128; ## 本地地址
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host; ## 头部信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend; ## 跳转后端服务器池
}
}
2、在 consul 服务器上安装配置 Nginx
[root@consul consul]# cd /mnt/
[root@consul mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/ ## 解压 Nginx
[root@consul mnt]# cd /opt/nginx-1.12.2
[root@consul nginx-1.12.2]# yum install gcc gcc-c++ pcre-devel zlib-devel -y ## 安装组件
[root@consul nginx-1.12.2]# ./configure --prefix=/usr/local/nginx ## 配置
[root@consul nginx-1.12.2]# make make install
[root@consul nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf ## 修改 Nginx 配置文件
17 http {
18 include mime.types;
19 include vhost/*.conf; ## 指定虚拟主机目录
[root@consul nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost ## 创建虚拟主机目录
[root@consul nginx-1.12.2]# mkdir /var/log/nginx ## 创建模板中日志文件目录
[root@consul nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ## 创建软连接
[root@consul nginx-1.12.2]# nginx ## 开启 Nginx 服务
[root@consul nginx-1.12.2]# netstat -natp | grep nginx
3、在 consul 服务器上配置并启动 templeta
[root@consul nginx-1.12.2]# cd /mnt/docker/
[root@consul docker]# cp consul-template_0.19.3_linux_amd64.zip /root/
[root@consul docker]# cd /root/
[root@consul ~]# unzip consul-template_0.19.3_linux_amd64.zip ## 安装 templeta
Archive: consul-template_0.19.3_linux_amd64.zip
inflating: consul-template
[root@consul ~]# mv consul-template /usr/bin
[root@consul ~]# consul-template -consul-addr 192.168.13.128:8500 \ ## 指定 consul 本地地址
-template /root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload \
## 指定 template 的路径
--log-level=info ## 日志级别
[root@consul ~]# cd /usr/local/nginx/conf/vhost/
[root@consul vhost]# ls
kgc.conf ## 自动生成配置文件模板
upstream http_backend {
server 192.168.13.129:83; ## 自动生成后端容器服务地址及端口号
server 192.168.13.129:84;
server {
listen 1216;
server_name localhost 192.168.13.128;
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
用浏览器查看
也可在后端节点服务器上通过 docker logs -f test-01 查看来访地址为 128
4、在 client 端创建一个 nginx 容器节点,检测服务发现及配置更新,不要关闭防火墙
[root@localhost ~]# docker run -itd -p:85:80 --name test-05 -h test05 nginx
## 继续浏览器访问 128 服务端
[root@client ~]# docker logs -f test-05
192.168.13.128 - - [09/Jan/2020:11:05:39 +0000]
## 轮询访问,还是 128 服务端访问的节点,实现了负载均衡
感谢各位的阅读!关于“Docker 容器中 Compose 编排、consul 集群、te 如何实现”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!