centos7下安裝docker(14安裝docker machine)


 

 

   之前我們做的實驗都是在一個host上面的,其實在真正的環境中有多個host,容器在這些host上面啟動,運行,停止和銷毀,相關容器會通過網絡相互通信,無論他們是否運行在相同的host上面。

  對於這種歌multi-host環境,我們該如何高效的進行管理呢?

第一個問題就是:為所有host安裝和配置docker

之前我們手工安裝了一個docker host:

1.安裝https CA證書

2.添加GPG key

3.添加docker apt源

4.安裝docker

     對於多主機的環境手工方式效率低且不容易保證一致性,只對這個問題,docker給出的解決方案是docker machine

 

用docker machine可以批量安裝和配置docker host,這個host可以是本地的虛擬機,物理機,也可以是公有雲中的雲主機

 

 

Docker Machine支持在不同環境下安裝配置docker host,包括:

1.常規Linux操作系統;

2.虛擬化平台-VirtualBox,VMware,Hyper-V

3.Openstack

4.公有雲-Amazon Web Services,Microsoft Azure,Google Compute Engine,Digital Ocean等

 

Docker Machine為這些環境起了一個統一的名字:provider

對於特定的某個provider,Docker Machine使用相應的driver安裝配置docker host

 

 

 

安裝docker machine

實驗環境:主機名     IP                               操作系統

                  docker    192.168.7.222           centos7

                 docker1   192.168.7.235           centos7

                 docker2   192.168.7.231          centos7

我將在192.168.7.222  docker上安裝docker machine,然后通過docker machine命令在其他兩台host上部署docker

 

安裝docker machine,參照官方文檔:https://docs.docker.com/machine/install-machine/#install-machine-directly

執行docker-machine version驗證命令是否可用

注:建議根據官方文檔搭建

 

 

安裝bash completion script,這樣bash可以通過tab來補全命令和參數:

下載completion script:docker-machine-prompt.bash      docker-machine-wrapper.bash    docker-machine.bash 將其放在/etc/bash_completion.d目錄下

 

命令為:scripts=( docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash ); for i in "${scripts[@]}"; do sudo wget https://raw.githubusercontent.com/docker/machine/v0.13.0/contrib/completion/bash/${i} -P /etc/bash_completion.d; done

 

然后將如下代碼添加到~/.bashrc

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

若出現一下情況:

更改~/.bashrc,在bashrc中添加以下三行:

source /etc/bash_completion.d/docker-machine-wrapper.bash
source /etc/bash_completion.d/docker-machine-prompt.bash
source /etc/bash_completion.d/docker-machine.bash

 

重新source下bashrc

source /root/.bashrc

到此位置docker-machine就安裝完成了!

 

如何卸載docker-machine,可以參考官方文檔!

 

 

創建machine

對於docker machine來將,術語Machine就是運行docker daemon的主機,創建machine就是在host上安裝docker

執行docker-macine ls查看當前的machine

當前還沒有一個machine,接下來我們創建第一個machine:docker1-192.168.7.235

創建machine要求能夠無密碼遠程登陸主機,所以需要下通過如下命令將ssh key拷貝到192.168.7.235

1.ssh-keygen -t rsa    在192.168.7.222上面生成密鑰

注:這里要回車三次

2.在用戶的家目錄下生成一個   .ssh的 目錄

3.在 .ssh下存放生成的密鑰文件

id_rsa :生成的私鑰文件

id_rsa.pub:生成的公鑰文件

如果希望公鑰生效,需滿足以下兩個條件:

1) .ssh目錄的權限必須是700 

2) .ssh/authorized_keys文件權限必須是600

3.將密鑰拷貝到192.168.7.235里面

ssh-copy-id

4.通過ssh 192.168.7.235測試是否成功

 

 

 

一切准備就緒,執行docker-machine create創建第一個docker1

docker-macine create --driver generic --generic-ip-address=192.168.7.235 docker1

因為我們用的是普通的linux部署docker,所以使用generic driver通用driver,其他driver可以參考:https://docs.docker.com/machine/drivers/

我們的docker1已經創建成功,步驟如下

1.ssh遠程登錄主機

2.安裝docker

3.復制證書

4.配置docker

5.啟動docker

 

再次執行;docker-machine ls

現在看到docker1已經運行

我們登陸到docker1查看具體配置

在/etc/systemd/system/docker.service.d下文件名是:10-machine.conf

注:-H tcp://0.0.0.0:2376 使docker daemon接受遠程連接

      --tls*對遠程連接啟用安全認證和加密

注:主機名hostname也會被更改

 

使用同樣的方法創建docker2

docker-machine create --driver generic --generic-ip-address=192.168.7.231 docker2

由於我忘記傳送密鑰,導致的報錯

當我把密鑰傳進去后重新創建docker2時提示:docker2已經存在,通過docker-machine ls查看docker2已經處於運行的狀態,無法識別docker版本

注:這里的docker的版本還不能指定,默認安裝的是repo的版本

可以使用docker-machine rm -f刪除docker2

 

   

重新傳送密鑰,然后重新創建docker2

在密鑰傳送不成功以及網絡無法ping通baidu的情況下,終於將docker2建好了:

 

盜圖:

 

 

 

 管理machine:

學習無需登錄machine就可以執行docker相關的命令

1.docker-machine env docker1顯示訪問docker1需要的所有環境變量

 

 根據提示,執行eval $(docker-machine env docker1)

可以看到,命令提示符變成了docker1,其原因是我們之前在/root/.bashrc里面配置了 PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ',用於顯示當前的docker host

注:如果我們輸入eval $(docker-machine env docker1)沒有顯示出docker1的命令提示符,我們可以重新輸入一遍 PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

在此狀態下執行的docker命令其效果都相當於在docker1上執行

 

docker-machine子命令:

docker-machine upgrate docker1 docker2批量更新docker host版本

docker-machine config docker1 查看host的docker daemon配置

docker-machine start/status/restart/kill  docker1是對docker host所在的系統的操作,不是對服務的操作

docker-machine scp是在docker host之間復制

docker-machine rm docker1刪除一個docker host

其他請參考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM