介绍
Docker Machine是一个工具,使您可以轻松地从个人计算机远程配置和管理多个Docker主机。 这样的服务器通常被称为Docker化主机,并且当然可以用于运行Docker容器。
虽然Docker Machine可以安装在本地或远程系统上,但最常见的方法是将其安装在本地计算机(本机安装或虚拟机)上,并使用它来部署Docker化远程服务器。
尽管Docker Machine可以安装在大多数Linux发行版以及Mac OS X和Windows上,但在本教程中,我们将在运行CentOS 7的本地计算机上安装它,并使用它来配置Dockerized DigitalOcean Droplet。
先决条件
要遵循本教程,您需要以下内容:
- 一台运行CentOS 7的本地机器,安装了Docker。 (请参阅如何安装和在CentOS 7使用Docker的说明)
- DigitalOcean API令牌。 如果你还没有一个,用它生成本指南 。 生成令牌时,请确保它具有读写范围。 这是默认值,因此如果您在生成它时不更改任何选项,它将具有读写能力。 为了更容易在命令行中使用,请务必将令牌分配给该文章中给出的变量。
第1步 - 在本地计算机上安装Docker Machine
在这一步,我们将在运行CentOS 7的本地计算机上安装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
复制并粘贴以下行到该文件的末尾:
export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '
有了这个修改你~/.bashrc
文件,当您激活一台机器,它的名字会被插入到shell提示符。
保存并关闭文件。
第二个脚本被称为docker-machine-wrapper.bash
。 它增加了use
子命令将docker-machine
的命令,因此很容易Dockerized机之间切换。 要下载它,请键入
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
命令现在应该工作。 如果它不工作,它很可能是bash-completion
包没有安装。 如果是这样,请使用以下命令安装:
sudo yum install bash-completion
这应该解决它。
第3步 - 使用Docker Machine配置Docker化主机
现在,你有Docker和Docker机在本地机器上运行,你现在可以提供一个DockerizedDroplet使用Docker机的您的帐户DigitalOcean docker-machine create
命令。 如果您还没有这样做,请使用以下方法将DigitalOcean API令牌分配给bash变量:
export shell-variable=your-api-token
注:本教程使用DOTOKEN作为DO API令牌bash的变量。 变量名称不必是DOTOKEN,它不必在所有大写。
为了使变量永久性的,把它放在你~/.bashrc
文件。 此步骤是可选的,但如果您希望该值在终端会话中保持不变,则此步骤是必需的。
nano ~/.bashrc
在任何地方添加类似于此处的线:
~/.bashrcexport DOTOKEN=your-api-token
要激活当前终端会话中的变量,请键入:
source ~/.bashrc
要调用docker-machine create
命令成功,你必须指定(至少)的驱动程序,API令牌(或计算它的变量),并为远程主机的唯一名称。 要创建第一个Docker化主机,请键入:
docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name
正在创建主机的部分输出如下。 在此输出中的主机名centos-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 i up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env centos-docker
一个SSH密钥对新主机创建的,这样docker-machine
可以远程访问。 Droplet提供了所需的操作系统,Docker安装在系统上。 当命令完成后,您的Docker Droplet启动并运行。
要从命令行查看新创建的主机,请键入:
docker-machine ls
输出应类似于:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker - digitalocean Running tcp://104.236.120.71:2376 v1.11.1
第4步 - 在创建Docker主机时指定基本操作系统
这个步骤显示了如何指定正在与创建的Dockerized主机基本操作系统和版本--digitalocean-image
标志。
例如,要使用CentOS 7创建Docker化主机,请键入:
docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name
如果你想在你的服务器上运行Debian 8怎么办? 您将键入以下命令:
docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name
缺省情况下,建立一个Dockerized主机Docker机时所用的碱操作系统被认为是最新的版本(或最新的LTS版本为Ubuntu)。 然而,在这个刊物的时候, docker-machine create
仍在使用Ubuntu 15.10作为基本操作系统命令,尽管Ubuntu的16.04是最新的LTS版本。 所以,如果你需要运行的Ubuntu 16.04,你必须通过传递与所需的版本一起指定的Ubuntu --digitalocean-image
标志的docker-machine create
命令:
docker-machine create --driver digitalocean --digitalocean-image ubuntu-16-04-x64 --digitalocean-access-token $DOTOKEN machine-name
基本操作系统不是唯一的选择。 您还可以指定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": "centos-7-0-x64",
"Region": "nyc3",
"SSHKeyID": 1912961,
"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://45.55.183.145: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
centos-docker digitalocean Timeout
要再次启动它:
docker-machine start machine-name
验证它是否已启动:
docker-machine ls
你会看到STATE
现在设置Running
主机:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker - digitalocean Running tcp://159.203.117.16:2376 v1.11.1
最后,如果要删除主机:
docker-machine rm machine-name
第6步 - 通过SSH在Dockerized主机上执行命令
在这一点上,你已经得到关于你的主机的信息,但你可以做更多。 例如,您可以执行由使用本地LinuxDocker主机上的命令ssh
的子docker-machine
从本地系统。 本节将介绍如何执行ssh
通过命令docker-machine
以及如何打开一个SSH会话到Dockerized主机。
假设您已经配置了使用CentOS作为操作系统的主机,请从本地系统执行以下命令来更新Docker主机上的软件包:
docker-machine ssh machine-name yum update
不确定你的远程Docker主机使用什么内核? 键入以下内容:
docker-machine ssh machine-name uname -r
除了使用ssh
子命令远程Docker主机上执行命令,你也可以用它来登录到Dockerized主机本身。 这和输入一样简单:
docker-machine ssh machine-name
您的命令提示符将更改以反映您已登录到远程主机的事实:
root@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
命令运行, 活动栏下的星号表明,它是活动之一。
Output NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker * digitalocean Running tcp://45.55.183.145:2376 v1.11.1
注:当主机处于活动状态,任何docker
你,你使用的终端上键入命令将在远程主机上执行。 但是,所有正常的Linux命令都在本地计算机上执行。
要从远程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
。
虽然Docker主机仍然被激活(如提示中的名称所示),您应该能够列出该主机上的映像:
docker images
输出应包括您刚才使用的Nginx图像,以及您之前下载的其他图像:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3edcc5de5a79 14 minutes ago 182.7 MB
mariadb latest f7ef3a80dc89 2 days ago 382.2 MB
hello-world latest 94df4f0ce8a4 3 days ago 967 B
您还应该能够在主机上列出活动或正在运行的容器:
docker ps
如果在此步骤中运行的Nginx容器是唯一的活动容器,则输出应如下所示:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c30e8c1bb03f nginx "nginx -g 'daemon off" 14 minutes ago Up 14 minutes 443/tcp, 0.0.0.0:8080->80/tcp httpserver
要退出提示远程主机,输入exit
。 这将关闭终端:
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的 。