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

 

 

   以前咱們作的實驗都是在一個host上面的,其實在真正的環境中有多個host,容器在這些host上面啓動,運行,中止和銷燬,相關容器會經過網絡相互通訊,不管他們是否運行在相同的host上面。linux

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

第一個問題就是:爲全部host安裝和配置dockergithub

以前咱們手工安裝了一個docker host:docker

1.安裝https CA證書centos

2.添加GPG key安全

3.添加docker apt源bash

4.安裝docker網絡

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

 

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

 

 

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

其餘請參考

相關文章
相關標籤/搜索