天天看點

Docker系列一:CentOS7安裝Docker Swarm 叢集及常用操作指令

一、安裝VMware

版本:VMware-workstation-full-12.0.0-2985596

二、安裝CentOS

版本:CentOS-7-x86_64-Everything-1611

安裝四個CentOS,1個manager結點,3個worker結點。

各個CentOS伺服器資訊如下:

VMware安裝CentOS伺服器資訊:

manager     zy   192.168.152.130      (manager節點)

worker1 zy 192.168.152.131

worker2 zy       192.168.152.132

worker3 zy 192.168.152.133

通過ping  ip位址,各個伺服器之間可以互通

三、每台CentOS伺服器安裝Docker

1.    用root使用者登入,確定有root權限

2.    保證yum包是最新的:sudo yum update

3.    通過yum指令安裝:

yum install docker   或   sudo yum install docker-engine

docker version

4.    啟動docker服務

安裝完成後,使用下面的指令來啟動 docker 服務,并将其設定為開機啟動:

1)    [[email protected] ~]# service docker start

2)    [[email protected] ~]# chkconfig docker on

5.    安裝Docker-compose:利用pip方式進行安裝

1)     安裝pip

雖然很簡單,還是有URL确認,x權限設定等需要做,如果使用pip進行安裝雖然看似繞遠,實質上也是繞遠,安裝來一看吧。CentOS上需要先行安裝yum的一個額外的包,這個包裡面才有python-pip,預設的沒有。

[[email protected]

localhost ~

]# yum -y install epel-release

[[email protected]

localhost ~

]# yum -y install python-pip

2)    确認版本

[[email protected]

localhost ~

]# pip --version

pip 7.1.0 from/usr/lib/python2.7/site-packages

(python 2.7)

3)     安裝docker-compose

[[email protected]

localhost~

]# pip install docker-compose

6.   安裝Docker-machine:參考https://docs.docker.com/machine/install-machine/

