使用時速雲的docker swarm鏡像創建docker集羣(與時速雲社區關中刀客爲同一用戶)

Google、docker.io、amazon先後在國內被牆,使得docker swarm集羣搭建按常規操作步驟已經不能正常安裝成功。後來我發現“時速雲”的鏡像廣場有許多可以直接使用的鏡像,完全可以替代docker.io的鏡像進行安裝,實在是太好了。


集羣規劃
k8s_mater:192.168.192.132
k8s_slaver1:192.168.192.141
k8s_slaver2:192.168.192.142
VMware workstation11.1.1,三臺centos 7.2.1511(core),
Docker版本:1.9.1(開始前預先在3臺虛擬機上安裝好)  用戶:root(如果是非root 用戶,後面所有docker命令前要加sudo)。
時速雲swarm鏡像:https://hub.tenxcloud.com/repo ... swarm

安裝步驟
一、    docker daemon準備
對於docker 1.9.1編碼docker配置文件,先把準備加入集羣的所有的節點的docker deamon的監聽端口修改爲0.0.0.0:2375,如下:
# vim /etc/sysconfig/docker
OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'
編輯完成,保存退出,重啓docker 引擎:
#systemctl restart docker.service
#systemctl enable docker.service
#reboot
二、確保docker daemon處於運行狀態
檢查docker daemon是否運行,以及2375端口是否正常,如下:
# ps -ef|grep docker
#telnet 0.0.0.0 2375
三、創建swarm鏡像
#docker pull index.tenxcloud.com/docker_library/swarm

四、時速雲的其他重要鏡像
創建mongodb鏡像:
#docker pull index.tenxcloud.com/tenxcloud/mongodb

創建redis鏡像:
#docker pull index.tenxcloud.com/docker_library/redis

創建mysql鏡像:
#docker pull index.tenxcloud.com/tenxcloud/mysql

創建tomcat鏡像:
#docker pull index.tenxcloud.com/tenxcloud/tomcat

創建nginx鏡像:
#docker pull index.tenxcloud.com/tutum/nginx

啓動一個redis容器:
#docker run -d -P -m 1g index.tenxcloud.com/docker_library/redis
#docker ps|grep redis

啓動一個mysql容器:
#docker run –name mysql -d=false -P index.tenxcloud.com/tenxcloud/mysql

啓動一個mongodb容器並進行shell:
#docker run -i -t --entrypoint /bin/bash index.tenxcloud.com/tenxcloud/mongodb

啓動mongodb 服務:
#/usr/bin/mongod --dbpath /data/db --port 27017 --logpath /data/db/log --logappend &
使用console登錄mongodb命令行:
/usr/bin/mongo db

五、創建swarm集羣ID
在任何一個節點上面執行swarm create命令來創建一個集羣標誌。這條命令執行完畢之後,swarm會前往Docker Hub上內建的發現服務中獲取一個全球唯一的token,用以唯一的標識swarm管理的Docker集羣。
#docker run index.tenxcloud.com/docker_library/swarm create
正常會顯示一個UUID的token,要記錄下來,後面要用到。
六、在每個cluster成員機器上運行以下命令,每個docker daemon加入集羣:
# docker run -d index.tenxcloud.com/docker_library/swarm join --addr=[custer member ID]:2375 token://[cluster Token ID]

如下所示:
#docker run -d index.tenxcloud.com/docker_library/swarm join --addr=192.168.192.132:2375 token://348358591f2ab8b5ab8d79e0daca4f09
#docker run -d index.tenxcloud.com/docker_library/swarm join --addr=192.168.192.141:2375 token://348358591f2ab8b5ab8d79e0daca4f09
#docker run -d index.tenxcloud.com/docker_library/swarm join --addr=192.168.192.142:2375 token://348358591f2ab8b5ab8d79e0daca4f09
七、在所有3個集羣成員上,啓動swarm集羣管理:
#docker run -d -p 2376:2375 index.tenxcloud.com/docker_library/swarm manage token://348358591f2ab8b5ab8d79e0daca4f09

需要注意的是:在這條命令中,第一:要以daemon的形式運行swarm;第二:端口映射:2376可以更換成任何一個本機沒有佔用的端口,一定不能是2375,否則就會出問題。
這樣在任何一臺機器上,可以使用swarm list命令來查詢集羣狀態。
至此,swarm集羣已經安裝完成,每次開機時,要執行以上swarm manage命令來啓動集羣。
八、在任何一臺機器上,即可列出集羣中的節點:
#docker run --rm index.tenxcloud.com/docker_library/swarm list token://1b108ababc6b4c0fa73b6ecf1d52d9a4
以下命令可以顯示出所有集羣節點的狀態:
#docker -H 0.0.0.0:2376 info

 
還可以用以下命令
#docker -H tcp:// 0.0.0.0:2376 run
#docker -H tcp:// 0.0.0.0:2376 ps
#docker -H tcp:// 0.0.0.0:2376 logs
九、通過配置文件文件啓動集羣(所有節點)
在所有節點上執行以下命令編輯集羣配置文件:
#echo 192.168.192.132:2375 >> cluster
#echo 192.168.192.141:2375 >> cluster
#echo 192.168.192.142:2375 >> cluster
在所有節點上想要執行swarm manage的節點上執行以下命令swarm manage命令完成啓動:
#docker run -d -p 2376:2375 -v $(pwd)/cluster:/root/cluster index.tenxcloud.com/docker_library/swarm manage  file:///root/cluster

