运行Docker容器通常涉及三个组件:
- Docker Client是一个二进制文件,它接受用户的命令并与主机进行来回通信
- Docker Daemon在主机上运行,并负责构建,运行和分发Docker容器
- Docker Registry是用于共享和管理Docker映像的SaaS平台。 Docker Hub是一个公共中心。 私人注册表也可以轻松设置,例如Artifactory的一个。 在后续博客中对此有更多的了解。
Docker Client与Daemon进行通信,Daemon可以位于同一主机上,也可以位于其他主机上。 它请求守护程序使用pull命令从存储库中提取图像。 然后,守护程序会从Docker Hub或任何配置的注册表中下载映像。 可以从注册表下载多个映像并将其安装在Daemon主机上。
在典型的开发环境设置中,Docker客户端和主机/守护程序将位于同一主机上。 即使它们位于不同的计算机上,它仍然需要登录到主机并为该OS设置Docker Daemon。
Docker Machine只需一条命令即可将主机从零迁移到Docker。 该主机可以是您的笔记本电脑,云中或数据中心中的笔记本电脑。 它创建服务器,在其上安装Docker,然后配置Docker客户端与之对话。
这将下载boot2docker VM,设置ssh密钥,生成证书,启动VM。 它基本上负责所有无聊的工作,因此您可以专注于所有有趣的事情。
该技术提示将向您展示Docker Machine入门,并使用它在Mac上设置Docker Host。 由于github.com/docker/machine/issues/742,它在Windows上尚不可用 。
让我们开始吧!
安装Docker机器
- 从docs.docker.com/machine/#installation下载适当的二进制文件 。 Mac的Binary可以下载为:
~> curl -L https://github.com/docker/machine/releases/download/v0.1.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 403 0 403 0 0 725 0 --:--:-- --:--:-- --:--:-- 726
100 15.5M 100 15.5M 0 0 2276k 0 0:00:06 0:00:06 --:--:-- 3362k
~> chmod +x /usr/local/bin/docker-machine
~> docker-machine -v
docker-machine version 0.1.0
使用Docker Machine设置Mac Host
- 可以将Docker Machine配置为与多个驱动程序一起使用,例如Amazon Web Services,Google Compute Engine,Microsoft Azure和Oracle VirtualBox。 在开发人员笔记本电脑上,Virtual Box是一个方便的选择。 最低要求为Virtual Box 4.3.20 。 因此,请确保您安装了正确的版本。
- 使用VirtualBox提供程序创建Docker主机,并将计算机称为“ mydocker”。在调用此命令之前,请确保ssh-keygen在PATH中。 在Mac上,它已经在/ usr / bin / ssh-keygen中。 在Windows上,可以将其作为Git Bash的一部分安装。
~> docker-machine create --driver virtualbox mydocker
INFO[0000] Creating CA: /Users/arungupta/.docker/machine/certs/ca.pem
INFO[0000] Creating client certificate: /Users/arungupta/.docker/machine/certs/cert.pem
INFO[0002] Downloading boot2docker.iso to /Users/arungupta/.docker/machine/cache/boot2docker.iso...
INFO[0006] Creating SSH key...
INFO[0007] Creating VirtualBox VM...
INFO[0018] Starting VirtualBox VM...
INFO[0018] Waiting for VM to start...
INFO[0051] "mydocker" has been created and is now the active machine.
INFO[0051] To point your Docker client at it, run this in your shell: $(docker-machine env mydocker)
这将下载安装了Docker守护程序的boot2docker ,并将在运行Docker的情况下创建并启动VirtualBox VM。
~> docker-machine ip
192.168.99.101
记下该IP地址,它将用于访问应用程序。
~> docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
mydocker * virtualbox Running tcp://192.168.99.101:2376
的*
在ACTIVE
列表示这是一个活跃的主机。
~> docker-machine env mydocker
export DOCKER_TLS_VERIFY=yes
export DOCKER_CERT_PATH=/Users/arungupta/.docker/machine/machines/mydocker
export DOCKER_HOST=tcp://192.168.99.101:2376
设置Docker客户端进行通信
$(docker-machine env mydocker)
在主机上运行Java应用程序
- 在该主机上的WildFly和Docker上运行Java EE 7 动手实验中讨论的Java EE 7应用程序,方法如下:
docker run -it -p 8080:8080 arungupta/javaee7-hol
Unable to find image 'arungupta/javaee7-hol' locally
Pulling repository arungupta/javaee7-hol
a068decaf892: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete
ae0c2d0bdc10: Download complete
. . .
03:13:20,449 INFO [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-12) Adding provider class org.javaee7.movieplex7.json.MovieReader from Application class org.javaee7.movieplex7.rest.ApplicationConfig
03:13:20,554 INFO [org.wildfly.extension.undertow] (MSC service thread 1-12) JBAS017534: Registered web context: /movieplex7
03:13:20,596 INFO [org.jboss.as.server] (ServerService Thread Pool -- 31) JBAS018559: Deployed "movieplex7-1.0-SNAPSHOT.war" (runtime-name : "movieplex7-1.0-SNAPSHOT.war")
03:13:20,674 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
03:13:20,675 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
03:13:20,675 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.2.0.Final "Tweek" started in 10513ms - Started 400 of 452 services (104 services are lazy, passive or on-demand)
- 通过192.168.99.101:8080/movieplex7/访问该应用程序,如下所示:
Docker机器命令
Docker Machine命令的完整列表可以视为:
~> docker-machine
NAME:
docker-machine - Create and manage machines running Docker.
USAGE:
docker-machine [global options] command [command options] [arguments...]
VERSION:
0.1.0
AUTHOR:
Docker Machine Contributors - <https://github.com/docker/machine>
COMMANDS:
active Get or set the active machine
create Create a machine
config Print the connection config for machine
inspect Inspect information about a machine
ip Get the IP address of a machine
kill Kill a machine
ls List machines
restart Restart a machine
rm Remove a machine
env Display the commands to set up the environment for the Docker client
ssh Log into or run a command on a machine with SSH
start Start a machine
stop Stop a machine
upgrade Upgrade a machine to the latest version of Docker
url Get the URL of a machine
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug, -D Enable debug mode
--storage-path "/Users/arungupta/.docker/machine" Configures storage path [$MACHINE_STORAGE_PATH]
--tls-ca-cert "/Users/arungupta/.docker/machine/certs/ca.pem" CA to verify remotes against [$MACHINE_TLS_CA_CERT]
--tls-ca-key "/Users/arungupta/.docker/machine/certs/ca-key.pem" Private key to generate certificates [$MACHINE_TLS_CA_KEY]
--tls-client-cert "/Users/arungupta/.docker/machine/certs/cert.pem" Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
--tls-client-key "/Users/arungupta/.docker/machine/certs/key.pem" Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
--help, -h show help
--version, -v print the version
在此视频中了解有关Docker Machine,Swarm和Compose的更多信息:
为什么要使用除Docker Machine以外的其他任何东西来设置Docker主机? 否则如何设置Docker Host?
一些有用的参考:
- 完整文件
- GitHub回购
- 问题
- #freenode上的docker-machine
请享用!
翻译自: https://www.javacodegeeks.com/2015/03/docker-machine-to-setup-docker-host.html