如何提供和管理远程Docker与Docker机主机在Ubuntu 16.04

介绍

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脚本dockerdocker-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文件。 要做到这一点,用它打开nanoPS1是用来修改bash命令提示符下一个特殊的shell变量):

nano ~/.bashrc

内的文件中,有三条线,与PS1开始。 他们应该是这样:

〜/。bashrc
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]")接近尾声,让他们阅读:

〜/。bashrc
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登录到计算机,请退出会话并再次登录。 在命令完成dockerdocker-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

在任何地方添加类似于此处的线:

〜/。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的

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

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

支付宝扫一扫打赏

微信扫一扫打赏