1、安装 Docker CE
1)卸载老版本 Docker
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
$ sudo yum -y remove docker docker-common docker-selinux docker-engine docker-engine-selinux container-selinux docker-ce docker-ce-cli
2)安装 Docker CE
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum list docker-ce --showduplicates | sort -r
$ yum -y install docker-ce
$ docker -v
$ systemctl start docker
$ systemctl status docker
$ systemctl enable docker
2、安装 swarm
docker pull swarm
3、创建集群
注意:将 10.0.0.10 替换成真实的服务器 IP。
$ docker swarm init --advertise-addr 10.0.0.10
Swarm initialized: current node (mvm8i7yaj4qif4t2r4rix5165) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-27low1oru0v4j6txg49dwb39pup9kvfu31lusa7mxjafmwlasg-dy6jkk6qowy3vltgacjlsd6t0 10.0.0.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
4、向集群里添加节点
上一步中初始化集群命令的返回信息中有一个命令是用来添加 worker 节点的:
docker swarm join --token SWMTKN-1-27low1oru0v4j6txg49dwb39pup9kvfu31lusa7mxjafmwlasg-dy6jkk6qowy3vltgacjlsd6t0 10.0.0.10:2377
如果忘记了,可以执行查看命令,查看添加节点的命令内容。
查看加入集群 manager 管理节点的命令:
$ docker swarm join-token manager
查看加入集群 worker 节点的命令:
$ docker swarm join-token worker
注意:添加节点的命令“docker swarm join …”在节点所在的主机上运行,查看命令 “docker swarm join-token …”在 manager 节点上执行。
5、创建 overlay 网络
要使用服务发现,需要相互通信的 service 必须属于同一个 overlay 网络。默认的 inspect 网络也是 overlay 类型,但并没有提供服务发现的功能,所以要重新创建一个新的 overlay 网络。
docker network create --driver overlay services_net
6、安装 Portainer
docker service create \
--name portainer \
--network services_net \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=/mydata/data/portainer,dst=rancher \
portainer/portainer \
-H unix:///var/run/docker.sock
注意:/mydata/data/portainer 是本地映射到 portainer 数据目录的地址,需要事先创建好目录。这个地址可以根据需要来修改。
7、Nginx 配置
其中 location /api/websocket/ 部分的配置用于解决运行控制台报“timeout waiting for exec session ready”错误的问题。
server {
listen 80;
server_name dockers.mysite.com;
charset utf-8;
access_log logs/dockers.mysite.com.access.log main;
location / {
proxy_set_header Host $host;
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://portainer:9000;
}
location /api/websocket/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_pass http://portainer:9000/api/websocket/;
}
}
8、附录
1)进入 Endpoint 报“Unable to connect to the Docker environment”问题
这个可能是浏览器状态的问题,清除浏览器缓存,或者换个浏览器试试。
2)其他安装方式
可以使用 stack 方式进行安装。stack 方式会同时安装 portainer agent 和 portainer 两个服务。portainer 通过 agent 来连接 Docker 集群。