任一節點上執行以下命令列出所有節點:
#docker run --rm -v $(pwd)/cluster:/root/cluster index.tenxcloud.com/docker_library/swarm list file:///root/cluster
#docker -H 0.0.0.0:2376 info(只能在啓動了swarm manage的節點上執行)
十、docker集羣操作
先在一臺機器上啓動一個容器
#docker -H tcp://192.168.192.132:2376 run --name mongo_001 -d -e constraint:label==001 index.tenxcloud.com/tenxcloud/mongodb

#docker -H tcp://0.0.0.0:2376 run  index.tenxcloud.com/tenxcloud/mongodb

#docker -H tcp://0.0.0.0:2376 pull index.tenxcloud.com/tutum/nginx

#docker -H tcp://0.0.0.0:2376 run -d -p 8888:80 --shm-size 100 -i -t --entrypoint /bin/bash index.tenxcloud.com/tutum/nginx

#docker -H tcp://0.0.0.0:2376 stop ab17a72eb40

#docker -H 0.0.0.0:2376 images

#docker -H 0.0.0.0:2376 ps

在host本地運行Nginx:
docker run --name nginx -p 80:80 -ti --entrypoint /bin/bash index.tenxcloud.com/tutum/nginx
docker run -d -p 80:80 index.tenxcloud.com/tutum/nginx (一旦run成功,就會創建一個新的容器)
curl http://localhost/
docker stop nginx
docker ps -a|more
docker start focused_morse
docker attach --sig-proxy=false nginx8(docker ps中查詢到的NAMES)

1.在集羣上運行nginx
創建並運行一個nginx容器,並打個終端連接上去:
docker -H 0.0.0.0:2376 run --name nginx -p 80:80 --shm-size 100 -ti --entrypoint /bin/bash index.tenxcloud.com/tutum/nginx (會導致nginx不能自動啓動)
以daemon方式運行一個nginx容器,先運行shell
  docker -H 0.0.0.0:2376 run --name nginx -d -p 80:80 --shm-size 100 index.tenxcloud.com/tutum/nginx
運行起來後,可以根據容器名稱“nginx“ attch上去。
刪除集羣上停止的容器:docker -H 0.0.0.0:2376 rm $(docker -H 0.0.0.0:2376 ps -a -q)
綁定到一個ngix的shell:docker -H 0.0.0.0:2376 attach nginx
查到容器的IP、gateway:docker -H 0.0.0.0:2376 inspect nginx
通過容器的gateway:curl http://192.168.81.3:80/
docker -H tcp://0.0.0.0:2376 stop nginx_lin
docker -H tcp://0.0.0.0:2376 start nginx_lin

2.在集羣上運行mongo db
首先創建mongodb並進入console方式
#docker -H 0.0.0.0:2376 run --name mongodb  -p 27017:27017 -p 28017:28017 --shm-size 100 -i --entrypoint /bin/bash index.tenxcloud.com/tenxcloud/mongodb
啓動mongodb:
# /usr/bin/mongod --dbpath /data/db --port 27017 –port 28017 --logpath /data/db/log --logappend &
#/usr/bin/mongo db
#exit

或以後臺方式啓動:
#docker -H 0.0.0.0:2376 run --name mongodb  -d -p 27017:27017 -p 28017:28017 --shm-size 100 -e MONGODB_PASS="123456"
http://192.168.192.141:28017/
 
index.tenxcloud.com/tenxcloud/mongodb  27017是服務口,28017是管理口   mongo admin -u admin -p 123456

#docker -H 0.0.0.0:2376 attach mongo_001

3.在集羣啓動一個redis容器
創建並進入console模式(不會自動啓動):
docker -H 0.0.0.0:2376 run --name redis  --shm-size 100 -ti --entrypoint /bin/bash index.tenxcloud.com/docker_library/redis

創建並直接以後臺模式啓動redis容器:
docker -H 0.0.0.0:2376 run --name redis -d --shm-size 100 index.tenxcloud.com/docker_library/redis
docker -H 0.0.0.0:2376 logs redis
docker -H 0.0.0.0:2376 attach redis
docker -H 0.0.0.0:2376 inspect redis