curl-L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m`>/usr/local/bin/docker-machine && \

  chmod +x /usr/local/bin/docker-machine      
或者curl -L https://github.com/docker/machine/releases/download/v0.8.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \      
chmod +x /usr/local/bin/docker-machine(可安裝)      

檢視版本:   

docker-mahine version

7.    解除安裝docker

開啟docker deamon: $ sudo servicedocker start

設定開機自啟:sudo chkconfig docker on

解除安裝安裝包 :列出安裝過的包

yum list installed | grep docker

删除安裝包:$ sudo yum -y remove docker-engine.x86_64      
删除鏡像/容器等:$ rm -rf /var/lib/docker      

8.    判斷是否安裝了openssh-server

參考:https://my.oschina.net/laiconglin/blog/675317

1)     dpkg  -l | grep openssh-server

2)     安裝openssh-server:yum install -y openssl openssh-server      
3)     修改配置檔案:vim /etc/ssh/sshd_config      
4)     啟動ssh服務      

          systemctl start sshd.service

          systemctl enable sshd.service(開機自啟)

5)     設定權限      

$ cd ~

$ chmod 700 .ssh                                                                                               

$ chmod 600.ssh/*                                                                                             

$ ls -la .ssh

四、swarm叢集建立

參考:http://www.linuxidc.com/Linux/2017-03/142151.htm

1.  初始化swarm,在manager(或leader)機器上執行swarm init指令(添加運作截圖)

l  manager的IP位址:192.168.152.130

       方法一:$ sudo docker swarminit(不可行)

方法二:$docker swarm init --advertise-addr 

192.168.152.130

運作得到以下内容:

Swarm initialized: current node (n3n78v9dzqlntgrzktwteb8p6) is now amanager.

To add a worker to this swarm, run the following command:

docker swarm join \

    --tokenSWMTKN-1-0038kiadp6vm1xrhxjgnao61a04s1m2st0g4p003xv34qn5g27-6ernode3urc6fcwrsamnkhdty\

192.168.152.130:2377

在這個指令的傳回值部分,給出了其他機器作為work加入這個網絡的指令(藍色部分),隻要拷貝這個指令在其他機器上執行就行了。 

在swarm init的指令裡有很多參數,你可以通過--advertise-addr  或者--listen-addr更改通告位址端口和偵聽位址端口。預設是0.0.0.0:2377, 建議不要更改,我使用版本1.13.1更改之後,就有BUG。

2.将其他機器加入swarm叢集

l  其他機器的IP位址:192.168.152.131,192.168.152.132,192.168.152.133

在以上機器上運作以下指令:

$docker swarm join \

    --tokenSWMTKN-1-0038kiadp6vm1xrhxjgnao61a04s1m2st0g4p003xv34qn5g27-6ernode3urc6fcwrsamnkhdty\

    192.168.152.130:2377

This node joined a swarm as a worker.

遇到問題:

(1)”Cannotconnect to the Docker daemon. Is the docker daemon running on this host?”

重新啟動docker

(2)”Errorresponse from daemon: Timeout was reached before node was joined. The attemptto join the swarm will continue in the background. Use the "dockerinfo" command to see the current swarm status of your node.”

将manager和worker節點的防火牆關閉在執行join操作,關閉指令:iptables -F

(3)”Errorresponse from daemon: This node is already part of a swarm. Use "dockerswarm leave" to leave this swarm and join another one.”

執行指令:docker swarm leave

3.manage檢視swarm結點

$ docker node ls

4.以上叢集的連接配接建立好之後,通過docker info檢查:

       $ sudo docker info 

Swarm: active

 NodeID: n3n78v9dzqlntgrzktwteb8p6

 Is Manager: true

 ClusterID: sviwh8dsfuqcchmqatt7hll8f

 Managers: 1

 Nodes: 2

能看到manager機器一台,node機器2台(本機即是manager機又是node機)

5.使結點離開swarm叢集

$ docker swarm leave

Node left the swarm.

五、Docker hub鏡像的上傳和下載下傳

1、手動上傳image到docker hub上以及下載下傳鏡像:docker hub的賬戶名稱:zyhub

參考:http://blog.csdn.net/lianghailun/article/details/71172717(windows上測試可用)

(1)  首先檢視鏡像檔案:docker images

(2)  下載下傳hello-world做示範:docker run hello-world

(3)  本地登入到docker hub:docker login

(4)  把Repository、tag分别修改成自己的namespace下倉庫的名字、tag名。修改後可以發現,其<IMAGE_ID>是一樣的,隻是REPOSITORY及TAG名字不同。

dockertag docker.io/hello-world  zyhub/test:hello-world

docker tag nlknguyen/mpi:latest docker.io/zyhub/mpi:latest

docker tagdocker.io/nlknguyen/alpine-mpich:onbuild docker.io/zyhub/alpine-mpich:onbuild

(5)   上傳至docker hub上:

dockerpush zyhub/test:hello-world

docker pushdocker.io/zyhub/alpine-mpich:onbuild

上傳成功後可在docker hub的鏡像倉庫中的tags看到

(6)   下載下傳鏡像

a.      先将本地鏡像删除 :docker rmi 賬戶名/repos名:鏡像tag名稱(即Repository:tag)  

例:docker rmi zyhub/test:hello-world

b.     删除後檢視本地鏡像:docker images

c.      下載下傳鏡像:docker pull hub的賬戶名/repos名:鏡像tag名稱:latest

docker pull zyhub/test:hello-world

d.     下載下傳後再次檢視鏡像:docker images

六、常用的Docker Swarm指令總結

       啟動docker服務:service docker start

      删除節點:docker noderm  node9 docker node rm --forcenode9

       Docker Swarm節點檢查:sudo docker info

       檢視Swarm節點資訊:docker node ls

七、問題:在重新開機docker時需要離開Swarm嗎?

暫時先離開swarm,在重新開機docker,最終重新加入swarm

$ dockerswarm leave

$ sudoservice docker start

$docker swarm join \

    --tokenSWMTKN-1-0038kiadp6vm1xrhxjgnao61a04s1m2st0g4p003xv34qn5g27-6ernode3urc6fcwrsamnkhdty\

    192.168.152.130:2377

繼續閱讀