之前我们做的实验都是在一个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

其他请参考

centos7下安装docker(14安装docker machine)的更多相关文章

  1. SVN CentOS7 下配置svn的安装及基础配置介绍

    CentOS7 下配置svn的安装及基础配置介绍 by:授客 QQ:1033553122 目录 一. 二. 三. 四. 五. 六. 七. 一.      实践环境 CentOS 7操作系统(CentO ...

  2. centos7下源码方式安装gitlab8.9+发送邮件+ldap

    CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...

  3. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  4. inux centos7下源码 tar安装5.7.26详解

    inux centos7下源码 tar安装5.7.26图文详解 官网地址 https://dev.mysql.com/downloads/mysql/ 1.卸载Linux系统上自带的mysql插件(o ...

  5. CentOS7下MySQL5.7的安装-RPM方式

    Installing MySQL on Linux Using RPM Packages 下载安装包 mysql下载地址:https://dev.mysql.com/downloads/mysql/ ...

  6. 在CentOS7下从0开始搭建docker并发布tomcat项目

    一切从0开始,我也是个小白: 1.检查你的系统是不是高于3.8的内核,如果没有请升级CentOS7或者Ubuntu 14 #uname -a 2.CentOS7下安装docker #yum -y in ...

  7. CentOS7下使用Sonatype Nexus3搭建Docker私有仓库

    相关资料: Sonatype Nexus3官方网站:https://www.sonatype.com/download-oss-sonatype Sonatype Nexus3 Docker Hub地 ...

  8. Centos7下,宿主机nginx配合docker环境的php-fpm

    一.安装docker并启动 yum install docker systemctl start docker 二.安装nginxCentOS 7默认不能从yum中安装nginx,原因可以自己搜索一下 ...

  9. CentOS7下通过rpm方式安装MySQL及插入中文问题解决 [原创]

    一 CentOS下通过rpm方式安装MySQL CentOS版本:CentOS-7 MySQL版本:MySQL-5.6.22 在网上搜了一下,Linux下安装MYSQL有三种方式: 1) 通过yum命 ...

  10. Centos7下Redis3.2的安装配置与JReid测试

    环境 Centos7 Redis版本 3.2.0 安装目录 /usr/local/redis/redis-3.2.0 Redis的介绍 参见官网 安装 1 安装gcc与tcl # yum instal ...

随机推荐

  1. js中字符串和数组的使用

    函数: 函数在调用的时候,会形成一个私有作用域,内部的变量不会被外面访问,这种保护机制叫闭包.这就意味着函数调用完毕,这个函数形成的栈内存会被销毁. 但有时候我们不希望他被销毁. 函数归属谁跟它在哪调 ...

  2. SpringBoot的打包失败

    打包是根据pom.xml文件来打的包. 如果使用Maven的默认打包,只会将src/main下的java和resources里面的内容打进Jar包中. 通过maven-assembly-plugin这 ...

  3. CSS基础知识思维导图xmind

    这是我根据自己的学习笔记整理的思维导图,WEB前端的知识很多,汇总来看会比较清晰.

  4. HTML float 和 absolute

    block元素和inline元素在文档流中的排列方式: block元素通常被现实为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填满其父元素宽度.block元素可以 ...

  5. HTML之元素分类(HTML基础知识)

    HTML之元素分类 一.按照块级元素还是行内元素分类 块级元素(block-level)和行内元素(inline-level,也叫作“内联”元素). a.块级元素(独占一行) 块级元素:其最明显的特征 ...

  6. iOS ---------- 获取设备的各种信息

    一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...

  7. Visualization of Detail Point Set by Local Algebraic Sphere Fitting

    Refers to Dynamic Sampling and Rendering of Algebraic Point Set Surfaces Growing Least Squares for t ...

  8. js获取选中日期的当周的周一和周日

    js获取选中日期的当周的周一和周日 第一种方法(推荐): function getWeekStr(str) { // 将字符串转为标准时间格式 str2 = Date.parse(str); let ...

  9. DAY4(PYTHON)列表的嵌套,range,for

    li=['a','b','开心','c'] print(li[2].replace ( ' 心 ', ' kaixin ' ) ) 输出:'a','b','开kaixin','c' li= ['abc ...

  10. android 可以精确到秒级的时间选择器

    android自带的时间选择器只能精确到分,但是对于某些应用要求选择的时间精确到秒级,此时只有自定义去实现这样的时间选择器了.下面介绍一个可以精确到秒级的时间选择器. 先上效果图: 下面是工程目录: ...