Docker篇——Compose和Consul合集

目录

 

一.Docker Compose简介

二.部署compose

三.服务发现-consul

四.consul-template

五.consul多节点配置


一.Docker Compose简介

Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。

常用命令列表:

字段

描述

build

重新构建服务

ps

列出容器

up

创建和启动容器

exec

在容器里面执行命令

scale

指定一个服容器启动数量

top

显示容器进程

logs

查看容器输出

down

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

stop/start/restart

停止/启动/重启服务

 配置常用字段:

字段

描述

build dockerfile context

指定Dockerfile文件名构建镜像上下文路径

image

指定镜像

command

执行命令,覆盖默认命令

container name

指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale

deploy

指定部署和运行服务相关配置,只能在Swarm模式使用

environment

添加环境变量

networks

加入网络

ports

暴露端口号,与-p相同,但端口号不能低于60

volume

挂载宿主机路径或命令卷

restart

重启策略,默认no,always,no-failure,unless-stoped

hostname

容器主机名

二.部署compose

1.环境部署所有主机安装docker环境

[root@localhost ~]# yum -y install docker-ce

2.将compose放入指定目录

[root@localhost local]# mv docker-compose /usr/local/bin/
[root@localhost local]# ll
总用量 0
drwxr-xr-x. 2 root root 28 11月 30 18:53 bin

[root@localhost local]# cd bin/
[root@localhost bin]# ll
总用量 10616
-rw-r--r--. 1 root root 10867152 11月 30 11:43 docker-compose
[root@localhost bin]# chmod +x /usr/local/bin/docker-compose 

