20220714docker-Consul
Posted 歆瑶的小房子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20220714docker-Consul相关的知识,希望对你有一定的参考价值。
Consul提供的一些关键特性
•service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务
•health checking:健康检测使consul可以快速的警告在集群中的操作。和服务发现的集成,可以防止请求转发到故障的服务上面
•key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作
consul安装
* Consul 下载地址:https://www.consul.io/downloads.html
* Github地址:https://github.com/hashicorp/consul
* 码云地址:https://gitee.com/mirrors/consul
下载、解压就得到一个可执行文件consul(通过go编译为二进制文件)
将这个文件移动到全局变量环境中
$ sudo mv consul /usr/local/bin/
consul对外提供的端口,不同的端口有不同的作用,
Consul-启动服务
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=192.168.169.150 -ui -client=0.0.0.0
参数含义:
agent
-server表示启动的是一个服务
-bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就
启动了
-node=texun_1 就是给consul服务起个别名为ali_1
-bind=172.17.114.76 绑定内网ip
-data-dir /opt/data1 数据存储目录为/opt/data1
-ui 启动默认ui界面
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服
务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问
Consul-api常用命令
注册服务:
curl -X PUT -d "ID":"order_1","Name":"order","Tags":["xdp-\\/core.order"],"Address":"192.168.232.201","Port":18307,"Check":"name":"order_1.check","tcp":"192.168.232.201:18307","interval":"10s","timeout":"2s" http://192.168.232.204:8550/v1/agent/service/register
查询服务:
curl http://192.168.232.204:8550/v1/health/service/order?dc=xdp_dc&passing=true
dc : 表示数据中心是xdp_dc (存储信息记录)
passing : 表示健康检测是通过的
查询所有服务:
curl http://192.168.232.204:8550/v1/agent/services?dc=xdp_dc
注销服务:
curl -X PUT http://192.168.232.204:8550/v1/agent/service/deregister/order_1?dc=xdp_dc
查询所有k/v:
curl http://192.168.232.204:8550/v1/kv/?recurse
添加key/value :
curl -X PUT -d test http://192.168.232.204:8550/v1/kv/abc/key1
key: abc/key1
value:test
修改k/v:
curl -X PUT -d test666 http://192.168.232.204:8550/v1/kv/abc/key1
删除key:
curl -X DELETE http://192.168.232.204:8550/v1/kv/abc/key1
docker 安装consul
下载consul镜像docker pull consul:1.4.4
#创建自定义网段
[root@localhost docker]# docker network create --subnet=172.200.7.0/100 mynetwork
d8c3c71a6b4d4dcaf348830c97c5b489626a1a6f3627419d395d99e16852caad
创建容器#启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面
docker run -d
-p 8510:8500 //配置端口映射
-v/docker/consul/data/server1:/consul/data //配置文件夹映射 没有则自动创建
-v/docker/consul/conf/server1:/consul/config //配置文件夹映射
-e CONSUL_BIND_INTERFACE=eth0 //配置使用网络
--network=mynetwork //配置网络
--ip 172.200.7.6 //自定义指定ip地址
--privileged=true --name=consul_server1 consul:1.4.4 //配置自启动 别名
agent -server -bootstrap-expect=3 //配置服务节点3个
-ui -node=consul1.4.4_server_public_2 //配置web页面
-client=0.0.0.0 //配置客户端响应
-data-dir /consul/data //配置consul存储地址
-config-dir /consul/config //配置文件存储地址
-datacenter=xdp_dc //数据中心名称
具体执行的命令 必须输入成一行
[root@localhost config]# docker run -d -p 8510:8500 -v/docker/consul/data/server1:/consul/data -v/docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_public_2 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=xdp_dc
1be16c0c0314449c5c6729d72480b606a19bfeeba7e952926d8c1104e4e60c4e
[root@localhost config]#
[root@localhost config]# docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server_2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_3 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
0773aee815d29e4f03d41a2f4fb52291d97fe957bff5480ed68bc48e6cfa8071
[root@localhost config]#
[root@localhost config]# docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server_3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_4 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
6bbf455ed8c7a335031615109635dc2b6cb28003fe4c94e2ffb1e5764a64ac80
查询是否已经配置固定ip地址
[root@localhost config]# docker inspect consul_server1 | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.200.7.6",
5台server节点 2台client节点
docker run -d -p 8510:8500 -v /docker/consul/data/server1:/consul/data -v /docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_1 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=consul_data
docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_3 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8540:8500 -v /docker/consul/data/server4:/consul/data -v /docker/consul/conf/server4:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.9 --privileged=true --name=consul_server4 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_4 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8550:8500 -v /docker/consul/data/server5:/consul/data -v /docker/consul/conf/server5:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.10 --privileged=true --name=consul_server5 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_5 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8610:8500 -v /docker/consul/data/client1:/consul/data -v /docker/consul/conf/client1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.100 --privileged=true --name=consul_client1 consul:1.4.4 agent -ui -node=consul1.4.4_client_1 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8620:8500 -v /docker/consul/data/client2:/consul/data -v /docker/consul/conf/client2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.101 --privileged=true --name=consul_client2 consul:1.4.4 agent -ui -node=consul1.4.4_client_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
如果出现以下效果 则按照成功
安装consul模板
# 1. 解压缩$ unzip consul-template_0.26.0_linux_386.zip#将执行文件(解压缩之后的文件夹),复制到/usr/local/bin文件夹下
cp consul-template /usr/local/bin
# 2. 设置环境变量,输入命令:
vim /etc/profile
# 3. 将这里的代码添加到 profile 文件末尾(这里覆盖之前consul的配置)
# Consul
export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template
export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME;
# 4. 执行命令使环境变量生效
source /etc/profile
# 5. 验证软件是否安装成功
consul-template -v
Consul-template 实战配置文件生成
实战步骤:
1. Consul-template 定义模板文件: find_address.tpl#创建模板1be16c0c0314:/consul/config/tpl# pwd
/consul/config/tpl
1be16c0c0314:/consul/config/tpl# vi find_address.tpl
1be16c0c0314:/consul/config/tpl# more find_address.tpl
key "/hashicorp/street_address"
touch find_address.tpl
#定义模板内容项
key "/hashicorp/street_address"
2. consul-template读取KV数据,用于渲染生成配置文件#运行consul-template命令,
同时指定要使用的模板和需要更新的文件:consul-template -template "find_address.tpl:hashicorp_address.conf"
注: consul-template 命令会持续运行,可使用 CTRL+c 可以停止其运行。新开一个新终端,使用命令
行指令将数据写入Consul
3. 根据 consul kv 之类
用来往consul的KV键值对中存入数据数据$ consul kv put hashicorp/street_address "127.0.0.1:8080"Success! Data written to: hashicorp/street_address
#查看hashicorp_address.conf 文件来确保有数据写入文件
cat /consul/config/tpl/hashicorp_address.conf
127.0.0.1:8080
4. 想要动态更新模板的值
再次 采用kv指令,
consul kv put hashicorp/street_address "127.0.0.1:11000" 更新
hashicorp/street_address 值,可以看到该文件立即更新。有啥用? 比如用户可以用相同的过程来
更新HAProxy负载均衡器配置。
个人解释:模板文件位置:/consul/config/tpl模板文件名可以自定义 :需要在第二步执行命令是 将模板文件名以及需要更新的文件都指定好就行 consul-template -template "模板文件名:需输出的配置文件名称" 模板文件内容中的key :指的是需要到consul中的kv对应的键名 将值保持到上一步的“配置文件名称”中 具体的consul的kv 需要通过接口调用写入数据
Dockerfile构建镜像
1、先创建dockerfile文件名的文件,注意没有任何后缀
2、dockerfile 构建镜像的内容分段(须知:任何镜像都需要基于操作系统构建)
一、指定操作系统 / 已经构建好的别人或往期镜像
二、把软件安装的过程命令写在dockerfile中(安装程序)
三、配置系统如:开放端口、配置共享目录等
Dockerfile文件常用指令
FROM : 指定系统 / 镜像
RUN : 指定在系统中运行的命令 (讲究尽量多的命令合在一起)
EXPOSE : 指定镜像开放的端口
ENV :配置镜像环境
COPY : 复制主机的资源到镜像中
CMD : 指定容器启动的时候运行什么命令
Docker常用命令
1、根据dockerfile
docker build –t 镜像名 .
2、根据镜像名启动并运行起容器
docker run –itd --name 容器名 镜像名 -p=81:80
3、查看容器日志
docker log 容器id
4、查看容器进程
docker top 容器id
5、进入容器
docker exec –it 容器名 bash/sh
1、查看所有镜像
docker images .
2、删除镜像
docker rmi 镜像名 [-f 强制删除]
3、查看容器
docker ps [-a 是查看所有容器]
4、查看容器进程
docker top 容器id
5、启动停止容器
docker start/stop 容器
Alpine镜像安装go问题
go在alpine系统采用的so不同导致的
情况:由于alpine镜像使用的是musl libc而不是gnu libc,/lib64/ 是不存在的。但他们是兼容的,可以创建个软连接过去.
解决:
mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
Docker网络
Docker网络和虚拟机一样;设定上分为三种
1、bridge : 桥接网络 (默认、常用)
2、none: 无指定网络 (没用过)
3、host:主机网络(特殊情况)
Docker网络-命令
创建网络
docker network create --subnet=192.168.1.0/24 mynetwork
使用
docker run -itd --network=redis-network --ip 192.168.1.10 --name dockerName imagesName
查看所有网络
docker network ls
删除网络
docker network rm mynetwork
Docker run-补充
docker run
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
-m :设置容器使用内存最大值
-v :与宿主机绑定共享目录
-p :与宿主机绑定端口
-ip : 定义网络ip
--network:指定使用的网络
需要注意的是docker-composer运用的时候一定要注意版本的问题,如下图显示;
Docker-compose安装
官网地址:https://docs.docker.com/compose/
安装:curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
version: "3.6" # 确定docker-composer文件的版本
services: # 代表就是一组服务 - 简单来说一组容器
nginx: # 这个表示服务的名称,课自定义; 注意不是容器名称
build: # 根据dockerfile构建镜像及构建为容器
context: ./nginx
image: nginx1.4_composer # 指定容器的镜像文件
container_name: nginx-1.4-composer # 这是容器的名称
ports: # 配置容器与宿主机的端口
- "8001:80"
privileged: true # 执行特殊权限的命令
volumes: # 配置数据挂载
- /redis_2004/09/nginx/conf:/conf
working_dir: /conf #工作目录
docker-compose命令
运行编排好的容器
docker-compose up -d
停止编排好的容器
docker-compose stop
停止并删除编排好的容器
docker-compose down
Consul的API操作:
本地请求:基于 Agent
数据中心请求:基于 catalog 类型
注册服务:
格式:
http://ip:port/v1/kv/key http://192.168.30.128:8530/v1/kv/config/db/connection
# CURL:
curl -X DELETE http://192.168.30.128:8530/v1/kv/config/db/connection
# 请求例子:
docker-Consul概述及集群搭建docker-Consul的概述及consul集群环境的搭建
docker-Consul的概述及consul集群环境的搭建