前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker中Web集群迁移及共享数据

Docker中Web集群迁移及共享数据

作者头像
全栈程序员站长
发布2022-06-29 15:52:56
3320
发布2022-06-29 15:52:56
举报
文章被收录于专栏:全栈程序员必看

实验题

在这里插入图片描述
在这里插入图片描述

实验环境

ip

服务

192.168.2.66

dockerA

192.178.2.67

dockerB

192.168.2.11

NFS&Docker Registry

实验步骤

DockerA中搭建web集群 创建热数据持久化目录

代码语言:javascript
复制
[root@localhost ~]# mkdir hy
[root@localhost ~]# echo "hy.com" > hy/index.html
[root@localhost ~]# 

运行集群容器

代码语言:javascript
复制
[root@localhost ~]# docker run -d -p 80 --name hy --volume /root/hy/:/usr/local/apache2/htdocs httpd:latest
0e5c87513337406d79c7afe8d549ada86f5c9f46bf5922ed6daa77a4d2a73093
[root@localhost ~]# docker run -d -p 80 --name hy1 --volume /root/hy/:/usr/local/apache2/htdocs httpd:latest
73128e4462630b4507ba0349b401baf5524c1721729c5f0bb51b5ae51cdc6a56
[root@localhost ~]# docker run -d -p 80 --name hy2 --volume /root/hy/:/usr/local/apache2/htdocs httpd:latest
80229b37611a7c7bda6be90ce0a0c200f5bcee9427e2d53075ed900f8377d374

查看三台apache容器的80端口在物理机的映射端口

代码语言:javascript
复制
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                   NAMES
80229b37611a        httpd:latest        "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:32781->80/tcp   hy2
73128e446263        httpd:latest        "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:32780->80/tcp   hy1
0e5c87513337        httpd:latest        "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:32779->80/tcp   hy

用物理机ip访问这些端口,来验证物理机的cyj目录是否被每台容器的htdocs挂载使用

代码语言:javascript
复制
[root@localhost ~]# curl 192.168.2.66:32781
hy.com
[root@localhost ~]# curl 192.168.2.66:32780
hy.com
[root@localhost ~]# curl 192.168.2.66:32779
hy.com

迁移DockerA中的集群以及热数据到DockerB 设置私库 迁移时需要用到Registry私有仓库,所以需要现在NFS服务器中pull私库镜像

代码语言:javascript
复制
[root@localhost yum.repos.d]# docker pull registry:2
2: Pulling from library/registry
486039affc0a: Pull complete 
ba51a3b098e6: Pull complete 
8bb4c43d6c8e: Pull complete 
6f5f453e5f2d: Pull complete 
42bc10b72f42: Pull complete 
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:2
docker.io/library/registry:2

将私库在后台运行,并将5000端口映射到物理机1.13的5000端口

代码语言:javascript
复制
[root@localhost yum.repos.d]# docker run -itd -p 5000:5000 --restart always --volume /opt/data/registry/:/var/lib/registry registry:2
2d790d31bc2132b1ef38af5926d9bb81b139b54fd97bdf36010b1cf2be2af708

在三台服务器中指定私库地址

NFS&Registry(192.168.2.11)

代码语言:javascript
复制
[root@localhost yum.repos.d]# vim /usr/lib/systemd/system/docker.service
[root@localhost yum.repos.d]# systemctl daemon-reload 
[root@localhost yum.repos.d]# systemctl restart docker
#修改内容
14 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.2.11:5000

DockerA

代码语言:javascript
复制
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker

#修改内容
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.2.11:5000

DockerB

代码语言:javascript
复制
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker

#修改内容
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.2.11:5000

构建带有热数据的镜像 在DockerA中编写Dockerfile

代码语言:javascript
复制
[root@localhost ~]# vim Dockerfile 

FROM busybox:latest
ADD hy /usr/local/apache2/htdocs
VOLUME /usr/local/apache2/htdocs

构建镜像

