一、前言
先回顧下上一節創建docker-machine的過程,默認情況下docker toolbox中的docker-machine使用virtual box創建虛擬機,KI首次啟動時創建虛擬機的過程,大致相當于下面這條命令:
docker-machine create --driver virtualbox default
輸出如下:
Running pre-create checks... Creating machine... (default) Copying /Users/yjmyzz/.docker/machine/cache/boot2docker.iso to /Users/yjmyzz/.docker/machine/machines/default2/boot2docker.iso... (default) Creating VirtualBox VM... (default) Creating SSH key... (default) Starting the VM... (default) 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
其大致過程為從網上下載boot2docker.iso這個文件,然后利用它創建VirtualBox VM,然后生成SSH key(方便免密碼登錄到虛擬機)、分配IP之類,創建完以后,可以用:
docker-machine env default
查看虛擬機default的狀態,如果要刪除該虛擬機,直接
rm -rf ~/.docker/machine/machines/default
現在才開始本文的正題:
二、使用vmware做為docker machine
對于已經在mac上安裝了vmwarefusion的同學來講,為了使用docker強制安裝一個virtualbox有點多余,其實docker支持vmwarefusion,只要把driver改一下就行了,命令如下:
docker-machine create --driver vmwarefusion default
創建完成后,用docker-machine ls列出所有虛擬機
可以看到類型確實為vmwarefusion,然后可以
docker-machine ssh default
連接到虛擬機的終端下,順便ping下外網地址,檢查下虛擬機里是否能上網(這個很重要,因為后面下載鏡像需要聯網)
如果有條件翻*^墻的同學,可以運行
docker pull kitematic/hello-world-nginx
直接從docker hub拉一個只有幾M的鏡像文件試試
三、設置國內鏡像加速pull
docker hub官網太慢了,還好國內有一家公司daocloud提供了加速服務,設置步驟:
3.1 先到daocloud.io網站注冊一個賬號
過程略,注冊成功后,進入控制臺
3.2 點擊控制臺上的加速器
拉到中間部分,有一個『主機監控程序』的文字鏈接,見下圖:
然后選擇主機類型,我用的是mac,所以選擇mac主機:
如果已經安裝好了docker toolbox最新版,直接點擊【安裝好了】
然后會出現二條命令,復制粘貼執行即可:
注:如果按它的提示,最后出現latest: Pulling from daocloud/daomonit not found之類的錯誤,可以嘗試
docker logout daocloud.io
然后重試,安裝成功后,執行
dao pull ubuntu
就可以感受下速度了
如果好奇dao這個命令是什么鬼?可以
which dao
查找下位置,正常情況下應該在/usr/local/bin/dao下,可以cat看下該文件的內容:
#!/bin/sh # DaoTools made by DaoCloud # Update command_exists() { command -v "$@" > /dev/null 2>&1 } lsb_dist='' if command_exists lsb_release; then lsb_dist="$(lsb_release -si)" fi if [ -z "$lsb_dist" ] && [ -r /etc/os-release ]; then lsb_dist="$(. /etc/os-release && echo "$ID")" fi lsb_dist="$(echo $lsb_dist | cut -d " " -f1)" lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')" sh_c='sh -c' if [ "$user" != 'root' ]; then if command_exists sudo; then sh_c='sudo -E sh -c' elif command_exists su; then sh_c='su -c' else echo >&2 'Error: dao needs the ability to run commands as root.' echo >&2 'We are unable to find either "sudo" or "su" available to make this happen.' fi fi update_daotools() { ## Update Bash from https://get.daocloud.io/daotools ## Update Docker Image $sh_c "docker inspect daocloud.io/daocloud/daocloud-toolset" > /dev/null 2>&1 if [ $? -eq 0 ]; then $sh_c "docker pull daocloud.io/daocloud/daocloud-toolset" fi $sh_c "curl --retry 20 --retry-delay 5 -L -o /tmp/daotools https://get.daocloud.io/daotools" if grep -q "DaoCloud" /tmp/daotools then $sh_c "chmod +x /tmp/daotools" if [ "$lsb_dist" = "coreos" ] then $sh_c "mv -f /tmp/daotools /opt/bin/dao" else $sh_c "mv -f /tmp/daotools /usr/local/bin/dao" fi fi # if [ "$(uname)" == "Darwin" ] # then # chmod 777 /usr/local/bin/dao # fi } # RUN $sh_c "docker inspect daocloud.io/daocloud/daocloud-toolset" > /dev/null 2>&1 if [ $? -eq 1 ]; then echo "Dao from DaoCloud" echo "Initializing, Please wait a minute" $sh_c "docker pull daocloud.io/daocloud/daocloud-toolset" if [ $? -eq 0 ]; then echo "Inital Success" echo fi fi # UPDATE update_daotools > /dev/null 2>&1 & # check if this is a tty mode tty > /dev/null 2>&1 if [ $? -eq 0 ] then istty="-it" else istty="" fi if [ "$(uname)" = "Darwin" ] then $sh_c "docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker:ro \ -v /mnt/sda1/daocloud:/etc/daocloud -v /tmp/daocloud:/tmp/daocloud $istty daocloud.io/daocloud/daocloud-toolset $*" elif [ "$lsb_dist" = "boot2docker" ] then $sh_c "docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker:ro \ -v /mnt/sda1/daocloud:/etc/daocloud -v /tmp/daocloud:/tmp/daocloud $istty daocloud.io/daocloud/daocloud-toolset $*" else $sh_c "docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker:ro \ -v /etc/daocloud:/etc/daocloud -v /tmp/daocloud:/tmp/daocloud --privileged $istty daocloud.io/daocloud/daocloud-toolset $*"
有興趣的可以仔細研究研究
參考文章:
http://elasticskies.com/docker-machine-on-osx-with-vmware-fusion/
文章列表