3.搭建nginx服务 (搭建方法参照nginx服务搭建

4.将需要的文件放入compose目录内

[root@localhost compose_nginx]# vi docker-compose.yml

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
     - 1216:80
     - 1218:443
    networks:
     - abc 
    volumes:
     - ./wwwroot:/usr/local/nginx/html
networks:
  abc:
[root@localhost compose_nginx]# tree ./
./
├── docker-compose.yml
└── nginx
    ├── Dockerfile
    ├── nginx-1.12.2.tar.gz
    └── run.sh

5.启动compose

[root@localhost compose_nginx]# docker-compose -f docker-compose.yml up -d

Successfully built 1367ff129fd5
Successfully tagged compose_nginx_nginx:latest

[root@localhost compose_nginx]# docker ps -a  ##查看容器状态
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                         NAMES
5ec2cd46f839        compose_nginx_nginx   "/run.sh"           32 seconds ago      Up 31 seconds       0.0.0.0:1216->80/tcp, 0.0.0.0:1218->443/tcp   compose_nginx_nginx_1
[root@localhost compose_nginx]# ll
总用量 4
-rw-r--r--. 1 root root 253 11月 30 19:07 docker-compose.yml
drwxr-xr-x. 2 root root  65 11月 30 19:09 nginx
drwxr-xr-x. 2 root root   6 11月 30 19:14 wwwroot  ##生成新的目录

创建测试网页

[root@localhost compose_nginx]# cd wwwroot/
[root@localhost wwwroot]#  echo '<h1>test web</h1>' > index.html

测试

三.服务发现-consul

在分布式系统结构中,往往由成百上千的业务服务组成,为了容灾(节点宕机)、扩容(增加节点)、提高运维效率(动态配置)等原因,需要服务能够实现灵活发现,避免问题节点等功能,以提高系统稳定性

安装consul

创建文件夹,导入consul包解压

[root@localhost ~]# mkdir consul       
[root@localhost ~]# cd consul/
[root@localhost consul]# rz -E
rz waiting to receive.
[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul   
[root@localhost consul]# mv consul /usr/local/bin/

 

[root@localhost consul]# mv consul /usr/local/bin/
[root@localhost consul]# consul agent \  ##使用代理功能
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.100.10 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &  ##放入后台运行
[1] 65904

 参数解释:
-server: 运行在server模式
-data-dir:指定数据目录,其他的节点对于这个目录必须有读的权限
-node:指定节点的名称
-bind:为该节点绑定一个地址
-ui:使用自带的ui,
-ui-dir:指定ui的目录,使用自己定义的ui
-client:指定web ui、的监听地址,默认127.0.0.1只能本机访问。

查看集群信息

[root@localhost consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.100.10:8301  alive   server  0.9.2  2         dc1
[root@localhost consul]# consul info | grep leader
	leader = true
	leader_addr = 192.168.100.10:8300

登录测试

在另一台容器上安装Gliderlabs/Registrator

[root@localhost ~]# docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> -ip=192.168.100.13 \
> consul://192.168.100.10:8500

 

测试服务发现功能

[root@localhost ~]# docker run -itd -p 83:80 --name test1 -h test01 nginx

[root@localhost ~]# docker run -itd -p 84:80 --name test2 -h test02 nginx

 

四.consul-template

consul-template是一个守护进程,用于实时查询consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成以后,可以选择运行shell命令执行更新操作,重新加载Nginx。consul-template可以查询consul中的服务目录、Key、Key-values等。这种强大的抽象功能和查询语言模板可以使consul-template特别适合动态的创建配置文件

准备template nginx模板文件

[root@localhost ~]# vim /root/consul/nginx.ctmpl

upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
  {{end}}
}
server {
  listen 83;
  server_name localhost 192.168.100.14;
  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-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}

 

编译安装nginx

[root@localhost consul]# yum -y install gcc gcc-gcc++ pcre-devel zlib-devel 
[root@localhost conf]# mkdir /var/log/nginx ##建立日志文件目录
[root@localhost conf]# /usr/local/nginx/sbin/nginx  ##启动nginx服务
[root@localhost conf]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      63784/nginx: master 

配置并启动template

[root@localhost ~]# mv consul-template /usr/local/bin/


[root@localhost ~]# consul-template -consul-addr 192.168.100.14:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info ##将template模板导入nginx
2020/12/01 06:31:27.687818 [INFO] consul-template v0.19.3 (ebf2d3d)
2020/12/01 06:31:27.687834 [INFO] (runner) creating new runner (dry: false, once: false)
2020/12/01 06:31:27.688223 [INFO] (runner) creating watcher
2020/12/01 06:31:27.688915 [INFO] (runner) starting
2020/12/01 06:31:27.688929 [INFO] (runner) initiating run
2020/12/01 06:31:27.695701 [INFO] (runner) initiating run
2020/12/01 06:31:27.702410 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/12/01 06:31:27.702438 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/12/01 06:31:27.702533 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload

测试nginx服务

查看容器日志

[root@localhost ~]# docker logs -f test1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
192.168.100.14 - - [01/Dec/2020:06:38:48 +0000] "GET / HTTP/1.0" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" "192.168.100.1"

查看consul主机配置文件

[root@localhost vhost]# cat kgc.conf 
upstream http_backend {
  
   server 192.168.100.13:83;  ##自动发现容器服务
  
   server 192.168.100.13:84;
  
}
server {
  listen 83;
  server_name localhost 192.168.100.14;
  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-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}



五.consul多节点配置

新建一个拥有docker服务的主机加入已有群集中

与之前consul配置一致

[root@localhost docker]# consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.100.15 \
> -client=0.0.0.0 \
> -node=consul-server02 \
> -enable-script-checks=true \
> -datacenter=dc1 \
> -join 192.168.100.14 &> /var/log/consul.log &

 参数解释:
-bootstrap-expect:集群期望的节点数,只有节点数量达到这个值才会选举leader。
-server: 运行在server模式
-data-dir:指定数据目录,其他的节点对于这个目录必须有读的权限
-node:指定节点的名称
-bind:为该节点绑定一个地址
-config-dir:指定配置文件,定义服务的,默认所有一.json结尾的文件都会读
-enable-script-checks=true:设置检查服务为可用
-datacenter: 数据中心没名称,
-join:加入到已有的集群中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moon-01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值