代码语言:javascript
复制
[root@localhost ~]# docker build -t httpd_cluster .
Sending build context to Docker daemon  84.11MBB
Step 1/3 : FROM busybox:latest
 ---> be5888e67be6
Step 2/3 : ADD hy /usr/local/apache2/htdocs
 ---> 17931e0e9e6f
Step 3/3 : VOLUME /usr/local/apache2/htdocs
 ---> Running in 6b278ed07c5c
Removing intermediate container 6b278ed07c5c
 ---> 8b0d6a73ca37
Successfully built 8b0d6a73ca37
Successfully tagged httpd_cluster:latest

上传镜像到私库中

代码语言:javascript
复制
[root@localhost ~]# docker tag httpd_cluster 192.168.2.11:5000/httpd_cluster
[root@localhost ~]# docker push 192.168.2.11:5000/httpd_cluster
The push refers to repository [192.168.2.11:5000/httpd_cluster]
9e9bf87f3138: Pushed 
5b0d2d635df8: Pushed 
latest: digest: sha256:b22a53ad7941ebfa6ef39a77cd29fa49a23d0e150caa774d21c6da6215a2c811 size: 734
[root@localhost ~]# 

验证是否上传成功

代码语言:javascript
复制
[root@localhost ~]# curl 192.168.2.11:5000/v2/_catalog
{"repositories":["httpd_cluster"]}

DockerB下载镜像

代码语言:javascript
复制
[root@localhost ~]# docker pull 192.168.2.11:5000/httpd_cluster
Using default tag: latest
latest: Pulling from httpd_cluster
e2334dd9fee4: Already exists 
e4588d532789: Pull complete 
Digest: sha256:b22a53ad7941ebfa6ef39a77cd29fa49a23d0e150caa774d21c6da6215a2c811
Status: Downloaded newer image for 192.168.2.11:5000/httpd_cluster:latest
192.168.2.11:5000/httpd_cluster:latest

DockerB构建与DockerA访问数据相同的集群 更改标签方便使用

