?
? ????? PHP ??? ???? ??? ?? ??
我們來看看如何在docker-machine
本地虛擬機中創(chuàng)建,使用和管理Docker主機。
隨著Docker for Mac和Docker for Windows作為Docker Toolbox的替代品的出現(xiàn),我們建議您將這些用于Docker主要工作流程。您可以使用這些應(yīng)用程序在本地系統(tǒng)上本地運行Docker,而無需使用Docker Machine。(請參閱Docker for Mac與Docker工具箱,了解Mac上的解釋。)
然而,現(xiàn)在,如果您想創(chuàng)建多個本地機器,您仍然需要Docker Machine來創(chuàng)建和管理用于多節(jié)點實驗的機器。Mac的Docker和Windows的Docker都包含最新版本的Docker Machine,所以當(dāng)你安裝其中任何一個時,你都會得到docker-machine
。
新解決方案帶有自己的本地虛擬化解決方案,而不是Oracle VirtualBox,因此在使用Machine創(chuàng)建本地VM時請記住以下注意事項。
Docker for Mac - 您可以docker-machine create
與virtualbox
驅(qū)動程序一起使用來創(chuàng)建其他本地計算機。
泊塢窗的Windows -您可以使用docker-machine create
與hyperv
驅(qū)動程序來創(chuàng)建額外的本地機器。
Windows版Docker使用Microsoft Hyper-V進行虛擬化,而Hyper-V與Oracle VirtualBox不兼容。因此,您無法同時運行這兩個解決方案。但是仍然可以使用docker-machine
Microsoft Hyper-V驅(qū)動程序來創(chuàng)建更多本地VM。
先決條件是:
安裝Docker for Windows并運行(要求啟用虛擬化和Hyper-V,如安裝Docker for Windows之前需要了解的內(nèi)容所述)。
設(shè)置Hyper-V驅(qū)動程序以使用外部虛擬網(wǎng)絡(luò)交換機請參閱適用于Microsoft Hyper-V主題的Docker Machine驅(qū)動程序,其中包括/machine/drivers/hyper-v.md#example如何執(zhí)行此操作。
Docker for Mac使用HyperKit,這是一款輕量級的macOS虛擬化解決方案,構(gòu)建于macOS 10.10 Yosemite及更高版本的Hypervisor.framework之上。
目前,docker-machine create
HyperKit 沒有驅(qū)動程序,因此您將使用virtualbox
驅(qū)動程序創(chuàng)建本地計算機。(請參閱適用于Oracle VirtualBox的Docker計算機驅(qū)動程序。)請注意,您可以在同一個系統(tǒng)上運行HyperKit和Oracle VirtualBox。要了解更多信息,請參閱Docker for Mac與Docker Toolbox。
確保您的系統(tǒng)上正確安裝了最新的VirtualBox(作為早期Toolbox安裝的一部分,或者手動安裝)。
Mac的Docker和Windows的Docker都需要各自操作系統(tǒng)的更新版本,因此具有較舊操作系統(tǒng)版本的用戶必須使用Docker Toolbox。
如果您在Mac或舊版Windows系統(tǒng)(不使用Hyper-V)上使用Docker Toolbox,則將使用該virtualbox
驅(qū)動程序創(chuàng)建基于Oracle VirtualBox的本地計算機。(請參閱Oracle VirtualBox的Docker Machine驅(qū)動程序。)
如果您在具有Hyper-V但無法運行Docker for Windows(例如Windows 8 Pro)的Windows系統(tǒng)上使用Docker Toolbox,則必須使用該hyperv
驅(qū)動程序創(chuàng)建本地計算機。(請參閱適用于Microsoft Hyper-V的Docker計算機驅(qū)動程序。)
確保你的系統(tǒng)上正確安裝了最新的VirtualBox。如果您使用Toolbox或Docker for Windows安裝Docker Machine,則會自動安裝VirtualBox。
如果您使用快速入門終端啟動第一臺機器并將終端環(huán)境設(shè)置為指向它,則會自動創(chuàng)建一個默認機器。如果是這種情況,您仍然可以按照這些步驟進行操作,但創(chuàng)建另一臺機器并將其命名為“默認”以外的其他機器(例如,登臺或沙箱)。
要運行Docker容器,您需要:
創(chuàng)建一個新的(或啟動一個現(xiàn)有的)Docker虛擬機
將您的環(huán)境切換到新的VM
使用docker客戶端創(chuàng)建,加載和管理容器
一旦你創(chuàng)建一臺機器,你可以隨時重復(fù)使用它。像任何VirtualBox VM一樣,它在使用之間保持其配置。
這里的示例顯示了如何創(chuàng)建和啟動計算機,運行Docker命令以及使用容器。
打開命令外殼或終端窗口。這些命令示例顯示了一個Bash shell。對于不同的shell,例如C Shell,除非另有說明,否則相同的命令是相同的。
使用docker-machine ls
列出可用的機器。在這個例子中,還沒有創(chuàng)建機器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
創(chuàng)建一臺機器。運行該docker-machine create
命令,將相應(yīng)的驅(qū)動程序傳遞給該--driver
標(biāo)志并提供一個機器名稱。如果這是您的第一臺機器,請將其命名default
為示例中所示。如果您已有“默認”機器,請為此新機器選擇另一個名稱。
- 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.
再次列出可用的機器以查看您新鑄造的機器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox運行tcp://192.168.99.187:2376 v1.9.1
獲取新VM的環(huán)境命令。如docker-machine create
命令輸出中所述,您需要告訴Docker與新機器通信。你可以用docker-machine env
命令來做到這一點。$ 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 =“默認“#運行這個命令來配置你的shell:#eval”$(docker-machine env default)“
將你的外殼連接到新機器上。$ eval“$(docker-machine env default)” 注意:如果您正在使用fish
,或者Windows外殼(如Powershell),cmd.exe
則上述方法將無法正常工作。相反,請參閱env
命令的文檔以了解如何為shell設(shè)置環(huán)境變量。這為Docker客戶端將讀取的當(dāng)前shell設(shè)置環(huán)境變量,它指定TLS設(shè)置。每次打開新shell或重新啟動計算機時都需要執(zhí)行此操作。(另請參閱如何在當(dāng)前shell中取消設(shè)置環(huán)境變量。)現(xiàn)在可以在此主機上運行Docker命令。
運行一個容器docker run
以驗證您的設(shè)置。
使用docker run
下載并busybox
使用簡單的'echo'命令運行。$ docker run busybox echo hello world無法在本地查找'busybox'圖像存儲庫busybox e72ac664f4f0:下載完成511136ea3c5a:下載完成df7546f9f060:下載完成e433a6c5b276:下載complete hello world
獲取主機IP地址。Docker主機的IP地址上提供了任何公開的端口,您可以使用以下docker-machine ip
命令獲得:$ docker-machine ip default 192.168.99.100
使用以下命令在容器中運行一個Nginx網(wǎng)絡(luò)服務(wù)器:$ docker run -d -p 8000:80 nginx當(dāng)圖像完成拉動時,您可以在端口8000上的IP地址上點擊服務(wù)器docker-machine ip
。例如:$ curl $(docker-machine ip default):8000 <!DOCTYPE html> <html> <head> <title>歡迎來到nginx!</ title> <style> body {width:35em; 保證金:0汽車; font-family:Tahoma,Verdana,Arial,sans-serif; } </ style> </ head> <body> <h1>歡迎使用nginx!</ h1> <p>如果您看到此頁面,nginx web服務(wù)器已成功安裝并正常運行。需要進一步配置。</ p> <p>有關(guān)在線文檔和支持,請參閱<a href="http://nginx.org/"> nginx.org </a>。商業(yè)支持是可在<a href="http://nginx.com/"> nginx.com </a>上獲得。</ p>
您可以創(chuàng)建和管理盡可能多的運行Docker的本地虛擬機; docker-machine create
再次運行。所有創(chuàng)建的機器都將出現(xiàn)在輸出中docker-machine ls
。
如果您暫時完成了主機的使用,則可以將其停止docker-machine stop
并稍后再次啟動docker-machine start
。
$ docker-machine stop default $ docker-machine start default
如果沒有指定機器名稱docker-machine
,某些命令將假定給定的操作應(yīng)該在名為default
(如果存在)的計算機上運行。由于使用本地虛擬機名稱default
是一種常見模式,因此您可以使用最常用的機器命令保存一些輸入內(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`
對于除default
上述以外的機器和以外的其他機器,您必須始終將該名稱明確指定為參數(shù)。
您可能想要使用當(dāng)前shell連接到不同的Docker Engine。例如,如果您運行Docker for Mac與Docker Toolbox同時運行,并希望與兩個不同的Docker引擎交談,或者在Docker Cloud上運行群集,并希望在管理群集和使用Docker主機之間切換,那么情況就是這樣。在這兩種情況下,您都可以選擇將當(dāng)前shell的環(huán)境切換到不同的Docker引擎。
運行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)在,在運行上述任一命令之后,該命令將不返回任何輸出。$ env | grep DOCKER如果您正在運行Docker for Mac,則可以運行Docker命令來與安裝了該應(yīng)用程序的Docker Engine進行對話。如果您在Docker Cloud上運行群集,則可以重新運行export
用于連接群集的命令。由于Docker for Windows與Toolbox不兼容,因此此場景不適用,因為Docker for Windows使用隨附的Docker Engine和Docker Machine。
為了確保在每個shell會話開始時自動配置Docker客戶端,一些用戶喜歡嵌入eval $(docker-machine env default)
他們的shell配置文件(例如~/.bash_profile
文件)。但是,如果default
機器沒有運行,這會失敗。如果需要,您可以將系統(tǒng)配置為default
自動啟動機器。
這里是一個如何在macOS上進行配置的例子。
使用以下內(nèi)容創(chuàng)建一個名為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
啟動您所需的任何機器。
在您的云提供商上配置多個Docker主機
了解機器概念
Docker機器所有支持的驅(qū)動程序的參考頁列表
適用于Oracle VirtualBox的Docker機器驅(qū)動程序
適用于Microsoft Hyper-V的Docker機器驅(qū)動程序
docker-machine
命令行參考