Docker swarm集群应用(二)

一、在指定网络中发布服务

1、创建Overlay网络

docker network create -d overlay tomcat-net

docker network ls

查看tomcat-net的详细信息

docker network inspect tomcat-net

说明:

创建名为tomcat-net的覆盖网络(Overlay Netowork),处于该网络下的docker容器,即使宿主机不一样,也能相互访问

2、使用新建网络创建服务

docker service create --name tomcat --network tomcat-net -p 8080:8080 --replicas 2 192.168.10.16/library/tomcat:9.0

--network tomcat-net   将服务连接到名为 tomcat-net 的 Docker 网络

查看服务容器运行所在的节点

docker service ls

docker service ps tomcat

在服务容器运行的节点上修改容器网页内容

服务1:

docker ps | grep tomcat

docker exec -it 9b4ab15e3a96 bash

mkdir /usr/local/tomcat/webapps/ROOT

echo "tomcat-test-page" > /usr/local/tomcat/webapps/ROOT/index.html

服务2:

docker ps | grep tomcat

docker exec -it 61a510949770 bash

mkdir /usr/local/tomcat/webapps/ROOT

echo "tomcat-test-page" > /usr/local/tomcat/webapps/ROOT/index.html

使用浏览器访问

192.168.10.11:8080

3、访问网络模式

服务网络模式一共有两种:Ingress和Host,如果不指定,则默认的是Ingress;Ingress模式下,到达Swarm任何节点的8080端口的流量,都会映射到任何服务副本的内部8080端口,就算该节点上没有tomcat服务副本也会映射。

docker service create --name tomcat --network tomcat-net -p 8080:8080 --replicas 2 192.168.10.16/library/tomcat:9.0

上面已经创建服务

查服务所在节点

docker service ps tomcat

docker ps | grep tomcat

docker ps | grep tomcat

各节点上都会开启8080端口

netstat -anpt | grep 8080

删除tomcat服务

docker service rm tomcat

Host模式下,仅在运行有容器副本的机器上开放端口

docker service create --name tomcat --network tomcat-net -p published=8080,target=8080,mode=host --replicas 3 192.168.10.16/library/tomcat:9.0

-p published=8080,target=8080,mode=host

published=8080:将宿主机的 8080 端口映射到服务。

target=8080:服务内部的容器监听 8080 端口。

mode=host:使用主机模式(host mode),即容器的端口直接绑定到宿主机的端口。

docker service ps tomcat

查看端口映射情况

netstat -anpt | grep 8080

服务容器所在节点才会开放映射端口

删除tomcat服务

docker service rm tomcat

二、服务数据持久化存储

1、本地存储

(1)在集群所有主机上创建本地目录(集群所有主机)

mkdir -p /data/nginxdata

(2)发布服务时挂载本地目录到容器中

docker service create --name nginx-svc --replicas 3 --mount "type=bind,source=/data/nginxdata,target=/usr/share/nginx/html" -p 80:80 192.168.10.16/library/nginx:v1

查看服务状态

docker service ls

查看容器所在节点

docker service ps nginx-svc

向容器所在服务器创建网页内容

echo "manager2 web" > /data/nginxdata/index.html

echo "manager3 web" > /data/nginxdata/index.html

echo "worker2 web" > /data/nginxdata/index.html

(3)验证是否使用本地目录

curl 192.168.10.11

存在数据一致性问题

删除nginx-svc服务

docker service rm nginx-svc

2、网络存储

网络存储卷可以实现跨docker宿主机的数据共享,数据持久保存到网络存储卷中,在创建service时添加卷的挂载参数,网络存储卷可以帮助自动挂载,但需要集群节点都创建该网络存储卷

(1)部署NFS存储(harbor)

本案例以NFS提供远程存储为例

在192.168.10.16服务器上部署NFS服务,共享目录为docker swarm集群主机使用。

mkdir /opt/docker_volume

yum -y install nfs-utils

vim /etc/exports

添加:

/opt/docker_volume      *(rw,sync,no_root_squash)

systemctl start nfs-server

systemctl enable nfs-server

显示 NFS 服务器上共享的目录信息

showmount -e

(2)为集群所有主机安装nfs-utils软件(集群所有主机)

yum -y install nfs-utils

showmount -e 192.168.10.16

(3)创建一个基于 NFS(网络文件系统) 的 Docker 卷(集群所有主机)

docker volume create --driver local --opt type=nfs --opt o=addr=192.168.10.16,rw --opt device=:/opt/docker_volume nginx_volume

docker volume create    创建一个新的 Docker 卷

--driver local                 指定卷的驱动为 local(本地驱动),但通过选项配置为使用 NFS

--opt type=nfs              指定卷的类型为 nfs,即使用 NFS 协议挂载远程目录

--opt o=addr=192.168.10.16,rw

addr=192.168.10.16:指定 NFS 服务器的 IP 地址为 192.168.10.16

rw:以读写模式挂载 NFS 目录

--opt device=:/opt/docker_volume     指定 NFS 服务器上共享的目录路径为 /opt/docker_volume

nginx_volume                为创建的卷指定名称为 nginx_volume

docker volume ls

(4)发布服务

docker service create --name nginx-svc --replicas 3 -p 80:80 --mount "type=volume,source=nginx_volume,target=/usr/share/nginx/html" 192.168.10.16/library/nginx:v1

--mount "type=volume,source=nginx_volume,target=/usr/share/nginx/html"

type=volume:指定挂载类型为 Docker 卷

source=nginx_volume:使用名为 nginx_volume 的 Docker 卷

target=/usr/share/nginx/html:将卷挂载到容器内的 /usr/share/nginx/html 目录(Nginx 默认的静态文件目录)

(5)验证

docker service ls

docker service ps nginx-svc

到服务容器运行所在节点查看挂载情况

df -hT | grep nfs

在nfs服务器(harbor)上传网页

echo "nfs test" > /opt/docker_volume/index.html

删除nginx-svc服务

docker service rm nginx-svc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值