专栏首页运维ABCDocker实践(四):Docker Machine

Docker实践(四):Docker Machine

环境说明:

主机名

操作系统版本

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

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版本

root@docker01:~# docker-machine version
docker-machine version 0.13.0, build 9ba6da9

3.命令自动补全

下载bash completion

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

root@docker01:~# sed -i '$a 'PS1=\''[\\u@\\h \\W$(__docker_machine_ps1)]\\$ '\'''   ~/.bashrc

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

文件加载

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命令补全

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

root@docker01:~# apt install virtualbox -y

3.创建Machine

[root@docker01 ~]# docker-machine create --driver=virtualbox test01

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

4.查看machine

[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。

[root@docker01 ~]# eval $(docker-machine env test01)
[root@docker01 ~ [test01]]# 

查看machine ip

[root@docker01 ~ [test01]]# docker-machine ip test01
192.168.99.100

ip地址为:192.168.99.100

运行apache服务

[root@docker01 ~ [test01]]# docker run -d -p 8000:80 httpd

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

切回管理主机

[root@docker01 ~ [test01]]# eval $(docker-machine env -u)
[root@docker01 ~]# 

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

访问web

[root@docker01 ~]# curl $(docker-machine ip test01):8000
<html><body><h1>It works!</h1></body></html>

访问正常

本地主机方式

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

1.免密访问

machine上生成秘钥

[root@docker01 ~]# ssh-keygen  -t rsa

将秘钥拷贝至docker02

[root@docker01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub root@172.27.9.72

免密登陆测试

2.创建Machine

[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

[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

[root@docker01 ~]# docker-machine ssh test02

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

运行busybox

root@test02:~# docker run --name busybox01 busybox echo hello world

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

四、Docker Machine命令

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

[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

查看连接信息

[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主机之间复制文件

[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

[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

[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/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Ubuntu16.04.5以lvm方式安装全记录

    链接:https://pan.baidu.com/s/1LenCI68uacAE-U_uIj1ecg

    loong576
  • Docker实践(三):数据持久化及共享

     在Linux上运行的Docker有三种不同的方式将数据从 Docker Host挂载到 Docker 容器,并实现数据的读取和存储:volumes、bind ...

    loong576
  • Docker实践(一):Ubuntu16.04安装Docker

    Docker分为开源免费的CE(Community Edition)版本和收费的EE(Enterprise Edition)版本,本文安装社区版,该版本也是开发...

    loong576
  • Windows下的Docker Machine - 如何设置你的Docker主机

    最近我一直在折腾Docker。原因有很多,可以肯定的是,我喜欢折腾最新的技术,而且最好能帮忙实现一到两个示例的demo出来。和我的其他同事们不一样的是,我在Wi...

    李郑
  • Windows上的Docker Machine - 如何安装配置主机

    最近我一直在研究Docker,原因有很多,但主要还是我比较喜欢研究前沿的技术,甚至还可以帮忙构建一个Demo(演示)或者一两个实验室。和其他人的做法有一点不...

    萌萌哒小睿睿
  • Spring、Spring Boot和TestNG测试指南 - 集成测试中用Docker创建数据库

    在测试关系型数据库一篇里我们使用的是H2数据库,这是为了让你免去你去安装/配置一个数据库的工作,能够尽快的了解到集成测试的过程。

    颇忒脱
  • n3.Docker之Win10和Server使用实例

    注意事项: Docker for Windows 有两种运行模式,一种运行Windows相关容器,一种运行传统的Linux容器。同一时间只能选择一种模式运行。

    WeiyiGeek
  • Docker初尝试1.What is Docker?2.Try It3.Use It

    1.What is Docker? 关于Docker,网上有很多讲解,不在此处赘述,提供两个不错的学习链接,望自行学习。 Docker Github Do...

    JasonhavenDai
  • Docker开启Remote API 访问 2375端口

    在/usr/lib/systemd/system/docker.service,配置远程访问。

    sunsky
  • Docker-ce最新版在Ubuntu18.04上的安装、更新、卸载方法(存储库方式)

    Docker 是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生...

    Mculover666

扫码关注云+社区

领取腾讯云代金券