zoukankan      html  css  js  c++  java
  • 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

    其他请参考

  • 相关阅读:
    avalon随笔
    ms-attr-data-real-gold="{{page_data[0].gold}}" 属性付真
    jQuery 快捷操作
    jQuery 属性操作
    jQuery 表单域选中选择器
    jQuery 层次选择器
    jQuery 基本选择器
    jQuery 基本使用
    jQuery 引入多个库文件冲突
    BOM window对象方法
  • 原文地址:https://www.cnblogs.com/lkun/p/7781157.html
Copyright © 2011-2022 走看看