@[TOC]
環境介紹
我的兩臺虛擬主機
主機名centos IP 192.168.137.200 為管理節點
主機名node1 IP 192.168.137.2 為普通節點
系統為Centos 7 64位
安裝Docker
分別在兩臺主機裡安裝Docker
curl -sSL https://get.daocloud.io/docker | sh
開機啟動
service docker start
systemctl enable docker
執行docker info,我目前的Server Version: 19.03.2
開啟埠
firewall-cmd --zone=public --add-port=2377/tcp --permanent &&
firewall-cmd --zone=public --add-port=7946/tcp --permanent &&
firewall-cmd --zone=public --add-port=7946/udp --permanent &&
firewall-cmd --zone=public --add-port=4789/udp --permanent &&
firewall-cmd --reload
或者直接關閉防火牆
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
2377埠是叢集管理通訊埠,只需要在管理節點開啟
7946 tcp,udp是節點間通訊使用埠,
4789 是overlay network使用的埠。
如果你需要在叢集暴露其他服務,則需要開啟相應埠,比如80
當然如果你是阿里雲主機,相應埠是在安全策略開啟,如果節點都在同一區域,則可以不開啟埠,使用內網IP。
建立叢集
在管理節點上執行
docker swarm init --advertise-addr 192.168.137.200
我們得到
[root@localhost ~]# docker swarm init --advertise-addr 192.168.137.200
Swarm initialized: current node (ykiyahkjoq3q0dn2rrnqd4ery) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
這裡已經有詳細說明了,加入一個普通節點只需要執行
docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
我們在node1執行,這裡我們通過advertise-addr指定了本機的IP
docker swarm join --advertise-addr 192.168.137.2 --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
可以看到,我們的node1已經成功加入叢集
[root@localhost ~]# docker swarm join --advertise-addr 192.168.137.2 --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
This node joined a swarm as a worker.
我們在管理節點執行docker node list也能看到該節點
[root@localhost ~]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ykiyahkjoq3q0dn2rrnqd4ery * centos Ready Active Leader 19.03.2
hr3u7u010po2w6ugtcbbil8e7 node1 Ready Active 19.03.2
這個token忘記了可以在管理節點執行docker swarm join-token worker獲得
[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-7vchqxxkk4p7vavh9h4hijydw 192.168.137.200:2377
如果要加入一個管理節點,執行docker swarm join-token manager獲得加入管理節點的token,正式部署推薦有3個以上管理節點
[root@localhost ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4ggr6t9qpoipck2ksobnphhwe0kcr47idiwaezh9uu672ueokf-9e6xiw7k9krf3abc2p3jrw9yn 192.168.137.200:2377
建立私有網路
叢集內的服務是可以自由通訊的,但目前我們有一些單個容器部署在管理節點,比如mysql,redis。需要一個私有網路提供通訊。在管理節點執行
docker network create -d overlay --attachable my-net #新增attachable引數,使得單個容器也能附加到此網路
安裝Portainer皮膚
這是一個叢集的視覺化管理皮膚,在管理節點執行
docker run -d --name portainer --restart=always -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /home/data/portainer/data:/data portainer/portainer
重啟一下docker
service docker restart
瀏覽器訪問我們的管理節點:192.168.137.200:9000 首次訪問需要設定密碼
選擇Local,連線我們本地的docker叢集
進入選擇local,至此視覺化管理皮膚安裝完畢
安裝MYSQL和Redis
docker run -d --name mysql8 \
--restart=always \
--network my-net \
-v /home/data/mysql8:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=user_center \
mysql:8.0.18 \
--sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
mysql 配置
docker exec -it mysql8 bash
mysql -uroot -p123456
alter user 'root'@'%' identified with mysql_native_password by '123456'; #更改身份驗證外掛
docker run -d --name redis \
--restart=always \
--network my-net \
-v /home/data/redis:/data \
redis:5.0.6 \
--appendonly yes
這裡我們沒有對映埠到宿主機,並加入了私有網路my-net,然後叢集內的服務可以通過
mysql8:3306 root 123456 和 redis:6379訪問到mysql和redis。現在的mysql帶有一個user_center的資料庫,如果需要建立資料庫,可以進容器執行命令。以後的教程將講到部署mysql、redis的叢集。
《PHP微服務練兵》系列索引: 部落格:《PHP 微服務練兵》系列教程
本作品採用《CC 協議》,轉載必須註明作者和本文連結