Swarm集群搭建( docker安装、docker-compose安装、portainer可视化安装、基本使用命令总结、项目集群部署案例)
docker安装、docker-compose安装、Swarm集群搭建、portainer可视化安装、和项目部署案例
四台服务器,我这里选用四台虚拟机1核2G,系统centos7,ip:192.168.10.104、 192.168.10.105、 192.168.10.106、 192.168.10.107
一、环境准备
三台服务器都执行以下命令
1、关闭防火墙或者开放相应端口
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld# 开放2377端口
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 2375 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp --dport 4789 -j ACCEPT
service iptables save firewall-cmd --zone=public --add-port=2377/tcp --permanent #TCP port 2377 用于集群管理节点间通信
firewall-cmd --zone=public --add-port=2375/tcp --permanent #docker服务开启TCP远程管理容器功能,portainer可以使用该端口管理主机上的容器
firewall-cmd --zone=public --add-port=7946/tcp --permanent #TCP 和 UDP 端口号 7946 用于节点间通信
firewall-cmd --zone=public --add-port=4789/tcp --permanent #UDP port 4789 for overlay network traffic,也就是说docker如果使用overlay网络,该端口会用于主机间网络数据包的传输
firewall-cmd --reload
2、关闭 selinux
方法一:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
方法二:
setenforce 0
vi /etc/sysconfig/selinux
#将里面的SELINUX配置为disabled SELINUX=disabled
3、更改四台主机hostname
vim /etc/hostname
node1vim /etc/hostname
node2vim /etc/hostname
node3vim /etc/hostname
node4
4、修改四台主机hosts
vim /etc/hosts192.168.10.104 node1
192.168.10.105 node2
192.168.10.106 node3
192.168.10.107 node4
5、同步时间(可选)
date #查看时间 (可选)
yum install -y ntpdate
ntpdate time.windows.com #同步最新时间
二、安装docker
三台服务器都执行以下命令
1、卸载系统之前的 docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
#删除容器镜像:
sudo rm -rf /var/lib/docker
2、安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
5、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://yuma69sd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
可以登录阿里云设置自己加速镜像,用我的也可以。
6、启动 docker & 设置 docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
7、查看版本
docker version
8、安装Docker可视化(单机选做)
# 创建外链
docker volume create portainer_data# 创建Portainer容器
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
在浏览器中输入http://ip:9000 可以看到效果
三、安装docker-compose
1、下载
#官方镜像文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose#国内镜像文件
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
如果网不好,可离线安装
(1) 访问https://github.com/docker/compose/releases,下载 docker-compose-Linux-x86_64,将docker-compose-Linux-x86_64重命名为docker-compose
(2) 将刚才下载的docker-compose文件上传到centos7的/usr/local/bin/目录下
(3) 重命名
mv /usr/local/bin/docker-compose-Linux-x86_64.64 /usr/local/bin/docker-compose
2、授权
sudo chmod +x /usr/local/bin/docker-compose
3、查看版本
docker-compose version
四、Swarm集群搭建
1、初始化管理节点(node1执行)
docker swarm init --advertise-addr ip地址
docker swarm init --advertise-addr 192.168.10.104
2、添加节点(其他节点执行)
docker swarm join 加入一个节点
#获取 创建其加入管理节点token命令
docker swarm join-token manager
#获取 创建其加入工作节点token命令
docker swarm join-token worker#在其他三个节点执行(token从上面两个命令获取)
docker swarm join --token SWMTKN-1-1gtih3nv8gfch2fdtisx0xg3wbn8yt894r1yyzb6c7hxu4ot4a-0sxc5jaogtao45wa726af9474 192.168.10.104:2377
3、在管理节点查看node信息
docker node ls
4、步骤总结
- init初始化swarm
- 把需要加入集群的节点join到对应角色(管理节点、工作节点)
5、概念总结
swarm
集群的管理和编号。docker可以初始化一个swarm集群,其他节点可加入(管理、工作者)
node
就是一个docker节点。多个节点组成了一个网络集群。(管理、工作者)
service
服务,可以在管理节点或者工作节点来运行。当你创建服务的时,你需要指定容器镜像
task
容器内的命令,细节任务
6、raft一致性协议
二主二从: 假设一个节点挂了 , 其他节点是否可用呢?
raft协议:保证大多数节点存活才可以用 至少 > 1个节点存活 集群 > 3
实验:
如果将主docker停掉一台,那么另外一台主节点也不能使用。
如果将从docker节点离开集群,集群信息会看到此节点down的状态
work节点只是为了工作,manager节点才是为了管理集群
为了达到集群可用,若三个主节点,必须 > 1台存活的主节点 才可以正常使用。
7、安装Docker可视化(集群选做)
(1) 每台主机都开启TCP远程管理端口2375,方便管理(可不做)
vim /lib/systemd/system/docker.service
#ExecStart后添加【 -H tcp://0.0.0.0:2375 】
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
#执行命令使它生效
systemctl daemon-reload
service docker restart
#查看端口是否已经监听成功
netstat -nlp |grep 2375
(2) 安装portainer
方法一:
# 创建Portainer容器 方法一
docker service create \--name portainer \--publish 9000:9000 \--replicas=1 \--constraint 'node.role == manager' \--mount type=volume,src=portainer_data,dst=/data \--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \portainer/portainer# 下载protainer官方的yml文件 方法二
curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
-o portainer-agent-stack.yml
# #通过yml文件进行部署
docker stack deploy -c portainer-agent-stack.yml portainer
方法二:
# 下载protainer官方的yml文件 方法二
curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
-o portainer-agent-stack.yml
# #通过yml文件进行部署
docker stack deploy -c portainer-agent-stack.yml portainer
portainer-agent-stack.yml
version: '3.2'services:agent:image: portainer/agent:2.11.1volumes:- /var/run/docker.sock:/var/run/docker.sock- /var/lib/docker/volumes:/var/lib/docker/volumesnetworks:- agent_networkdeploy:mode: globalplacement:constraints: [node.platform.os == linux]portainer:image: portainer/portainer-ce:2.11.1command: -H tcp://tasks.agent:9001 --tlsskipverifyports:- "9443:9443"- "9000:9000"- "8000:8000"volumes:- portainer_data:/datanetworks:- agent_networkdeploy:mode: replicatedreplicas: 1placement:constraints: [node.role == manager]networks:agent_network:driver: overlayattachable: truevolumes:portainer_data:
在浏览器中输入http://ip:9000 可以看到效果
五、基本命令总结
1、docker
示例:以nginx为例
# 查看可用版本
docker search nginx
# 获取nginx镜像
docker pull nginx
# 查看镜像
docker images
# 运行容器
docker run --name nginx-test -p 8080:80 -d nginx# --name nginx-test:容器名称。# -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。# -d nginx: 设置容器在在后台一直运行。
# 查看运行容器
docker ps
# 进入容器
docker exec -it nginx /bin/bash
# 容器:启动、重启、停止
docker start nginx-test
docker restart nginx-test
docker stop nginx-test
# 删除容器
docker rm nginx-test
# 清理掉所有处于终止状态的容器
docker container prune
编写Dockerfile文件定制镜像
构建镜像
docker build -t nginx:v3 .# 在 Dockerfile 文件的存放目录下,执行构建动作。# 以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。# 注:最后的 . 代表本次执行的上下文路径,下一节会介绍。
2、docker-compose(单机)
docker-compose:官网地址 https://docs.docker.com/compose/
主要就是对多个容器进行编排管理 主要核心就是 编写dockerfile文件构建镜像 以及 编写docker-compose.yml文件
# 部署yaml文件
docker-compose up -d
# 打包重构镜像
docker-compose up --build
常用命令
docker-compose 命令 --help 获得一个命令的帮助
docker-compose up -d nginx 构建启动nignx容器
docker-compose exec nginx bash 登录到nginx容器中
docker-compose down 此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose ps 列出项目中目前的所有容器
docker-compose restart nginx 重新启动nginx容器
docker-compose build nginx 构建镜像
docker-compose build --no-cache nginx 不带缓存的构建
docker-compose top 查看各个服务容器内运行的进程
docker-compose logs -f nginx 查看nginx的实时日志
docker-compose images 列出 Compose 文件包含的镜像
docker-compose config 验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx 以json的形式输出nginx的docker日志
docker-compose pause nginx 暂停nignx容器
docker-compose unpause nginx 恢复ningx容器
docker-compose rm nginx 删除容器(删除前必须关闭容器,执行stop)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 启动nignx容器
docker-compose restart nginx 重启项目中的nignx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
3、swarm(集群)
docker swarm: 官网地址 https://docs.docker.com/engine/swarm/
主要是对集群的管理和编排 能够轻松实现 动态扩展,动态更新服务 实现动态扩容。 swarm是在docker环境中的扩展。通过初始化swarm,让其他服务器docker节点加入到swarm集群,之后就可以管理节点node从而管理服务service。
# 用于列出 Swarm 中的所有节点及相关信息,包括哪些是管理节点、哪个是主管理节点。
docker node ls
# 管理器节点脱离 docker swarm集群:
docker swarm leave --force
# 工作节点脱离Docker Swarm集群
docker swarm leave# 创建nginx服务
docker service create -p 8080:80 --name nginx-test nginx
# 查看服务部署情况
docker service ps nginx-test
# 动态扩缩容
docker service scale nginx-test=2
# 删除服务
docker service rm nginx-test
# 集群部署yaml文件
docker stack deploy docker-compose.yml
4、参考网站
KuangStudy:https://www.kuangstudy.com/bbs/1405398545049108481
菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html
六、部署案例
1、部署wordpress博客
官网练习 compose一键部署wordpress
https://docs.docker.com/samples/wordpress/
编写docker-compose.yml
version: "3.9"services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestvolumes:- wordpress_data:/var/www/htmlports:- "627:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}wordpress_data: {}
执行安装部署命令
# 单机部署
docker-compose up -d
# 集群部署
docker stack deploy docker-compose.yml my_wordpress
2、部署jar项目
(1)编写Dockerfile
FROM java:8
EXPOSE 88
VOLUME /tmp
ADD *.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
(2)编写docker-compose.yml
version: '2'
services:#1.gatewaygateway:container_name: gatewaybuild: ./gatewayimage: gatewaymem_limit: 512Mrestart: alwaysports:- "88:88"# environment:# - spring.profiles.active=dev#2.authauth:container_name: authbuild: ./authimage: authmem_limit: 512Mrestart: alwaysports:- "8080:8080"#environment:# - spring.profiles.active=dev
执行安装部署命令
# 单机部署
docker-compose up -d
# 集群部署
docker stack deploy docker-compose.yml my_wordpress
Swarm集群搭建( docker安装、docker-compose安装、portainer可视化安装、基本使用命令总结、项目集群部署案例)相关推荐
- redis集群搭建(基于docker)
一.Redis Cluster(Redis集群)简介 redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求自动将数据进行分片,每个maste ...
- mysql集群搭建(使用docker 一主一从)
mysql集群搭建 my.cnf 配置文件配置 在 /etc/mysql/my.cnf 中 (拿一个举例) (docker中需要先进入开启的容器,docker exec -it 容器名称 /bin/b ...
- hadoop-HA集群搭建,启动DataNode,检测启动状态,执行HDFS命令,启动YARN,HDFS权限配置,C++客户端编程,常见错误
本篇博文为整理网络上Hadoop-HA搭建后出来的博客,参考网址为:http://blog.chinaunix.net/uid-196700-id-5751309.html 3. 部署 3.1. 机器 ...
- 大数据集群搭建(一)虚拟机和Centos6的安装
文章目录 1.安装虚拟机 2.安装Centos6 3. Centos系统的网络配置 3.1关于IPADDR地址的由来: 4.将搭建好的虚拟机克隆出四台 4.1给四台节点配置独立的IP地址和主机名 1. ...
- 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...
Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...
- redis伪集群安装linux,redis伪集群搭建(亲测无坑)
一.单机版安装部署,伪集群只需要操作前1-8步即可,再往下浏览找到:二.单机版-伪集群 安装部署继续搭建,如需设置密码参照第10步 1.安装基本工具 yum install -y gcc-c++ v ...
- windows2016+sqlserver2017集群搭建alwayson之域控篇
IP 用途 10.2.159.218 域控(sqlserver.com) 10.2.159.219 节点一(AAA) 10.2.159.220 节点二(BBB) 10.2.159.221 节点三(CC ...
- RocketMq单机和集群搭建教程
文章目录 1. rocketMQ单机版安装 2. rocketMQ集群方案 3. rocketMQ集群搭建 4. Dleger搭建rokcetMQ高可用集群 5. 启动rockerMQ控制台界面 6. ...
- HBase——集群搭建
HBase--集群搭建 基础:三台虚拟机(node-01,node-02,node-03)已经完成HA(高可用集群)的搭建.Hadoop4--HA集群的搭建(高可用) 每台虚拟机文件目录如下 ...
最新文章
- 微信红包随机算法实现
- 解决在Ubuntu下打开txt文件乱码的问题
- hdu 6200 mustedge mustedge mustedge(dfs序+树状数组+并查集)
- windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式
- Kendo UI开发教程:Kendo UI模板概述
- 手把手搭建一个容器化+代理网关+可视化管理环境
- mysql管理密码修改及管理权限设定(zz)
- VisualAssistX中文注释提示错误 解决办法
- 【Javascript Demo】图片瀑布流实现
- Deeping Learning for self-driving cars
- MLP手写数字识别实现
- android传感器测试工具,传感器测试工具
- 电商 竞品分析_电商竞品分析
- mysql+check+男或女_关于MYSQL 检察check约束
- Altium Designer 2021导入CAD图(DWG格式)作为PCB板框的方法
- 有关TN-C、TN-S和TN-C-S三种系统
- HBase内置过滤器的一些总结
- TeXstudio编辑中文时文字下方出现红色波浪符的问题
- [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现
- 游戏技能系统(Gameplay Ability System,简称GAS)配合GASDocumentation阅读学习笔记