之前我们做的实验都是在一个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. 8. 同步锁Lock

    package com.gf.demo07; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Ree ...

  2. 【Spring】使用Spring发送邮件

    Spring Email抽象的核心是MailSender接口,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如下图: Spring自带一个MailSender的实现就是Ja ...

  3. 【Java每日一题】20170207

    20170206问题解析请点击今日问题下方的“[Java每日一题]20170207”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  4. angular post 带参数 导出excel

    原文地址:http://www.cnblogs.com/xujanus/p/5985644.html html <button class="btn btn-info" ng ...

  5. cf55D. Beautiful numbers(数位dp)

    题意 题目链接 Sol 看到这种题就不难想到是数位dp了. 一个很显然的性质是一个数若能整除所有位数上的数,则一定能整除他们的lcm. 根据这个条件我们不难看出我们只需要记录每个数对所有数的lcm(也 ...

  6. 2018-11-09 VS Code英汉词典插件v0.0.4-驼峰下划线命名

    首先, 在两天时间内安装数破百, 多谢支持. VS Code插件市场地址: 英汉词典 - Visual Studio Marketplace 开源库地址同前文: Visual Studio Code插 ...

  7. 使用vmimeNET解析账单邮件

    大概所有做APP的公司都是不愿意做自定义的,哪怕自己的功能再烂也愿意慢慢修补不愿意开源一部分. 卡牛- 51信用卡- 一次次的逾期   自己写个信用卡管理工具,从邮件中提取账单,还款后做个登记,到了还 ...

  8. RabbitMQ 在 web 页面 创建 exchange, queue, routing key

    这里只是为了展示, 在实际开发中一般在消费端通过 注解来自动创建 消费端: https://www.cnblogs.com/huanggy/p/9695934.html 1, 创建 Exchange ...

  9. How do I install Daydream on my phone?

    Google's philosophy with their newest VR platform is simple. In order to offer the best possible exp ...

  10. jQuery ajax()使用serialize()提交form数据到后台

    1.选中要删除的学生信息 2.点击 删除选中 按钮,把复选框中的值取出提交到后台 3.后台获取选中的id 4.前端也跟着删除数据 示例代码: 前端代码: <!DOCTYPE html> & ...