前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker实践(四):Docker Machine

Docker实践(四):Docker Machine

作者头像
loong576
修改2019-10-23 10:46:58
1.4K0
修改2019-10-23 10:46:58
举报
文章被收录于专栏:运维ABC运维ABC

环境说明:

主机名

操作系统版本

IP地址

docker-machine版本

VMware版本

说明

docker01

Ubuntu 16.04.5

172.27.9.71

0.13.0

12.5.2

machine管理主机

docker02

Ubuntu 16.04.5

172.27.9.72

/

12.5.2

machine主机

本文所有测试都在Vmware虚拟机上完成。

ubuntu安装详见:Ubuntu16.04.5以lvm方式安装全记录

docker安装详见:Ubuntu16.04安装Docker

一、Docker Machine简介

1.Docker Machine概述

 Docker Machine是Docker官方三剑客项目之一,负责使用docker容器的第一步:在多种平台上快速安装和维护docker运行环境。它支持多种平台,让用户可以在很短时间内在本地或云环境中搭建一套docker主机集群。

Docker Machine用途:

  • 在Mac或Windows上安装并运行Docker
  • 配置和管理多个远程Docker主机
  • 为Docker Swarm提供支持

在Mac或Windows上运行Docker

管理远程docker主机

2.Docker Engine与Docker Machine

Docker Engine

当人们说“docker”时,他们通常是指Docker Engine,包括Docker daemon、REST API 以及CLI命令行。Docker Engine接受来自cli的docker命令,例如docker run<image>、docker ps to list running containers、docker image ls to list images等等。

Docker Machine

Docker Machine是一个工具,用于配置和管理您的Dockerized主机(主机上有Docker Engine)。通常,您在本地系统上安装Docker Machine。Docker Machine有自己的命令行客户端docker-machine和Docker Engine客户端docker。您可以使用machine在一个或多个虚拟系统上安装Docker Engine。这些虚拟系统可以是本地的(如在Mac或Windows上使用machine在VirtualBox中安装和运行Docker Engine)或远程的(如在云提供商上使用machine安装和运行Docker Engine)。

二、安装Docker Machine

安装Docker Machine前需先安装Docker,详见:Ubuntu16.04安装Docker

1.安装machine

代码语言:txt
复制
root@docker01:~# base=https://mirrors.aliyun.com/docker-toolbox/linux/machine/0.13.0
root@docker01:~# curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 25.3M  100 25.3M    0     0   952k      0  0:00:27  0:00:27 --:--:--  989k
root@docker01:~# install /tmp/docker-machine /usr/local/bin/docker-machine

2.验证Machine版本

代码语言:txt
复制
root@docker01:~# docker-machine version
docker-machine version 0.13.0, build 9ba6da9

3.命令自动补全

下载bash completion

代码语言:txt
复制
base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
  wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done

编辑~/.bashrc

代码语言:txt
复制
root@docker01:~# sed -i '$a 'PS1=\''[\\u@\\h \\W$(__docker_machine_ps1)]\\$ '\'''   ~/.bashrc

/root/.bashrc文件最后一行插入:PS1='\u@\h \W$(__docker_machine_ps1)\$ '

文件加载

代码语言:txt
复制
root@docker01:~# source /etc/bash_completion.d/docker-machine.bash 
root@docker01:~# source /etc/bash_completion.d/docker-machine-prompt.bash 

加载docker-machine.bash和docker-machine-prompt.bash

验证docker-machine命令补全

代码语言:txt
复制
root@docker01:~# docker-machine 
active            env               ip                mount             restart           ssh               stop              version           
config            help              kill              provision         rm                start             upgrade           
create            inspect           ls                regenerate-certs  scp               status            url               
root@docker01:~# docker-machine 

输入docker-machine,按tab键补全,会出现相关命令。