telnet 192.168.192.132 6379 登錄上去可使用命令行直接操作redis
quit  退出redis命令行

4.在集羣啓動一個mysql容器
首先以創建並進入console模式:
docker -H 0.0.0.0:2376 run --name mysql -p 3306:3306 --shm-size 100 -ti --entrypoint /bin/bash index.tenxcloud.com/tutum/mysql

設置MYMYSQL爲開機啓動:
方法一:在/etc/rc.d/rc.local文件末尾添加如下一行
/usr/sbin/mysql start
方法二:在mysql5目錄下找到support-files目錄將其中的mysql.server複製修改爲/etc/init.d/mysqld
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
chkconfig --level 35 mysqld on

登錄(無密碼):
mysql -u root -p

創建新用戶:
CREATE USER 'admin' IDENTIFIED BY '123456';

給用戶授權:
GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

修改root默認密碼:
mysqladmin password 123456

然後再次啓動容器時,會自動啓動mysql。
以下是創建以後臺方式啓動的mysql容器:
docker -H 0.0.0.0:2376 run --name mysql -d -p 3306:3306 --shm-size 100 index.tenxcloud.com/tutum/mysql
docker -H 0.0.0.0:2376 attach mysql
docker -H 0.0.0.0:2376 inspect mysql|more

mysql -uadmin –p123456 -h<host> -P<port>


5.在集羣啓動一個tomcat容器
docker -H 0.0.0.0:2376 run --name tomcat -d -p 8080:8080 --shm-size 100 index.tenxcloud.com/tenxcloud/tomcat
docker -H 0.0.0.0:2376 logs tomcat
docker -H 0.0.0.0:2376 attach tomcat
docker -H 0.0.0.0:2376 inspect tomcat
curl http://192.168.46.4:8080/
curl http://192.168.46.4:8080/
http://192.168.192.132:8081/

You can now login to you admin console to configure your tomcat server:
http://127.0.0.1:8080/manager/htmlhttp://127.0.0.1:8080/host-manager/html Setting a specific password for the admin account
If you want to use a preset password instead of a random generated one, you can set the environment variable TOMCAT_PASS to your specific password when running the container:

6.在集羣啓動一個zookeeper容器
docker -H 192.168.192.132:2376 pull index.tenxcloud.com/sdvdxl/zookeeper
docker -H 192.168.192.132:2376 tag index.tenxcloud.com/sdvdxl/zookeeper zookeeper
docker -H 192.168.192.132:2376 run --name=zookeeper -d -e MYID=1 -e SERVERS=k8s_master,k8s_slave1,k8s_slave2 --net=host --restart=always --shm-size 100 zookeeper
docker -H 192.168.192.132:2376 run --name=zookeeper -d -p 2181:2181 -e MYID=1 --net=host --restart=always --shm-size 100 zookeeper
docker -H 0.0.0.0:2376 logs zookeeper
docker -H 0.0.0.0:2376 inspect zookeeper

十一、關閉所有成員的防火牆
#iptables –F

十二、再次啓動集羣
注意:docker run運行成功後,就會永久創建一個容器實例,包括swarm manage容器。再次啓動時,不能再用docker run,否則會產生過多的容器。
swarm manage容器可以只有一個,只要在集羣任何一個節點訪問swarm manage容器所在節點的IP就可以,如下:
#docker –H 192.168.192.132 info

只需按以下方式:
#docker ps –a 列出已經創建的容器及狀態
#docker start [swarm manage容器名稱] :啓動swarm manage容器
#docker -H 0.0.0.0:2376 ps –a 列出集羣範圍所有的容器
#docker –H 192.168.192.132 ps –a 列出某個節點上的所有容器
#docker -H 0.0.0.0:2376 start [容器名稱] :啓動集羣上的某個容器
#docker -H 0.0.0.0:2376 stop [容器名稱] :停止集羣上的某個容器
# docker -H 0.0.0.0:2376 stop $(docker ps -a -q) :停止集羣範圍所有容器
# docker -H 0.0.0.0:2376 rm $(docker ps -a -q) :刪除集羣範圍所有已經停止的容器

FAQ
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
#rm /etc/docker/key.json
#rm /var/run/docker.pid

還有一種原因可能引起,同時配置了/etc/default/docker,/etc/sysconfig/docker
OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'
Docker1.9.1一定要使用/etc/sysconfig/docker,刪除/etc/default/docker
明明集羣中是有3個節點的,但是info命令只顯示了2個節點。爲什麼會出現這個情況呢?
檢查可能其中有一臺機器沒有設置上面的docker daemon監聽0.0.0.0:2375這個端口,所以Swarm沒辦法把這個節點加入集羣中來。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章