Mac OS X
注意:這個Docker的發行版本不建議使用Boot2Docker命令行,建議使用Docker Machine。使用Docker Toolbox安裝Docker Machine跟安裝其他Docker工具一樣。
你可以使用Docker Toolbox安裝Docker。Docker Toolbox包含如下的Docker 工具:
- Docker Machine 爲了運行
docker-machine
可執行包 - Docker Engine 爲了運行
docker
可執行包 - Docker Compose 爲了運行
docker-compose
可執行包 - Kitematic,Docker GUI
- 一個預設的Docker命令行環境
- Oracle VM VirtualBox
因爲Docker Daemon使用了Linux一個內核特性,原生的OS X系統不能直接運行Docker。折中的解決方案,你必須使用 docker-machine
去創建並連接到一個虛擬機上(VM)。這個VM會爲你的Mac提供Docker運行環境。
要求
你的Mac必須安裝OS X 10.8(及以上)"美洲獅"的操作系統,並安裝好Docker Toolbox。
在安裝前,先了解一些主要的概念
Docker 在Linux上安裝過程裏,你的物理機器既是本地主機也是Docker的宿主機。在網絡裏,本地主機的意思是你的計算機。Docker的宿主機是託管這容器運行的計算機。
在一個標準的Linux安裝中,Docker客戶端、Docker Daemon和一些運行中的容器會直接寄託在你的本地主機上。這意味着你可以使用標準的本地地址和端口去訪問容器,例如, localhost:8000
或 0.0.0.0:8376
。
在一個OS X 安裝裏,docker
daemon(守護進程)會運行在一個被稱爲default
的Linux虛擬機的內部。 default
是一個輕量的Linux虛擬機,它爲Mac
OS X運行Docker Daemon做了模擬。VM(虛擬機)完全運行在內存裏,它非常小,大約只有24MB,只需約5S就可以啓動。
在OS X內,Docker 宿主機的地址跟Linux虛擬一樣。當你使用 docker-machine
啓動Linux虛擬機是,它會分配一個IP地址。當你啓動一個容器是,容器上的端口會映射到虛擬機的端口上。
安裝
如果你已經運行了VirtualBox,在安裝前,你必須停止它。
-
打開 Docker Toolbox 主頁。
-
點擊安裝程序連接去下載。
-
雙擊安裝包或通過右鍵彈出的菜單選擇 "打開(Openning)" 啓動安裝。
安裝程序啓動後,會彈出 “Install Docker Toolbox” 對話框。
-
點擊 “Continue” 安裝 toolbox。
安裝程序會給你提供選項來定製標準的安裝。
默認,標準的 Docker Toolboxthe 會安裝如下工具:
- 將所有的Docker 工具二進制執行文件安裝到
/usr/local/bin
文件裏 - 將上述的執行文件的權限向所有用戶開發
- 安裝 VirtualBox;或更新已經存在的安裝
通過 “Customize(定製)” or “Change Install Location(改變安裝路徑)” 來改變默認設置。
- 將所有的Docker 工具二進制執行文件安裝到
-
點擊 “Install” 執行標準安裝。
系統會提示你輸入你的密碼。
-
輸入你的密碼繼續安裝。
安裝完成後,安裝程序會給提供一些開始操作的信息。
-
點擊 “Close” 退出安裝。
運行一個Docker容器
爲了運行一個Docker容器,你需要如下步驟:
- 創建一個新的(或啓動一個已經存在的) Docker 虛擬機
- 將你的環境切換到新的虛擬機
- 使用
docker
客戶端創建、加載和管理容器
當你創建一個機器時,如果你喜歡,你可以隨時重用它。正如所有的VirtualBox虛擬機一樣。
這裏有兩種方式可以使用你已經安裝的工具,從Docker 快速終端或從你的shell。
使用 Docker 快速啓動終端
-
打開 “Applications(應用)” 文件夾或“Launchpad”(啓動面板)。
-
找到 Docker 快速啓動終端(Quickstart Terminal)並雙擊啓動它。
應用執行流程:
- 打開一個終端窗口
- 創建一個
default
虛擬機,如果它不存在,並啓動虛擬機 - 將終端的環境指向這個虛擬機
當啓動完成後,快速啓動終端會輸出一些報告:
現在,你可以運行
docker
命令了。 -
通過運行
hello-world
容器覈實上述設置是否成功。$ docker run hello-world Unable to find image 'hello-world:latest' locally 511136ea3c5a: Pull complete 31cbccb51277: Pull complete e45a5af57b00: Pull complete hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/
一個更加通用的交互方式是使用你常用的shell 命令行和Docker 工具進行通訊。
從你的shell
在這個小節裏,假設你已經運行了一個Bash shell。你可能運行了一個一樣的shell,例如,C shell。但是它們的命令是相同的。
-
創建一個新的Docker 虛擬機。
$ docker-machine create --driver virtualbox default Creating VirtualBox VM... Creating SSH key... Starting VirtualBox VM... Starting VM... To see how to connect Docker to this machine, run: docker-machine env default
這裏在VirtualBox裏,創建了一個新的
default
虛擬機。這條命令也創建了一個機器配置文件,在
~/.docker/machine/machines/default
文件夾裏。你只需運行一次create
命令。之後,你可以在命令行裏,使用docker-machine
去啓動、停止、查詢和其他管理虛擬機。 -
列出你的可用機器。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default * virtualbox Running tcp://192.168.99.101:2376
如果你以前安裝了被棄用的Boot2Docker 應用或運行Docker 快速啓動終端,你可能還有一個
dev
的虛擬機。當你創建了default
虛擬機,docker-machine
命令會提供指令去學習如何連接虛擬機。 -
獲取你的新虛擬機的環境命令。
$ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(docker-machine env default)"
-
連接你的shell到
default
機器。$ eval "$(docker-machine env default)"
-
運行
hello-world
容器去校驗你的設置。$ docker run hello-world
瞭解 Toolbox 安裝
Toolbox 安裝了Docker 引擎二進制包,Docker二進制包存放在你的系統上。當你使用Docker 快速啓動終端或手動創建一個 default
虛擬機時,Docker
Machine 會更新 ~/.docker/machine/machines/default
文件夾到你的系統。這個文件夾包含虛擬機的配置文件。
你可以創建多個虛擬機,使用Docker Machine 在你的系統上。因此,你可能得到多個虛擬機文件夾,如果你擁有多個虛擬機。移除一個虛擬機,可以使用 docker-machine
rm <machine-name>
命令。
從Boot2Docker遷移
如果你之前使用 Boot2Docker,你擁有一個Docker boot2docker-vm
虛擬機,在你的本地系統上。如果你想讓Docker
Machine 去管理舊的虛擬機,你可以遷移它。
-
打開一個終端或Docker CLI(命令行接口),在你的系統上。
-
輸入如下命令:
$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm docker-vm
-
使用
docker-machine
命令發起虛擬的遷移通信。
docker-machine
子命令與 boot2docker
有稍許的差異。如下列表中列出了 docker-machine
等同的子命令:
boot2docker | docker-machine | docker-machine描述 |
---|---|---|
init | create | 創建一個新的docker主機 |
up | start | 啓動一個停止的機器 |
ssh | ssh | 運行一個命令或互動ssh回話,在機器上。 |
save | - | 沒有對等指令 |
down | stop | 停止一個運行中的機器 |
poweroff | stop | 停止一個運行中的機器 |
reset | restart | 重啓一個運行中的機器 |
config | inspect | 打印機器的配置詳情 |
status | ls | 列出所有機器和他們的狀態 |
info | inspect | 顯示一個機器的詳情 |
ip | ip | 顯示機器的 ip 地址 |
shellinit | env | 顯示你跟機器交互配置的shell指令 |
delete | rm | 刪除一個機器 |
download | - | 沒有對等指令 |
upgrade | upgrade | 更新一個機器的Docker客戶端到一個最新穩定版本 |
在 Mac OS X 上的一個 Docker 例子
通過這一小節,在一個虛擬機上,嘗試一些實戰性的容器任務。此時此刻,你應該擁有一個正在運行中的虛擬機並已經通過你的shell與它連接成功。爲了校驗上述的條件,執行下面的命令:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.100:2376
ACTIVE
機器,在這裏是 default
,你的一個環境將指向它。
訪問容器的端口
-
啓動一個 NGINX 容器,在你的Docker主機上。
$ docker run -d -P --name web nginx
通常,
docker run
命令會創建一個容器,運行它,之後退出。-d
標記讓容器在後臺一直運行,在docker run
命令執行完後。-P
標記發佈容器需要暴露的端口到你的本地主機;這樣,你就可以從你的Mac訪問到它們。 -
使用
docker ps
命令可以查看運行中的容器:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5fb65ff765e9 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 0.0.0.0:49156->443/tcp, 0.0.0.0:49157->80/tcp web
此刻,你可以看到
nginx
正以守護模式運行中。 -
觀察容器的端口。
$ docker port web 443/tcp -> 0.0.0.0:49156 80/tcp -> 0.0.0.0:49157
這裏告訴你,
web
容器的端口80
被映射到你的Docker主機上的49157
端口上。 -
輸入
http://localhost:49157
地址(localhost
和0.0.0.0
等同) 在你的瀏覽器內:它並沒有正常的運行。這是因爲,並沒有Docker Daemon在你的
DOCKER_HOST
地址上工作。但是,你可以把地址替換成你的Docker虛擬機地址,重試一下。 -
獲取
default
虛擬記得地址。$ docker-machine ip default 192.168.59.103
-
在你的瀏覽器內,輸入
http://192.168.59.103:49157
地址:成功!
-
想停止並刪除你正在運行中的
nginx
容器,按如下操作即可:$ docker stop web $ docker rm web
掛載一個數據捲到容器上
當你創啓一個容器時,它會通過虛擬機系統的分享了你的/Users/username
目錄。你可以使用這個分享指向的掛載目錄到你的容器上。下一個練習會向你演示如何做到這點。
-
更改你的用戶
$HOME
目錄。$ cd $HOME
-
創建一個新的
site
目錄。$ mkdir site
-
進入新建的
site
目錄裏。$ cd site
-
新建一個
index.html
文件。$ echo "my new site" > index.html
-
啓動一個新的
nginx
容器並使用site
替換它的html
文件。$ docker run -d -P -v $HOME/site:/usr/share/nginx/html \ --name mysite nginx
-
獲取
mysite
容器的端口。$ docker port mysite 80/tcp -> 0.0.0.0:49166 443/tcp -> 0.0.0.0:49165
-
在瀏覽器中打開上面的地址:
-
嘗試在你的
$HOME/site
實時地添加一個新的頁面。$ echo "This is cool" > cool.html
-
在瀏覽器裏打開新頁面。
-
停止並刪除你運行中的
mysite
容器。$ docker stop mysite $ docker rm mysite
升級 Docker Toolbox
到Docker Toolbox安裝包下載,並重新安裝即可。具體可以參考上述的諸多步驟。
卸載 Docker Toolbox
卸載,可以遵循如下步驟:
-
列出你的機器。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM dev * virtualbox Running tcp://192.168.99.100:2376 my-docker-machine virtualbox Stopped default virtualbox Stopped
-
移除每個機器。
$ docker-machine rm dev Successfully removed dev
移除一個機器,會從VirtualBox刪除它們並從
~/.docker/machine/machines
刪除相關的目錄。 -
從你的“ Applications”文件夾中移除Docker快速啓動終端和Kitematic。
-
從
/usr/local/bin
文件夾中移除docker
、docker-compose
和docker-machine
命令。$ rm /usr/local/bin/docker
-
從你的系統中刪除
~/.docker
文件夾。
知識拓展
使用 docker-machine help
列出Docker Machine的完整的命令行幫助文檔。獲取更多關於使用SSH或SCP訪問一個虛擬機的信息,請移步到 Docker
Machine文檔。
你可以通過 Docker用戶指南繼續學習。如果你Kitematic GUI的使用感興趣,請移步到Kitematic用戶指南。