?
This document uses PHP Chinese website manual Release
我們來(lái)看看如何在docker-machine
本地虛擬機(jī)中創(chuàng)建,使用和管理Docker主機(jī)。
隨著Docker for Mac和Docker for Windows作為Docker Toolbox的替代品的出現(xiàn),我們建議您將這些用于Docker主要工作流程。您可以使用這些應(yīng)用程序在本地系統(tǒng)上本地運(yùn)行Docker,而無(wú)需使用Docker Machine。(請(qǐng)參閱Docker for Mac與Docker工具箱,了解Mac上的解釋。)
然而,現(xiàn)在,如果您想創(chuàng)建多個(gè)本地機(jī)器,您仍然需要Docker Machine來(lái)創(chuàng)建和管理用于多節(jié)點(diǎn)實(shí)驗(yàn)的機(jī)器。Mac的Docker和Windows的Docker都包含最新版本的Docker Machine,所以當(dāng)你安裝其中任何一個(gè)時(shí),你都會(huì)得到docker-machine
。
新解決方案帶有自己的本地虛擬化解決方案,而不是Oracle VirtualBox,因此在使用Machine創(chuàng)建本地VM時(shí)請(qǐng)記住以下注意事項(xiàng)。
Docker for Mac - 您可以docker-machine create
與virtualbox
驅(qū)動(dòng)程序一起使用來(lái)創(chuàng)建其他本地計(jì)算機(jī)。
泊塢窗的Windows -您可以使用docker-machine create
與hyperv
驅(qū)動(dòng)程序來(lái)創(chuàng)建額外的本地機(jī)器。
Windows版Docker使用Microsoft Hyper-V進(jìn)行虛擬化,而Hyper-V與Oracle VirtualBox不兼容。因此,您無(wú)法同時(shí)運(yùn)行這兩個(gè)解決方案。但是仍然可以使用docker-machine
Microsoft Hyper-V驅(qū)動(dòng)程序來(lái)創(chuàng)建更多本地VM。
先決條件是:
安裝Docker for Windows并運(yùn)行(要求啟用虛擬化和Hyper-V,如安裝Docker for Windows之前需要了解的內(nèi)容所述)。
設(shè)置Hyper-V驅(qū)動(dòng)程序以使用外部虛擬網(wǎng)絡(luò)交換機(jī)請(qǐng)參閱適用于Microsoft Hyper-V主題的Docker Machine驅(qū)動(dòng)程序,其中包括/machine/drivers/hyper-v.md#example如何執(zhí)行此操作。
Docker for Mac使用HyperKit,這是一款輕量級(jí)的macOS虛擬化解決方案,構(gòu)建于macOS 10.10 Yosemite及更高版本的Hypervisor.framework之上。
目前,docker-machine create
HyperKit 沒(méi)有驅(qū)動(dòng)程序,因此您將使用virtualbox
驅(qū)動(dòng)程序創(chuàng)建本地計(jì)算機(jī)。(請(qǐng)參閱適用于Oracle VirtualBox的Docker計(jì)算機(jī)驅(qū)動(dòng)程序。)請(qǐng)注意,您可以在同一個(gè)系統(tǒng)上運(yùn)行HyperKit和Oracle VirtualBox。要了解更多信息,請(qǐng)參閱Docker for Mac與Docker Toolbox。
確保您的系統(tǒng)上正確安裝了最新的VirtualBox(作為早期Toolbox安裝的一部分,或者手動(dòng)安裝)。
Mac的Docker和Windows的Docker都需要各自操作系統(tǒng)的更新版本,因此具有較舊操作系統(tǒng)版本的用戶必須使用Docker Toolbox。
如果您在Mac或舊版Windows系統(tǒng)(不使用Hyper-V)上使用Docker Toolbox,則將使用該virtualbox
驅(qū)動(dòng)程序創(chuàng)建基于Oracle VirtualBox的本地計(jì)算機(jī)。(請(qǐng)參閱Oracle VirtualBox的Docker Machine驅(qū)動(dòng)程序。)
如果您在具有Hyper-V但無(wú)法運(yùn)行Docker for Windows(例如Windows 8 Pro)的Windows系統(tǒng)上使用Docker Toolbox,則必須使用該hyperv
驅(qū)動(dòng)程序創(chuàng)建本地計(jì)算機(jī)。(請(qǐng)參閱適用于Microsoft Hyper-V的Docker計(jì)算機(jī)驅(qū)動(dòng)程序。)
確保你的系統(tǒng)上正確安裝了最新的VirtualBox。如果您使用Toolbox或Docker for Windows安裝Docker Machine,則會(huì)自動(dòng)安裝VirtualBox。
如果您使用快速入門終端啟動(dòng)第一臺(tái)機(jī)器并將終端環(huán)境設(shè)置為指向它,則會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)機(jī)器。如果是這種情況,您仍然可以按照這些步驟進(jìn)行操作,但創(chuàng)建另一臺(tái)機(jī)器并將其命名為“默認(rèn)”以外的其他機(jī)器(例如,登臺(tái)或沙箱)。
要運(yùn)行Docker容器,您需要:
創(chuàng)建一個(gè)新的(或啟動(dòng)一個(gè)現(xiàn)有的)Docker虛擬機(jī)
將您的環(huán)境切換到新的VM
使用docker客戶端創(chuàng)建,加載和管理容器
一旦你創(chuàng)建一臺(tái)機(jī)器,你可以隨時(shí)重復(fù)使用它。像任何VirtualBox VM一樣,它在使用之間保持其配置。
這里的示例顯示了如何創(chuàng)建和啟動(dòng)計(jì)算機(jī),運(yùn)行Docker命令以及使用容器。
打開(kāi)命令外殼或終端窗口。這些命令示例顯示了一個(gè)Bash shell。對(duì)于不同的shell,例如C Shell,除非另有說(shuō)明,否則相同的命令是相同的。
使用docker-machine ls
列出可用的機(jī)器。在這個(gè)例子中,還沒(méi)有創(chuàng)建機(jī)器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
創(chuàng)建一臺(tái)機(jī)器。運(yùn)行該docker-machine create
命令,將相應(yīng)的驅(qū)動(dòng)程序傳遞給該--driver
標(biāo)志并提供一個(gè)機(jī)器名稱。如果這是您的第一臺(tái)機(jī)器,請(qǐng)將其命名default
為示例中所示。如果您已有“默認(rèn)”機(jī)器,請(qǐng)為此新機(jī)器選擇另一個(gè)名稱。
- If you are using Toolbox on Mac, Toolbox on older Windows systems without Hyper -V, or Docker for Mac, use `virtualbox` as the driver, as shown in this example. (The Docker Machine VirtualBox driver reference is [here](../drivers/virtualbox/index).) (See [prerequisites](index#prerequisite-information) above to learn more.)
- On Docker for Windows systems that support Hyper -V, use the `hyperv` driver as shown in the [Docker Machine Microsoft Hyper -V driver reference](../drivers/hyper-v/index). (See [prerequisites](index#prerequisite-information) above to learn more.) $ docker-machine create --driver virtualbox default Running pre-create checks... Creating machine... (staging) Copying /Users/ripley/.docker/machine/cache/boot2docker.iso to /Users/ripley/.docker/machine/machines/default/boot2docker.iso... (staging) Creating VirtualBox VM... (staging) Creating SSH key... (staging) Starting the VM... (staging) Waiting for an IP... Waiting for machine to be running, this may take a few minutes... Machine is running, waiting for SSH to be available... Detecting operating system of created instance... Detecting the provisioner... Provisioning with boot2docker... 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 Docker to this machine, run: docker-machine env default This command downloads a lightweight Linux distribution (boot2docker) with the Docker daemon installed, and creates and starts a VirtualBox VM with Docker running.
再次列出可用的機(jī)器以查看您新鑄造的機(jī)器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox運(yùn)行tcp://192.168.99.187:2376 v1.9.1
獲取新VM的環(huán)境命令。如docker-machine create
命令輸出中所述,您需要告訴Docker與新機(jī)器通信。你可以用docker-machine env
命令來(lái)做到這一點(diǎn)。$ docker-machine env default export DOCKER_TLS_VERIFY =“1”export DOCKER_HOST =“tcp://172.16.62.130:2376”export DOCKER_CERT_PATH =“/ Users / <yourusername> /。docker / machine / machines / default”export DOCKER_MACHINE_NAME =“默認(rèn)“#運(yùn)行這個(gè)命令來(lái)配置你的shell:#eval”$(docker-machine env default)“
將你的外殼連接到新機(jī)器上。$ eval“$(docker-machine env default)” 注意:如果您正在使用fish
,或者Windows外殼(如Powershell),cmd.exe
則上述方法將無(wú)法正常工作。相反,請(qǐng)參閱env
命令的文檔以了解如何為shell設(shè)置環(huán)境變量。這為Docker客戶端將讀取的當(dāng)前shell設(shè)置環(huán)境變量,它指定TLS設(shè)置。每次打開(kāi)新shell或重新啟動(dòng)計(jì)算機(jī)時(shí)都需要執(zhí)行此操作。(另請(qǐng)參閱如何在當(dāng)前shell中取消設(shè)置環(huán)境變量。)現(xiàn)在可以在此主機(jī)上運(yùn)行Docker命令。
運(yùn)行一個(gè)容器docker run
以驗(yàn)證您的設(shè)置。
使用docker run
下載并busybox
使用簡(jiǎn)單的'echo'命令運(yùn)行。$ docker run busybox echo hello world無(wú)法在本地查找'busybox'圖像存儲(chǔ)庫(kù)busybox e72ac664f4f0:下載完成511136ea3c5a:下載完成df7546f9f060:下載完成e433a6c5b276:下載complete hello world
獲取主機(jī)IP地址。Docker主機(jī)的IP地址上提供了任何公開(kāi)的端口,您可以使用以下docker-machine ip
命令獲得:$ docker-machine ip default 192.168.99.100
使用以下命令在容器中運(yùn)行一個(gè)Nginx網(wǎng)絡(luò)服務(wù)器:$ docker run -d -p 8000:80 nginx當(dāng)圖像完成拉動(dòng)時(shí),您可以在端口8000上的IP地址上點(diǎn)擊服務(wù)器docker-machine ip
。例如:$ curl $(docker-machine ip default):8000 <!DOCTYPE html> <html> <head> <title>歡迎來(lái)到nginx!</ title> <style> body {width:35em; 保證金:0汽車; font-family:Tahoma,Verdana,Arial,sans-serif; } </ style> </ head> <body> <h1>歡迎使用nginx!</ h1> <p>如果您看到此頁(yè)面,nginx web服務(wù)器已成功安裝并正常運(yùn)行。需要進(jìn)一步配置。</ p> <p>有關(guān)在線文檔和支持,請(qǐng)參閱<a href="http://nginx.org/"> nginx.org </a>。商業(yè)支持是可在<a href="http://nginx.com/"> nginx.com </a>上獲得。</ p>
您可以創(chuàng)建和管理盡可能多的運(yùn)行Docker的本地虛擬機(jī); docker-machine create
再次運(yùn)行。所有創(chuàng)建的機(jī)器都將出現(xiàn)在輸出中docker-machine ls
。
如果您暫時(shí)完成了主機(jī)的使用,則可以將其停止docker-machine stop
并稍后再次啟動(dòng)docker-machine start
。
$ docker-machine stop default $ docker-machine start default
如果沒(méi)有指定機(jī)器名稱docker-machine
,某些命令將假定給定的操作應(yīng)該在名為default
(如果存在)的計(jì)算機(jī)上運(yùn)行。由于使用本地虛擬機(jī)名稱default
是一種常見(jiàn)模式,因此您可以使用最常用的機(jī)器命令保存一些輸入內(nèi)容。
例如:
$ docker-machine stop Stopping "default".... Machine "default" was stopped. $ docker-machine start Starting "default"... (default) Waiting for an IP... Machine "default" was started. Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command. $ eval $(docker-machine env) $ docker-machine ip 192.168.99.100
遵循這種風(fēng)格的命令是:
- `docker-machine config` - `docker-machine env` - `docker-machine inspect` - `docker-machine ip` - `docker-machine kill` - `docker-machine provision` - `docker-machine regenerate-certs` - `docker-machine restart` - `docker-machine ssh` - `docker-machine start` - `docker-machine status` - `docker-machine stop` - `docker-machine upgrade` - `docker-machine url`
對(duì)于除default
上述以外的機(jī)器和以外的其他機(jī)器,您必須始終將該名稱明確指定為參數(shù)。
您可能想要使用當(dāng)前shell連接到不同的Docker Engine。例如,如果您運(yùn)行Docker for Mac與Docker Toolbox同時(shí)運(yùn)行,并希望與兩個(gè)不同的Docker引擎交談,或者在Docker Cloud上運(yùn)行群集,并希望在管理群集和使用Docker主機(jī)之間切換,那么情況就是這樣。在這兩種情況下,您都可以選擇將當(dāng)前shell的環(huán)境切換到不同的Docker引擎。
運(yùn)行env|grep DOCKER
以檢查是否設(shè)置了DOCKER環(huán)境變量。$ env | grep DOCKER DOCKER_HOST = tcp://192.168.99.100:2376 DOCKER_MACHINE_NAME = default DOCKER_TLS_VERIFY = 1 DOCKER_CERT_PATH = / Users / victoriabialas / .docker / machine / machines / default如果它返回輸出(如示例所示),則可以取消設(shè)置DOCKER
環(huán)境變量。
使用兩種方法之一在當(dāng)前shell中取消設(shè)置DOCKER環(huán)境變量。
- Run the `unset` command on the following `DOCKER` environment variables. unset DOCKER_TLS_VERIFY unset DOCKER_CERT_PATH unset DOCKER_MACHINE_NAME unset DOCKER_HOST
- Alternatively, run a shortcut command `docker-machine env -u` to show the command you need to run to unset all DOCKER variables: $ docker-machine env -u unset DOCKER_TLS_VERIFY unset DOCKER_HOST unset DOCKER_CERT_PATH unset DOCKER_MACHINE_NAME # Run this command to configure your shell: # eval $(docker-machine env -u) Run eval $(docker-machine env -u) to unset all DOCKER variables in the current shell.
現(xiàn)在,在運(yùn)行上述任一命令之后,該命令將不返回任何輸出。$ env | grep DOCKER如果您正在運(yùn)行Docker for Mac,則可以運(yùn)行Docker命令來(lái)與安裝了該應(yīng)用程序的Docker Engine進(jìn)行對(duì)話。如果您在Docker Cloud上運(yùn)行群集,則可以重新運(yùn)行export
用于連接群集的命令。由于Docker for Windows與Toolbox不兼容,因此此場(chǎng)景不適用,因?yàn)镈ocker for Windows使用隨附的Docker Engine和Docker Machine。
為了確保在每個(gè)shell會(huì)話開(kāi)始時(shí)自動(dòng)配置Docker客戶端,一些用戶喜歡嵌入eval $(docker-machine env default)
他們的shell配置文件(例如~/.bash_profile
文件)。但是,如果default
機(jī)器沒(méi)有運(yùn)行,這會(huì)失敗。如果需要,您可以將系統(tǒng)配置為default
自動(dòng)啟動(dòng)機(jī)器。
這里是一個(gè)如何在macOS上進(jìn)行配置的例子。
使用以下內(nèi)容創(chuàng)建一個(gè)名為com.docker.machine.default.plist
under 的文件~/Library/LaunchAgents
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string> </dict> <key>Label</key> <string>com.docker.machine.default</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/docker-machine</string> <string>start</string> <string>default</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
您可以更改default
上面的字符串,以LaunchAgent
啟動(dòng)您所需的任何機(jī)器。
在您的云提供商上配置多個(gè)Docker主機(jī)
了解機(jī)器概念
Docker機(jī)器所有支持的驅(qū)動(dòng)程序的參考頁(yè)列表
適用于Oracle VirtualBox的Docker機(jī)器驅(qū)動(dòng)程序
適用于Microsoft Hyper-V的Docker機(jī)器驅(qū)動(dòng)程序
docker-machine
命令行參考