三、创建Machine和测试

 通过Docker Machine可以在多重平台上快速安装和维护Docker运行环境。

 Docker Machine通过多种后端驱动来管理不同的资源,包括虚拟机、本地主机和云平台等。通过--driver选项可以选择支持的驱动类型。本文介绍虚拟机和本地主机两种方式。

 对于Docker Machine来说,Machine就是运行docker daemon的主机,创建Machine即在host上安装和部署docker。

虚拟机方式

1.设置cpu

由于是在Vmware上做的测试,需钩选“虚拟化Intel VT-x/EPT 或AMD-V/RVI”以支持虚拟机嵌套。

2.安装virtualbox

代码语言:txt
复制
root@docker01:~# apt install virtualbox -y

3.创建Machine

代码语言:txt
复制
[root@docker01 ~]# docker-machine create --driver=virtualbox test01

该命令将创建一个oracle virtualbox为驱动的虚拟主机并安装Docker引擎。

4.查看machine

代码语言:txt
复制
[root@docker01 ~]# docker-machine ls
NAME     ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
test01   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.4   
[root@docker01 ~]# docker-machine env test01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/test01"
export DOCKER_MACHINE_NAME="test01"
# Run this command to configure your shell: 
# eval $(docker-machine env test01)

通过docker machine env可以知晓后续docker与machine交互的配置信息。

5.测试

进入machine

根据4中的提示,运行eval $(docker-machine env test01)进入machine。

代码语言:txt
复制
[root@docker01 ~]# eval $(docker-machine env test01)
[root@docker01 ~ [test01]]# 
查看machine ip
代码语言:txt
复制
[root@docker01 ~ [test01]]# docker-machine ip test01
192.168.99.100

ip地址为:192.168.99.100

运行apache服务
代码语言:txt
复制
[root@docker01 ~ [test01]]# docker run -d -p 8000:80 httpd

运行apache服务,端口映射为8000

切回管理主机
代码语言:txt
复制
[root@docker01 ~ [test01]]# eval $(docker-machine env -u)
[root@docker01 ~]# 

运行eval $(docker-machine env -u),切回管理主机。

访问web
代码语言:txt
复制
[root@docker01 ~]# curl $(docker-machine ip test01):8000
<html><body><h1>It works!</h1></body></html>

访问正常

本地主机方式

该种方式使用generic类型的驱动,适合目标主机操作系统完成安装且machine主机可以免密访问目标主机。

1.免密访问

