运行Docker容器通常涉及三个组件:

  • Docker Client是一个二进制文件,它接受用户的命令并与主机进行来回通信
  • Docker Daemon在主机上运行,并负责构建,运行和分发Docker容器
  • Docker Registry是用于共享和管理Docker映像的SaaS平台。 Docker Hub是一个公共中心。 私人注册表也可以轻松设置,例如Artifactory的一个。 在后续博客中对此有更多的了解。

Docker Client与Daemon进行通信,Daemon可以位于同一主机上,也可以位于其他主机上。 它请求守护程序使用pull命令从存储库中提取图像。 然后,守护程序会从Docker Hub或任何配置的注册表中下载映像。 可以从注册表下载多个映像并将其安装在Daemon主机上。

更改已创建docker 端口 docker修改主机名_java

在典型的开发环境设置中,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机器

  1. 从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

  1. 可以将Docker Machine配置为与多个驱动程序一起使用例如Amazon Web Services,Google Compute Engine,Microsoft Azure和Oracle VirtualBox。 在开发人员笔记本电脑上,Virtual Box是一个方便的选择。 最低要求为Virtual Box 4.3.20 。 因此,请确保您安装了正确的版本。
  2. 使用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应用程序

  1. 在该主机上的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)
  1. 通过192.168.99.101:8080/movieplex7/访问该应用程序,如下所示: 更改已创建docker 端口 docker修改主机名_linux_02

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