天下風雲出我輩
一入江湖歲月催

Docker Machine

       Docker Machine 是一个工具,它允许你在虚拟主机上安装 Docker Engine ,并使用 docker-machine 命令管理这些主机。你可以使用 Machine 在你本地的 Mac 或 Windows box、公司网络、数据中心、或像 AWS 或 Digital Ocean 这样的云提供商上创建 Docker 主机。

      使用 docker-machine 命令,你可以启动、审查、停止和重新启动托管的主机、升级 Docker 客户端和守护程序、并配置 Docker 客户端与你的主机通信。

为什么要使用它?

Docker Machine 使你能够在各种 Linux 上配置多个远程 Docker 主机。此外,Machine 允许你在较早的 Mac 或 Windows 系统上运行 Docker,如上一主题所述。

Docker Machine 有这两个广泛的用例。

  • 我有一个较旧的桌面系统,并希望在 Mac 或 Windows 上运行 Docker。

如果主要使用的旧Mac或Windows笔记本电脑或台式机不能满足新的Docker for Mac和Docker for Windows应用程序的要求,则需要 Docker Machine 来在本地“运行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安装程序安装 Docker Machine 将为 Docker Engine 配置一个本地的虚拟机,使你能够连接它、并运行 docker 命令。

  • 我想在远程系统上配置Docker主机

Docker Engine在Linux系统上运行。如果你有一个Linux作为主系统,并且想要运行docker命令,那么你需要做的就是下载并安装Docker Engine。但是如果您想要一种有效的方式在网络,云端甚至本地配置多个Docker主机,您需要Docker Machine。

无论你的主系统是 Mac、Windows 还是 Linux,你都可以在其上安装 Docker Machine,并使用 docker-machine 命令来配置和管理大量的 Docker 主机。它会自动创建主机、在其上安装 Docker Engine 、然后配置 docker 客户端。每个被管理的主机(“machine”)是 Docker 主机和配置好的客户端的结合。

 

Docker Engine 和 Docker Machine 有什么区别?

当人们说“Docker”时,他们通常是指 Docker Engine,它是一个客户端 – 服务器应用程序,由 Docker 守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口(CLI)与守护进程通信(通过封装REST API)。Docker Engine 从 CLI 中接受docker 命令,例如 docker run <image>、docker ps 来列出正在运行的容器、docker images 来列出镜像,等等。

Docker Machine 是一个用于配置和管理你的主机(带有 Docker Engine 的主机)的工具。通常,你在你的本地系统上安装 Docker Machine。Docker Machine有自己的命令行客户端 docker-machine 和 Docker Engine 客户端 docker。你可以使用 Machine 在一个或多个虚拟系统上安装 Docker Engine。这些虚拟系统可以是本地的(就像你在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安装和运行 Docker Engine 一样)或远程的(就像你使用 Machine 在云提供商上 provision Dockerized 主机一样)。Dockerized 主机本身可以认为是,且有时就称为,被管理的“machines”。

安装使用

1、下载安装

curl -L https://github.com/docker/machine/releases/download/v0.16.0/docker-machine-`uname -s`-`uname -m` 
>/tmp/docker-machine && install /tmp/docker-machine /usr/local/bin/docker-machine

#查看版本信息
[[email protected] ~]# docker-machine -v
docker-machine version 0.16.0, build 702c267f

2、创建通用的Linux主机,需要能ssh无密码远程登录被控主机,通过ssh-copy-id复制公钥到远程主机上;

[[email protected] ~]# docker-machine create -d generic --generic-ip-address=192.168.1.234 host1

Running pre-create checks...
Creating machine...
(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...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to 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

generic选项
–generic-engine-port:用于Docker守护程序的端口(注意:此标志不适用于boot2docker)。
–generic-ip-address:主机所需的 IP地址。
–generic-ssh-key:SSH用户私钥的路径。
–generic-ssh-user:用于连接的SSH用户名。
–generic-ssh-port:用于SSH的端口。

3、查看所有注册的主机

[[email protected] ~]# docker-machine ls
NAME    ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER     ERRORS
host1   -        generic   Running   tcp://192.168.1.234:2376           v18.09.0   
host2   -        generic   Running   tcp://192.168.1.230:2376           v18.09.0

 

管理Machine

1、查看环境变量

[[email protected] ~]# docker-machine env host1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.1.234: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)

2、执行eval $(docker-machine env host1) 切换到host1主机上,显示[host1]需要安装bash completion scripts;

此状态下执行的docker命令都相当于在host1本地主机上执行,比如运行一个alpine容器。

[[email protected] ~[host1]]# docker run -itd alpine
4dbac2e2bc545c0c946976e31ca0c7e969bd0fe371d6ebd84b8bf691358f4151

[[email protected] ~]# docker ps
CONTAINER ID      IMAGE      COMMAND          CREATED         STATUS         PORTS               NAMES
4dbac2e2bc54     alpine     "/bin/sh"      4 minutes ago       Up 4 minutes         infallible_tereshkova

3、使用docker-machine ssh

除了上面的使用方法外,我们还有更加简便的方式,就是使用docker-machine ssh,需要我们提前配置好 /etc/hosts,比如上面的命令还可以直接通过如下指令创建:

[[email protected] ~]# docker-machine ssh host1 "docker run -itd busybox"
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
57c14dd66db0: Pulling fs layer
57c14dd66db0: Verifying Checksum
57c14dd66db0: Download complete
57c14dd66db0: Pull complete
Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
Status: Downloaded newer image for busybox:latest
d23269113bb095fc4a55ed52896f3641d813858ca340d9a95f2a738a4d403588
[[email protected] ~]# docker-machine ssh host1 "docker ps"
CONTAINER ID        IMAGE      COMMAND        CREATED           STATUS        PORTS     NAMES
d23269113bb0        busybox      "sh"       18 seconds ago    Up 17 seconds           nifty_euler

 

docker-machine  常用命令

命令 说明
docker-machine create 创建一个 Docker 主机(常用-d virtualbox)
docker-machine ls 查看所有的 Docker 主机
docker-machine ssh SSH 到主机上执行命令
docker-machine env 显示连接到某个主机需要的环境变量
docker-machine inspect 输出主机更多信息
docker-machine kill 停止某个主机
docker-machine restart 重启某台主机
docker-machine rm 删除某台主机
docker-machine scp 在主机之间复制文件
docker-machine start 启动一个主机
docker-machine status 查看主机状态
docker-machine stop 停止一个主机

 

赞(3) 打赏
未经允许不得转载:Anonym0x1 » Docker Machine

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