一.Docker consul集群搭建
1.linux上面部署consul集群
2.Docker上面部署consul集群
(1).Dokcer Consul 参数详解
(2).启动第一个节点consul1
[root@manager_241 ~]# docker pull consul
Using default tag: latest
Error response from daemon: manifest for consul:latest not found: manifest unknown: manifest unknown
[root@manager_241 ~]# docker pull consul:1.14.1
1.14.1: Pulling from library/consul
9621f1afde84: Pull complete
...
92968d126abf: Pull complete
Digest: sha256:d8f44192b5c1df18df4e7cebe5b849e005eae2dea24574f64a60a2abd24a310e
Status: Downloaded newer image for consul:1.14.1
docker.io/library/consul:1.14.1
[root@manager_241 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gowebimg v1.0.1 be3c1ee42ce2 2 days ago 237MB
mycentos v1 4ba38cf3943b 3 days ago 434MB
nginx latest a6bd71f48f68 3 days ago 187MB
6053537/portainer-ce latest b9c565f94ccc 4 weeks ago 322MB
mysql latest a3b6608898d6 4 weeks ago 596MB
consul 1.14.1 8540a77af6e2 12 months ago 149MB
[root@worker_241 ~]# docker pull consul
Using default tag: latest
Error response from daemon: manifest for consul:latest not found: manifest unknown: manifest unknown
[root@worker_241 ~]#
[root@worker_241 ~]# docker search consul
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
consul Consul is a datacenter runtime that provides… 1427 [OK]
hashicorp/consul-template Consul Template is a template renderer, noti… 29
hashicorp/consul Automatic build of consul based on the curre… 53 [OK]
[root@worker_241 ~]# docker pull hashicorp/consul
Using default tag: latest
latest: Pulling from hashicorp/consul
96526aa774ef: Pull complete
8a755a53c1aa: Pull complete
fd305fe2d878: Pull complete
01d12fe0b370: Pull complete
cbc103c13062: Pull complete
4f4fb700ef54: Pull complete
3a5b5f5fe822: Pull complete
Digest: sha256:712fe02d2f847b6a28f4834f3dd4095edb50f9eee136621575a1e837334aaf09
Status: Downloaded newer image for hashicorp/consul:latest
docker.io/hashicorp/consul:latest
[root@worker_241 ~]#
[root@worker_241 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gowebimg v1.0.1 be3c1ee42ce2 4 days ago 237MB
nginx <none> a6bd71f48f68 5 days ago 187MB
hashicorp/consul latest 48de899edccb 3 weeks ago 206MB
mysql latest a3b6608898d6 4 weeks ago 596MB
[root@worker_241 ~]# docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
2550fb171015d39dccad2b62379259337ee78d074536fd6d6e3383c12c71b113
[root@worker_241 ~]#
[root@worker_241 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2550fb171015 hashicorp/consul "docker-entrypoint.s…" 26 seconds ago Up 14 seconds 0.0.0.0:8300-8302->8300-8302/tcp, :::8300-8302->8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, :::8500->8500/tcp, 0.0.0.0:8600->8600/tcp, :::8600->8600/tcp, 8600/udp consul1
[root@worker_241 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
66d69474d739 bridge bridge local
c2191211eabb docker_gwbridge bridge local
31616bf730aa host host local
1e0116a4c2da none null local
[root@worker_241 ~]# docker inspect 66d69474d739
[
{
"Name": "bridge",
"Id": "66d69474d739b7833552f10f0d7c2cc204fd89874fbb9b322bdb6ccf8f8e88cd",
"Created": "2023-11-25T20:06:24.898621409-08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"2550fb171015d39dccad2b62379259337ee78d074536fd6d6e3383c12c71b113": {
"Name": "consul1",
"EndpointID": "870bf26516364ba1fecfcab8e41188c9366c53d4a774bdd69704ccfbe63a9a61",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
(3).启动第二个节点(端口8501),加入到 consul1
docker run --name consul2 -d -p 8501:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consul2 -d -p 8501:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
8d0cbaf78af0be8a8e81e95ccf63508b814dafee83870048ee74120f75e9bc09
(3).启动第三个节点(端口8502),加入到 consul1
docker run --name consul3 -d -p 8502:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consul3 -d -p 8502:8500 hashicorp/consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
9e6e1b46f9caa2f8675c0c56b9e68fc7bca6c341f28b5f4ff12ba53a431e7463
(4).启动一个consule客户端(端口 8503 )加入到consul1
docker run --name consulClient1 -d -p 8503:8500 hashicorp/consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
[root@worker_241 ~]# docker run --name consulClient1 -d -p 8503:8500 hashicorp/consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
44d7066b26dae726309e1c21a7bde4b31099258e728d175bbef7cb1dc7e40398
(5).查看consul
docker ps
docker exec -it consul1 consul members
[root@worker_241 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d7066b26da hashicorp/consul "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8503->8500/tcp, :::8503->8500/tcp consulClient1
9e6e1b46f9ca hashicorp/consul "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8502->8500/tcp, :::8502->8500/tcp consul3
8d0cbaf78af0 hashicorp/consul "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8501->8500/tcp, :::8501->8500/tcp consul2
2550fb171015 hashicorp/consul "docker-entrypoint.s…" 18 minutes ago Up 18 minutes 0.0.0.0:8300-8302->8300-8302/tcp, :::8300-8302->8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, :::8500->8500/tcp, 0.0.0.0:8600->8600/tcp, :::8600->8600/tcp, 8600/udp consul1
二.Consul集群+Swarm集群部署微服务实战
1.在多台服务器上部署consul
(1).linux上面部署consul集群
2.通过docker部署搭建Consul集群
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.117 --name consul1 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.117 -client=0.0.0.0 &
[root@worker_117 ~]# docker pull hashicorp/consul
Using default tag: latest
latest: Pulling from hashicorp/consul
96526aa774ef: Pull complete
...
Digest: sha256:712fe02d2f847b6a28f4834f3dd4095edb50f9eee136621575a1e837334aaf09
Status: Downloaded newer image for hashicorp/consul:latest
docker.io/hashicorp/consul:latest
[root@worker_117 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hashicorp/consul latest 48de899edccb 3 weeks ago 206MB
[root@worker_117 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.117 --name consul1 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.117 -client=0.0.0.0 &
[root@worker_117 ~]#
[root@worker_117 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d66621ff05c1 hashicorp/consul "docker-entrypoint.s…" 11 seconds ago Up 9 seconds consul1
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.140 --name consul2 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.140 -client=0.0.0.0 -join 192.168.31.117 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.81 --name consul3 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.81 -client=0.0.0.0 -join 192.168.31.117 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.241 --name consul4 -v /consul_server/data:/consul/data hashicorp/consul agent -bind=192.168.31.241 -client=0.0.0.0 -join 192.168.31.117 &
[root@worker_140 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.140 --name consul2 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.140 -client=0.0.0.0 -join 192.168.31.117 &
[1] 10150
[root@worker_140 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e54ad577bce hashicorp/consul "docker-entrypoint.s…" 11 seconds ago Up 10 seconds consul2
[root@manager_81 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.81 --name consul3 -v /consul_server/data:/consul/data hashicorp/consul agent -server -bootstrap-expect=3 -ui -bind=192.168.31.81 -client=0.0.0.0 -join 192.168.31.117 &
[root@manager_81 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbf11320c18e hashicorp/consul "docker-entrypoint.s…" 2 minutes ago Up 2 minutes consul3
[root@worker_241 ~]# nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.31.241 --name consul4 -v /consul_server/data:/consul/data hashicorp/consul agent -bind=192.168.31.241 -client=0.0.0.0 -join 192.168.31.117 &
[1] 17681
[root@worker_241 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2b0e76b4a13 hashicorp/consul "docker-entrypoint.s…" 4 seconds ago Up 1 second consul4
3.通过docker swarm搭建微服务集群
(1).准备mysql 以及 redis相关数据库
docker run --name myMysql -p 3306:3306 -v
/root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run \
-p 6379:6379 \
--name redis \
-v /docker/redis/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
--restart=always \
-d redis redis-server /etc/redis/redis.conf
docker run \
-p 6379:6379 \ docker与宿主机的端口映射
--name redis \ redis容器的名字
-v /docker/redis/redis.conf:/etc/redis/redis.conf \ 挂载redis.conf文件
-v /docker/redis/data:/data \ 挂在redis的持久化数据
--restart=always \ 设置redis容器随docker启动而自启动
-d redis redis-server /etc/redis/redis.conf \ 指定redis在docker中的配置文件路径,后
台启动redis
(2).准备程序
1).打包项目
2).对打包好的文件进行压缩
3).配置Dockerfile
微服务captcha
FROM centos:centos7
ADD /wwwroot/captcha.tar.gz /root
WORKDIR /root
RUN chmod -R 777 captcha
WORKDIR /root/captcha
ENTRYPOINT ["./captcha"]
微服务rbac
FROM centos:centos7
ADD /wwwroot/rbac.tar.gz /root
WORKDIR /root
RUN chmod -R 777 rbac
WORKDIR /root/rbac
ENTRYPOINT ["./rbac"]
ginshop
FROM centos:centos7
ADD /wwwroot/ginshop.tar.gz /root
WORKDIR /root
RUN chmod -R 777 ginshop
WORKDIR /root/ginshop
ENTRYPOINT ["./ginshop"]
4).在要部署的服务器上面build对应的镜像
docker build -f captcha_Dockerfile -t docker.io/captchamicro:latest .
docker build -f rbac_Dockerfile -t docker.io/rbacmicro:latest .
docker build -f ginshop_Dockerfile -t docker.io/ginshop:latest .
(3).配置docker-compose.yml
version: "3"
services:
redis: #配置redis,这里可以单独配置redis,把redis放到专门的一台服务器上
image: redis
restart: always
deploy:
replicas: 1 #副本数量
captcha_micro: #验证码微服务
image: captchamicro #镜像名称:通过项目打包并build成的验证码微服务镜像
restart: always
deploy:
replicas: 6 #副本数量
resources: #资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
rbac_micro: #rbac微服务
image: rbacmicro
restart: always
deploy:
replicas: 6 #副本数量
resources: #资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
depends_on:
- captcha_micro
ginshop: #客户端微服务
image: ginshop
restart: always
ports:
- 8080:8080
deploy:
replicas: 6 #副本数量
resources: #资源
limits: #配置cpu
cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
memory: 500M # 设置该容器最多只能使用 500M内存
restart_policy: #定义容器重启策略, 用于代替 restart 参数
condition: on-failure #只有当容器内部应用程序出现问题才会重启
depends_on:
- rbac_micro
(4).创建集群、部署微服务集群
#在192.168.31.129上面部署集群,命令如下:
docker swarm init --advertise-addr 192.168.31.129
[root@manager_129 ~]# docker swarm init --advertise-addr 192.168.31.129
Swarm initialized: current node (qu1ydd2t6occ8fo76rvaksidd) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-6afkz1ub7m8q37cehxmjiirs6a0r25qt1hzf0no1c0xcny55qc-d3gtv0qcsuhivozbomp4d73ha 192.168.31.129:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@manager_1291 ~]
(5).部署项目
(6).访问项目
(7).配nginx负载均衡
[上一节][Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
关联章节:[golang gin框架] 45.Gin商城项目-微服务实战之后台Rbac微服务之角色权限关联