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

其余请参考