machine上生成秘钥
代码语言:txt
复制
[root@docker01 ~]# ssh-keygen  -t rsa
将秘钥拷贝至docker02
代码语言:txt
复制
[root@docker01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub root@172.27.9.72
免密登陆测试

2.创建Machine

代码语言:txt
复制
[root@docker01 ~]# docker-machine create --driver generic --generic-ip-address=172.27.9.72 --engine-registry-mirror https://v16stybc.mirror.aliyuncs.com test02

参数说明

  • --driver generic #驱动为generic。
  • --generic-ip-address #指定要安装machine的目标主机IP,前提是SSH root用户免交互登录或私钥认证。
  • --engine-registry-mirror #使用阿里加速器。

3.查看machine

代码语言:txt
复制
[root@docker01 ~]# docker-machine ls
NAME     ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
test01   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.4   
test02   -        generic      Running   tcp://172.27.9.72:2376              v18.09.4 

创建的machine为test01和test02.

4.测试

进入machine
代码语言:txt
复制
[root@docker01 ~]# docker-machine ssh test02

除了eval $(docker-machine env test02)方式外,也可以通过ssh方式进入machine。

运行busybox
代码语言:txt
复制
root@test02:~# docker run --name busybox01 busybox echo hello world

像普通容器一样,test02正常运行busybox。同时也看到docker02的主机名也变为test02。

四、Docker Machine命令

Docker Machine提供了很多子命令,可通过docker-machine <COMMAND> -h查看详情

代码语言:txt
复制
[root@docker01 ~]# docker-machine 
active            env               ip                mount             restart           ssh               stop              use               
config            help              kill              provision         rm                start             upgrade           version           
create            inspect           ls                regenerate-certs  scp               status            url               
[root@docker01 ~]# docker-machine ls -h
Usage: docker-machine ls [OPTIONS] [arg...]

List machines

Options:

   --quiet, -q                                  Enable quiet mode
   --filter [--filter option --filter option]   Filter output based on conditions provided
   --timeout, -t "10"                           Timeout in seconds, default to 10s
   --format, -f                                 Pretty-print machines using a Go template

1.config

查看连接信息

代码语言:txt
复制
[root@docker01 ~]# docker-machine config test02
--tlsverify
--tlscacert="/root/.docker/machine/machines/test02/ca.pem"
--tlscert="/root/.docker/machine/machines/test02/cert.pem"
--tlskey="/root/.docker/machine/machines/test02/key.pem"
-H=tcp://172.27.9.72:2376

2.scp

在Docker主机之间复制文件

代码语言:txt
复制
[root@docker01 ~]# ls foo.txt
ls: cannot access 'foo.txt': No such file or directory
[root@docker01 ~]# docker-machine ssh test01 pwd
/home/docker
[root@docker01 ~]# docker-machine ssh test01 'echo A file created remotely! >foo.txt'
[root@docker01 ~]# docker-machine scp test01:/home/docker/foo.txt ./
foo.txt                                                                                                                           100%   25     0.0KB/s   00:00    
[root@docker01 ~]# ls
foo.txt
[root@docker01 ~]# 
[root@docker01 ~]# more foo.txt 
A file created remotely!

在test01中新建文件foo.txt并将其scp至管理主机。

3.mount

使用sshfs将machine主机的目录挂载至管理主机的本地目录。

安装sshfs

代码语言:txt
复制
[root@docker01 ~]# apt install  fuse-sshfs

挂载test01的目录至管理主机

在管理主机新建目录foo,test01中也新建foo并将/home/docker/foo挂载至管理主机的/root/foo目录,管理主机本地新建bar文件,test01对应目录也能看见,至此实现了两个foo目录的共享。

在machine的容器中使用目录

至此foo目录在“管理主机目录/root/foo”、“test01主机的/home/docker/foo目录”和“test01中容器目录/tmp/foo”实现了共享。

unmount

代码语言:txt
复制
[root@docker01 ~]# docker-machine mount -u test01:/home/docker/foo foo

unmount命令和mount一样,只是新增参数-u

4.inspect

以json格式输出指定machine主机的详细信息。

5.upgrade

更新machine的docker版本

执行upgrade操作会将machine中的docker升级至最新版。

6.start/stop

启动/停止machine主机系统(针对的是操作系统不是docker daemon)

stop操作不支持driver为generic类型的machine。

本文参考:

https://docs.docker.com/machine/overview/

https://docs.docker.com/machine/get-started/

https://docs.docker.com/machine/reference/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Docker Machine简介
    • 1.Docker Machine概述
      • 2.Docker Engine与Docker Machine
        • Docker Engine
        • Docker Machine
    • 二、安装Docker Machine
      • 1.安装machine
        • 2.验证Machine版本
          • 3.命令自动补全
            • 下载bash completion
            • 编辑~/.bashrc
            • 文件加载
            • 验证docker-machine命令补全
        • 三、创建Machine和测试
          • 虚拟机方式
            • 1.设置cpu
            • 2.安装virtualbox
            • 3.创建Machine
            • 4.查看machine
            • 5.测试
          • 本地主机方式
            • 1.免密访问
            • 2.创建Machine
            • 3.查看machine
            • 4.测试
        • 四、Docker Machine命令
          • 1.config
            • 2.scp
              • 3.mount
                • 安装sshfs
                • 挂载test01的目录至管理主机
                • 在machine的容器中使用目录
                • unmount
              • 4.inspect
                • 5.upgrade
                  • 6.start/stop
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档