本文主要是搭建(基于内网),其余知识可自行百度
一:简单来了解Docker Swarm
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker
Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。
二:准备两台服务器或者虚拟机
角色 | IP |
---|---|
master | 192.168.31.60 |
node | 192.168.31.31 |
三:安装Docker
- 系统要求:
Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。
[root@localhost /]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
-
卸载旧版本
旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
首先创建安装离线docker的目录
mkdir /opt/docker_install cd /opt/docker_install
上传3个文件: docker-19.03.5.tgz docker.service install.sh
地址:下载:https://wwr.lanzoui.com/ikeDBu6sc0b
-
安装docker
sh install.sh docker-19.03.5.tgz
出现以上内容即可安装成功。
测试docker启动容器 (用完可删除,下面不需要nginx)
docker run -it -p 8989:80 nginx
使用docker run启动容器时报错:docker: Error response from daemon: OCI runtime create failed: container_linux.go:449;container init caused “write /proc/self/attr/keycreate: permission denied”": unknown.
问题原因:由于操作系统已启用SELinux,造成“/proc/self/attr/keycreate” 没有写入权限 使用命令:getenforce查看SELinux运行模式
修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
三:安装Docker Swarm
需要注意的是:
1.集群确保都在一个网段。2个网段能够同时访问。
2.准备至少2台服务器,master节点: 192.168.31.60 node节点: 192.168.31.31
- 主节点执行命令:
主节点: 192.168.31.60 这里在master节点下创建主节点 docker swarm init \ --advertise-addr 192.168.31.60:2377 \ --listen-addr 192.168.31.60:2377
docker swarm init
会通知 Docker 来初始化一个新的 Swarm,并将自身设置为第一个管理节点。同时也会使该节点开启 Swarm 模式。
–advertise-addr 指定其他节点用来连接到当前管理节点的 IP 和端口。这一属性是可选的,当节点上有多个 IP 时,可以用于指定使用哪个IP。此外,还可以用于指定一个节点上没有的 IP,比如一个负载均衡的 IP。
--listen-addr
指定用于承载 Swarm 流量的 IP 和端口。其设置通常与 --advertise-addr 相匹配,但是当节点上有多个 IP 的时候,可用于指定具体某个 IP。并且,如果 --advertise-addr 设置了一个远程 IP 地址(如负载均衡的IP地址),该属性也是需要设置的。建议执行命令时总是使用这两个属性来指定具体 IP 和端口。
Swarm 模式下的操作默认运行于 2377 端口。虽然它是可配置的,但 2377/tcp 是用于客户端与 Swarm 进行安全(HTTPS)通信的约定俗成的端口配置
docker swarm join-token
命令用来获取添加新的工作节点和管理节点到 Swarm 的命令和 Token。
复制生成加入主节点的命令和token 在从节点执行即可成功。
在主节点查看集群节点:
docker node ls
在这个过程中,每个节点的 Docker 引擎都被切换到 Swarm 模式下。并且,Swarm 已经自动启用了 TLS 以策安全。
注意,master 的 ID 列还显示了一个星号(*),这个星号会告知用户执行docker node ls 命令所在的节点。本例中,命令是在 主节点执行的。
四:安装Portainer镜像
-
概述
Portainer
是Docker
的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。 -
汉化
集群主节点上运行Portainer
创建目录,并解压文件
mkdir -p /data/portainer/data /data/portainer/public
unzip Portainer-CN.zip -d public
下载地址:https://wwr.lanzoui.com/ikeDBu6sc0b
运行Portainer
docker run -d --restart=always --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer/data:/data -v /data/portainer/public:/public portainer/portainer:1.24.1
登录Portainer
访问地址:{主节点ip}:9000/
第一登录需要设置用户名密码
这时候DockerSwarm+ Portainer就搭建成功啦!!!!