您当前的位置: 首页 >  ar

暂无认证

  • 12浏览

    0关注

    93840博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【docker的那些事】搭建Swarm集群

发布时间:2022-03-30 23:24:34 ,浏览量:12

前言

前面我们对docker compose进行了介绍和使用,然而docker compose比较适用于单机的环境下,对于多机的环境下docker也提供了对应的能力,首先我们得准备三台服务器,任意三台可以互相访问的服务器都行。

搭建swarm集群

选择一台服务器为manger。

manager node也可以作为worker node提供服务

查看ip 在这里插入图片描述 执行:

docker swarm init --advertise-addr=你的ip

此处注意控制台的打印信息 在这里插入图片描述

进入另外两个worker服务器,分别执行

docker swarm join --token SWMTKN-1-5id7urk9xw4az24taxiqhipjz5s9rbwgiblgpl6qmnu3frqt5k-1ycqd8krdfqz2m4mciunzvpow ip:2377

看看控制台打印 在这里插入图片描述 完成之后在manager查看节点信息,发现集群node正常创建

docker node ls 

在这里插入图片描述 可以将worker提升成manager,从而保证manager的高可用,当manger不可用时,设置的节点可以竞选leader

docker node promote tmtlpvxrt6dldkv8r96v5iaur #降级可以用 docker node demote tmtlpvxrt6dldkv8r96v5iaur

在这里插入图片描述 至此swarm搭建的就完成了,我们在来看看swarm的使用

swarm使用 service

创建一个service

docker service create --name my-tomcat tomcat

查看当前swarm的service

docker service ls 

在这里插入图片描述 查看service的启动日志

docker service logs my-tomcat

查看service详情

docker service inspect my-tomcat

查看my-tomcat运行在哪个node上

docker service ps my-tomcat

在这里插入图片描述 水平扩展service

docker service scale my-tomcat=3

docker service ls docker service ps my-tomcat

在这里插入图片描述 注意:这里如果某个节点的container挂掉了他会自动扩展。

删除service

docker service rm my-tomcat
多机通信overlay网络

场景:使用workpress+mysql实现个人博客搭建

传统手动方式实现
#创建mysql容器。 docker run -d --name mysql -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=examplepass -e MYSQL_DATABASE=db_wordpress mysql:5.6 #创建wordpress容器[将wordpress的80端口映射到centos的8080端口] docker run -d --name wordpress --link mysql -e WORDPRESS_DB_HOST=mysql:3306 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=examplepass -e WORDPRESS_DB_NAME=db_wordpress -p 8080:80 wordpress #查看默认bridge的网络,可以发现两个容器都在其中 docker network inspect bridge #访问测试 ip[centos]:8080
使用docker compose创建
#创建wordpress-mysql文件夹 mkdir -p /tmp/wordpress-mysql

cd /tmp/wordpress-mysql #创建docker-compose.yml文件 
version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:5.7 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql volumes: wordpress: db: 
#根据docker-compose.yml文件创建service docker-compose up -d #访问测试 ip[centos]:8080
Swarm中实现

创建一个overlay网络,用于docker swarm中多机通信

docker network create -d overlay my-overlay-net

注意:此时我们是在主节点中创建的这个网络因此我们使用docker network ls的时候此时在子节点中是看不到这个网络的。

在这里插入图片描述 在主节点创建mysql的service

#创建service docker service create --name mysql --mount type=volume,source=v1,destination=/var/lib/mysql --env MYSQL_ROOT_PASSWORD=examplepass --env MYSQL_DATABASE=db_wordpress --network my-overlay-net mysql:5.6 #查看service docker service ls docker service ps mysql

在这里插入图片描述

在这里插入图片描述 运气不是很好,mysql的container部署在了leader节点上,我们来对他进行扩容尝试。

docker service scale mysql=2

在这里我想表达的是,因为刚刚我们创建了my-overlay-net的这个网络,并且在子节点中我们是看不到这个网络,因此,如果我们刚刚创建的service不是部署在leader节点上,而是在worker节点上,那么在worker节点上,其实是可以看到这个my-overlay-net网络的,我们等待扩容结束。

在这里插入图片描述

完成之后,我们通过docker network ls发现在该机器上运行了一个service也看到了我们自定义的网络。

创建wordpress的service

docker service create --name wordpress --env WORDPRESS_DB_USER=root --env WORDPRESS_DB_PASSWORD=examplepass --env WORDPRESS_DB_HOST=mysql:3306 --env WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net wordpress

访问 ip:8080

在这里插入图片描述 此时你会发现使用 三个节点的任意一个 ip:8080都能够访问。

关注
打赏
1655258400
查看更多评论
立即登录/注册

微信扫码登录

0.2812s