代码语言:javascript
复制
[root@localhost ~]# docker tag 192.168.2.11:5000/httpd_cluster:latest  httpd:cluster
[root@localhost ~]# docker rmi 192.168.2.11:5000/httpd_cluster:latest 
Untagged: 192.168.2.11:5000/httpd_cluster:latest
Untagged: 192.168.2.11:5000/httpd_cluster@sha256:b22a53ad7941ebfa6ef39a77cd29fa49a23d0e150caa774d21c6da6215a2c811
[root@localhost ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
httpd                     cluster             8b0d6a73ca37        3 minutes ago       1.22MB

使用httpd:cluster创建容器,但不运行,作为volume使用

代码语言:javascript
复制
[root@localhost ~]# docker create --name dockerweb httpd:latest
eac6c6f2ba6f99fee15d5cb34ca8a06b01689cf31a01b7eb55dd5e66b3f86dd5

使用dockerbweb运行容器,搭建集群

代码语言:javascript
复制
[root@localhost ~]# docker run -d -p 80 --name hy3 --volumes-from dockerweb httpd:cluster
3c5ae82cbabd82606e1eca3eb1117cb76a4c7d7f4cf4d890261eefbe64a8a872
[root@localhost ~]# docker run -d -p 80 --name hy4 --volumes-from dockerweb httpd:cluster
b94793a48fe57af7303fb5872ccdff9538b7ea2641cd95ed4356949f2fe4a9ae
[root@localhost ~]# docker run -d -p 80 --name hy5 --volumes-from dockerweb httpd:cluster
f258c7effef67e87888be7cac611c045dadca804e4ee76ea87e4b70951f11363

查看三个web容器在主机物理机2.67映射的端口

代码语言:javascript
复制
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
793f18ba350b        httpd               "httpd-foreground"       4 seconds ago       Up 3 seconds        0.0.0.0:32771->80/tcp    hy5
c447ef63e115        httpd               "httpd-foreground"       10 seconds ago      Up 9 seconds        0.0.0.0:32770->80/tcp    hy4
38b7ade3308c        httpd               "httpd-foreground"       19 seconds ago      Up 17 seconds       0.0.0.0:32769->80/tcp    hy3

访问验证与DockerA主机集群中的页面是否一致

代码语言:javascript
复制
[root@localhost ~]# curl 192.168.2.67:32769
hy.com
[root@localhost ~]# curl 192.168.2.67:32770
hy.com
[root@localhost ~]# curl 192.168.2.67:32771
hy.com

DockerA新建集群,使用NFS共享数据 NFS&Registry

安装NFS

代码语言:javascript
复制
[root@localhost ~]# yum -y install nfs-utils rpcbind

创建共享目录

代码语言:javascript
复制
[root@localhost ~]# mkdir /dockera

将目录共享到所有网段

代码语言:javascript
复制
[root@localhost ~]# vim /etc/exports
/dockera *(rw,no_root_squash,sync)
[root@localhost ~]# exportfs -r

启动nfs服务

代码语言:javascript
复制
[root@localhost ~]# systemctl start rpcbind nfs-server
[root@localhost ~]# systemctl enable rpcbind nfs-server

清空防火墙策略

代码语言:javascript
复制
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables-save

DockerA

查看是否可以获取到NFS的共享目录

代码语言:javascript
复制
[root@localhost ~]# showmount -e 192.168.2.11
Export list for 192.168.2.11:
/dockera *

使用docker创建驱动类型为nfs的磁盘,并指定nfs的ip和目录

代码语言:javascript
复制
[root@localhost ~]# docker volume create --driver local --opt type=nfs --opt o=addr=192.168.2.11,rw --opt device=:/dockera --name dockera-nfs
dockera-nfs

查看创建好的volume

代码语言:javascript
复制
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME

local               volume-nfs

使用dockera-nfs卷来启动httpd镜像的web集群

代码语言:javascript
复制
[root@localhost ~]# docker run -d -p 80 --name hy6 --volume dockera-nfs:/usr/local/apache2/htdocs httpd
1ee478d8464ba8eb631d8fc3b205fca2c2d70b8f2f6f428130004b3b6a44674f
[root@localhost ~]# docker run -d -p 80 --name hy7 --volume dockera-nfs:/usr/local/apache2/htdocs httpd
eb0025df59b3e2e77018ffea130f19d25ea680af6929d5236f292587a682d855
[root@localhost ~]# docker run -d -p 80 --name hy8 --volume dockera-nfs:/usr/local/apache2/htdocs httpd
b93d70e8819dc8f4964d76e0278d25cf29c13073e293aec83be32f4ff739fe35

查看三个集群容器在主机的映射端口

代码语言:javascript
复制
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
b93d70e8819d        httpd               "httpd-foreground"   26 seconds ago      Up 24 seconds       0.0.0.0:1027->80/tcp   hy8
eb0025df59b3        httpd               "httpd-foreground"   32 seconds ago      Up 31 seconds       0.0.0.0:1026->80/tcp   hy7
1ee478d8464b        httpd               "httpd-foreground"   40 seconds ago      Up 38 seconds       0.0.0.0:1025->80/tcp   hy6

访问这几个映射端口,查看得到的页面内容

代码语言:javascript
复制
[root@localhost ~]# curl 192.168.2.66:1025
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# curl 192.168.2.66:1026
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# curl 192.168.2.66:1027
<html><body><h1>It works!</h1></body></html>

发现都是It works!这是因为我们的NFS共享目录中的内容是空的 NFS&Registry

代码语言:javascript
复制
[root@localhost yum.repos.d]# echo "2020ComeOnWH" > /dockera/index.html 

再次访问验证

代码语言:javascript
复制
[root@localhost yum.repos.d]# curl 192.168.2.66:1025
2020ComeOnWH
[root@localhost yum.repos.d]# curl 192.168.2.66:1026
2020ComeOnWH
[root@localhost yum.repos.d]# curl 192.168.2.66:1027
2020ComeOnWH

成功!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101958.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验题
  • 实验环境
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档