• Docker-machine 环境安装部署


    Docker-machine 环境安装部署

    1、docker-machine是什么

    在前面我们手工安装了第一个 docker ,步骤包括:

    1. 安装 https CA 证书
    2. 添加 GPG key
    3. 添加 docker apt 源
    4. 安装 docker

    可见步骤还是挺多的,对于多主机环境手工方式效率低且不容易保证一致性,针对这个问题,docker 给出的解决方案是 Docker Machine。 Docker Machine 可以批量安装和配置 docker , 可以是本地的虚拟机、物理机,也可以是公有云中的云主机。

    实验环境:

    node1 10.0.0.10 Centos 7.6

    host1 10.0.0.11 Centos 7.6

    host2 10.0.0.12 Centos 7.6

    2、安装docker-machine

    1.下载二进制包

    [root@node1 ~]# wget - O https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-   Linux-x86_64/usr/local/bin/docker-machine
    [root@node1 ~]# mv docker-machine-Linux-x86_64 /usr/local/bin/docker-machine
    [root@node1 /usr/local/bin]# chmod +x /usr/local/bin/docker-machine
    [root@node1 ~]# docker-machine version
    docker-machine version 0.9.0, build 15fd4c7
    

    3、创建docker-machine

    对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机。“创建 Machine” 指的就是在 host 上安装和部署 docker。先执行 docker-machine ls 查看一下当前的 machine:

    [root@node1 /usr/local/bin]# docker-machine ls
    NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
    

    当前还没有 machine,接下来我们创建第一个 machine: host1 10.0.0.10

    分发秘钥
    [root@node1 /usr/local/bin]# ssh-keygen 
    [root@node1 /usr/local/bin]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.11
    [root@node1 /usr/local/bin]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.12
    [root@node1 ~]# docker-machine create --driver=generic --generic-ip-address=10.0.0.11 host1(host2)#这一步时间比较长,耐心等候
    [root@node1 ~]# Creating CA: /root/.docker/machine/certs/ca.pem
    Creating client certificate: /root/.docker/machine/certs/cert.pem
    Running pre-create checks...
    Creating machine...
    #ssh登陆到远程主机
    (host1) No SSH key specified. Assuming an existing key at the default location.
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    #安装docker
    Provisioning with centos...
    #拷贝证书
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    #配置docker daemon
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    #启动docker
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env host1
    [root@node1 ~]# docker-machine ls
    NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER     ERRORS
    host1   -        generic   Running   tcp://10.0.0.11:2376          v18.09.0   
    [root@node1 ~]# docker-machine ls
    NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER     ERRORS
    host1   -        generic   Running   tcp://10.0.0.12:2376          v18.09.0  
    

    4、管理docker-machine

    docker-machine 创建 machine 的过程很简洁,非常适合多主机环境。除此之外,Docker Machine 也提供了一些子命令方便对 machine 进行管理。其中最常用的就是无需登录到 machine 就能执行 docker 相关操作。

    我们前面学过,要执行远程 docker 命令我们需要通过 -H 指定目标主机的连接字符串,比如:

    docker -H tcp://10.0.0.11:2376 ps

    Docker Machine则让这个过程更简单

    docker-machine env host1 直接访问host1的所有环境变量

    [root@node1 ~]# docker-machine env host1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.2.120:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/host1"
    export DOCKER_MACHINE_NAME="host1"
    # Run this command to configure your shell: 
    # eval $(docker-machine env host1)
    [root@node1 ~]# docker-machine env host2
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://10.0.0.12:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/host2"
    export DOCKER_MACHINE_NAME="host2"
    # Run this command to configure your shell: 
    # eval $(docker-machine env host2)
    

    根据提示,执行 eval $(docker-machine env host1)

    [root@node1 ~]# eval $(docker-machine env host1)
    [root@node1 ~ [host1]]# 
    [root@node1 ~ [host1]]# 
    [root@node1 ~ [host1]]# docker run --name w1 -itd busybox
    Unable to find image 'busybox:latest' locally
    latest: Pulling from library/busybox
    57c14dd66db0: Pull complete 
    Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
    Status: Downloaded newer image for busybox:latest
    0dada375dee242eca50ab534cf39efe44cd5c502c4bc19e9888b94092faebcf2
    docker: Error response from daemon: OCI runtime create failed: rootfs (/var/lib/docker/devicemapper/mnt/6f719b81e2a0c68c48629815696efb4e596575694176f424941d06545164569d/rootfs) does not exist: unknown.
    [root@node1 ~ [host1]]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    执行 eval $(docker-machine env host2) 切换到 host2:

    [root@node1 ~ [host1]]# eval $(docker-machine env host2)
    [root@node1 ~ [host2]]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    docker-machine 子命令:

    docker-machine upgrade 更新 machine 的 docker 到最新版本,可以批量执行:

    [root@node1 ~ [host2]]# docker-machine upgrade host1 host2
    Waiting for SSH to be available...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Detecting the provisioner...
    Upgrading docker...
    Upgrading docker...
    Restarting docker...
    Restarting docker...
    

    docker-machine config 查看 machine 的 docker daemon 配置:

    [root@node1 ~]# docker-machine config host1
    --tlsverify
    --tlscacert="/root/.docker/machine/machines/host1/ca.pem"
    --tlscert="/root/.docker/machine/machines/host1/cert.pem"
    --tlskey="/root/.docker/machine/machines/host1/key.pem"
    -H=tcp://10.0.0.11:2376
    [root@node1 ~]# docker-machine config host2
    --tlsverify
    --tlscacert="/root/.docker/machine/machines/host2/ca.pem"
    --tlscert="/root/.docker/machine/machines/host2/cert.pem"
    --tlskey="/root/.docker/machine/machines/host2/key.pem"
    -H=tcp://10.0.0.12:2376
    

    docker-machine scp 可以在不同 machine 之间拷贝文件,比如:

    docker-machine scp host1:/tmp/a host2:/tmp/b

  • 相关阅读:
    SimpleXML简单使用
    制作RSS供应源
    DOM方式操作XML
    Referer与图片防盗链
    PAT
    Margarite and the best present
    Petya and Origami
    Margarite and the best present
    Petya and Origami
    A/B
  • 原文地址:https://www.cnblogs.com/wangxiaopang/p/12714804.html
Copyright © 2020-2023  润新知