介绍
Docker Machine是一个工具,使您可以轻松地从个人计算机远程配置和管理多个Docker主机。 这样的服务器通常被称为Docker化主机,并且当然可以用于运行Docker容器。
虽然Docker Machine可以安装在本地或远程系统上,但最常见的方法是将其安装在本地计算机(本机安装或虚拟机)上,并使用它来部署Docker化远程服务器。
虽然Docker Machine可以安装在大多数Linux发行版以及Mac OS X和Windows上,但在本教程中,我们将在运行Ubuntu 16.04的本地机器上安装Docker Machine,并使用它来配置Dockerized DigitalOcean Droplet。
先决条件
要遵循本教程,您需要以下内容:
- 运行Ubuntu 16.04与Docker在本地计算机安装(请参阅如何在Ubuntu 16.04安装和使用Docker的说明)
- DigitalOcean API令牌。 如果你还没有一个,用它生成本指南 。 生成令牌时,请确保它具有读写范围。 这是默认值,因此如果您在生成它时不更改任何选项,它将具有读写能力。 为了更容易在命令行中使用,请务必将令牌分配给该文章中给出的变量。
第1步 - 在本地计算机上安装Docker Machine
在这一步中,我们将在运行Ubuntu 16.04的本地计算机上安装Docker Machine。
要下载并安装Docker Machine二进制文件,请键入:
wget https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-$(uname -s)-$(uname -m)
该文件的名称应该是docker-machine-Linux-x86_64
。 其重命名为docker-machine
,使其更易于使用:
mv docker-machine-Linux-x86_64 docker-machine
使其可执行:
chmod +x docker-machine
移动或复制到usr/local/bin
目录,以便将作为一个系统命令。
sudo mv docker-machine /usr/local/bin
检查版本,这将指示它已正确安装:
docker-machine version
输出应类似于
Outputdocker-machine version 0.6.0, build e27fb87
第2步 - 安装其他Docker机器脚本
有在Docker机的GitHub库设计,方便的使用3的bash脚本docker
和docker-machine
的命令。 它们提供命令完成和bash-prompt自定义。
在这一步中,我们将在本地机器上安装这三个脚本。 它们将被下载和安装到/etc/bash_completion.d
目录。
第一个脚本允许您从bash提示符中查看活动的机器。 当您在多个Dockerized机器之间工作和切换时,这很方便。 该脚本被称为docker-machine-prompt.bash
。 要下载它,请键入:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash
要完成上述文件的安装,你必须为设置自定义值PS1
在变量.bashrc
文件。 要做到这一点,用它打开nano
( PS1
是用来修改bash命令提示符下一个特殊的shell变量):
nano ~/.bashrc
内的文件中,有三条线,与PS1开始。 他们应该是这样:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
对于每一行,将$(__docker_machine_ps1 " [%s]")
接近尾声,让他们阅读:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"
保存并关闭文件。
第二个脚本被称为docker-machine-wrapper.bash
。 它增加了use
子命令将docker-machine
的命令,因此很容易Docker机之间切换。 要下载它,请键入:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash
第三个脚本被称为docker-machine.bash
。 它增加了bash补全了docker-machine
的命令。 使用下载:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash
要应用您迄今为止所做的更改,请关闭,然后重新打开终端。 如果您通过SSH登录到计算机,请退出会话并再次登录。 在命令完成docker
和docker-machine
命令现在应该工作。
第3步 - 使用Docker Machine配置Docker化主机
现在,你有Docker和Docker机在本地机器上运行,你现在可以提供一个DockerizedDroplet使用Docker机的您的帐户DigitalOcean docker-machine create
命令。 如果您还没有这样做,请使用以下方法将DigitalOcean API令牌分配给bash变量:
export DOTOKEN=your-api-token
注:本教程使用DOTOKEN作为DO API令牌bash的变量。 变量名称不必是DOTOKEN,它不必在所有大写。
为了使变量永久性的,把它放在你~/.bashrc
文件。 此步骤是可选的,但如果您希望该值在终端会话中保持不变,则此步骤是必需的。
打开与该文件nano
:
nano ~/.bashrc
在任何地方添加类似于此处的线:
export DOTOKEN=your-api-token
要激活当前终端会话中的变量,请键入:
source ~/.bashrc
要调用docker-machine create
命令成功,你必须指定(至少)的驱动程序,API令牌(或计算它的变量),并为机器的唯一名称。 要创建第一台机器,请键入:
docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name
随着机器的创建,部分输出如下。 在这个输出中,机器的名称是ubuntu1604-docker
:
Output ...
Installing Docker...
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 ubuntu1604-docker
一个SSH密钥对新主机创建的,这样docker-machine
可以远程访问。 Droplet提供了所需的操作系统,Docker安装在系统上。 当命令完成后,您的Docker Droplet启动并运行。
要从命令行查看新创建的计算机,请键入:
docker-machine ls
输出应类似于:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker - digitalocean Running tcp://104.236.120.71:2376 v1.11.1
第4步 - 在创建Docker化主机时指定基本操作系统
默认情况下,创造了Dockerized主机Docker机时所使用的基本操作系统应该是最新的Ubuntu LTS。 然而,在这个刊物的时候, docker-machine create
仍在使用Ubuntu 15.10作为基本操作系统命令,尽管Ubuntu的16.04是最新的LTS版本。 所以,如果你需要一个最近配置的机器上运行的Ubuntu 16.04,你必须通过传递与所需的版本一起指定的Ubuntu --digitalocean-image
标志的docker-machine create
命令。
例如,要使用Ubuntu 16.04创建计算机,请键入:
docker-machine create --driver digitalocean --digitalocean-image ubuntu-16-04-x64 --digitalocean-access-token $DOTOKEN machine-name
你不局限于一个版本的Ubuntu。 您可以使用DigitalOcean支持的任何操作系统创建计算机。 例如,要使用Debian 8创建计算机,请键入:
docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name
为了提供使用CentOS 7作为基本操作系统一个Dockerized主机,指定centos-7-0-x86
作为图像名称,就像这样:
docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $DOTOKEN centos7-docker
基本操作系统不是唯一的选择。 您还可以指定Droplet的大小。 默认情况下,它是最小的Droplet,它有512 MB的RAM和20 GB SSD。 下一个示例提供具有1 GB RAM的计算机:
docker-machine create --driver digitalocean --digitalocean-size 1gb --digitalocean-access-token $DOTOKEN machine-name
要查看特定于使用DigitalOcean驱动程序创建Docker机器的所有标志,请键入:
docker-machine create --driver digitalocean -h
提示:如果你现在刷新DigitalOcean仪表板的Droplet页面,你会发现你使用创建的新机docker-machine
命令。
第5步 - 执行额外的Docker机器命令
你已经看到了如何规定使用一个Dockerized主机create
子命令。 你也看到了如何列出可用来Docker机使用的主机ls
子命令。 在此步骤中,您将了解一些更多的docker-machine
的子命令。
要获取有关Dockerized主机的详细信息,请使用inspect
子命令,如下所示:
docker-machine inspect machine-name
输出应包括这样的行。 图像揭示线所使用的Linux发行版本:
Output...
"DropletName": "",
"Image": "ubuntu-15-10-x64",
"Region": "nyc3",
"SSHKeyID": 1857042,
"Size": "512mb",
"IPv6": false,
"Backups": false,
"PrivateNetworking": false,
---
要打印主机的连接配置,请键入:
docker-machine config machine-name
输出应类似于:
Output--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://104.131.102.147:2376
在输出的最后一行docker-machine config
命令显示的主机的IP地址,但你也可以通过键入得到一条信息:
docker-machine ip machine-name
如果你需要一台远程主机关机时,可以使用docker-machine
停止它:
docker-machine stop machine-name
验证它是否已停止。
docker-machine ls
机器的状态已更改:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker digitalocean Timeout
要再次启动它:
docker-machine start machine-name
验证它是否已启动:
docker-machine ls
你会看到STATE
现在设置Running
主机:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker - digitalocean Running tcp://159.203.117.16:2376 v1.11.1
然后你可以使用:
docker-machine rm machine-name
Droplet与为其创建的SSH密钥一起删除docker-machine.
现在,当你列出Dockerized主机,你不应该看你刚刚删除的一种:
docker-machine ls
第6步 - 通过SSH在Dockerized主机上执行命令
在这一点上,你已经得到关于你的机器的信息,但你可以做更多。 例如,您可以执行由使用本地LinuxDocker主机上的命令ssh
的子docker-machine
从本地系统。 本节将介绍如何执行ssh
通过命令docker-machine
以及如何打开一个SSH会话到Dockerized主机。
假设您已经配置了使用Ubuntu作为操作系统的计算机,请从本地系统执行以下命令来更新Docker主机上的包数据库:
docker-machine ssh machine-name apt-get update
您甚至可以应用可用的更新:
docker-machine ssh machine-name apt-get upgrade
不确定你的远程Docker主机使用什么内核? 键入以下内容:
docker-machine ssh machine-name uname -r
除了使用ssh
子到远程主机Docker上执行命令,你也可以用它来登录到机器本身。 它和输入一样简单:
docker-machine ssh machine-name
您的命令提示符将更改以反映您已登录到远程主机的事实:
Outputroot@machine-name#
要从远程主机退出,只需键入:
exit
第7步 - 激活Docker化主机
激活Docker主机本地Docker客户端连接到系统,这使得它可以运行正常docker
在远程系统上的命令。 要激活Docker主机,请键入以下命令:
eval $(docker-machine env machine-name)
或者,您可以使用此命令激活它:
docker-machine use machine-name
提示当处理多个泊坞主机工作时, docker-machine use
的命令是从一个切换到另一最简单的方法。
输入任何上述命令后,您的bash提示应该更改,以指示您的Docker客户端指向远程Docker主机。 它将采取这种形式。 主机名将在提示符的结尾:
username@localmachine:~ [machine-name]$
现在,任何docker
,你在这个命令提示符下键入命令将远程主机上执行。
如果主机是在终端上主动docker-machine ls
命令运行, 活动栏下的星号表明,它是活动之一。
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker * digitalocean Running tcp://45.55.183.145:2376 v1.11.1
要从远程Docker主机退出,请键入以下内容:
docker-machine use -u
第8步 - 在远程Docker主机上创建Docker容器
到目前为止,您已经在您的DigitalOcean帐户上配置了一个Dockerized Droplet,并且已经激活它,也就是说,您的Docker客户端指向它。 下一个逻辑步骤是旋转它上面的容器。 例如,让我们尝试运行官方Nginx容器。
当仍然指向你的Docker主机(由改变的提示符指示),执行这个命令运行Nginx容器:
docker run -d -p 8080:80 --name httpserver nginx
在此命令中,我们将Nginx容器中的端口80映射到Docker化主机上的端口8080,以便我们可以从任何位置访问默认的Nginx页面。
如果成功执行了命令,你就可以通过Web浏览器指向访问默认Nginx的网页http:// machine-ip :8080
。
要退出远程主机的提示,请键入。 这将关闭终端:
exit
注意:如果您打算在远程计算机上创建的容器,你Docker客户端必须是指向它-也就是说,它必须在终端活动的机器,你使用。 否则,您将在本地计算机上创建容器。 再次,让你的命令提示符是你的指导。
第9步 - 禁用崩溃报告(可选)
默认情况下,每当尝试使用Docker Machine配置Docker主机失败或Docker Machine崩溃时,一些诊断信息将自动发送到Bugsnag上的Docker帐户。 如果你不舒服,你可以通过创建一个名为的空文件禁用该报告no-error-report
在安装.docker/machine
目录。
要创建文件,请键入:
touch ~/.docker/machine/no-error-report
如果配置失败或Docker计算机崩溃,请检查文件以获取错误消息。
结论
这是介绍安装和使用Docker Machine从一个本地系统远程配置多个Docker Droplet。 现在,您应该能够根据需要在您的DigitalOcean帐户上快速配置尽可能多的Dockerized主机。
欲了解更多关于Docker机,请访问官方文档页面 。 在本教程下载三个的bash脚本托管在此页面GitHub的 。