在物理機上部署 boot2docker 完全攻略


名稱約定:
    部署 boot2docker 的電腦稱爲“服務端”。
    要鏈接到 docker 服務端的電腦稱爲“客戶端”。
    home 目錄,是當前用戶目錄。windows 下在 %USERPROFILE% 中,linux 或 OS X 爲 ~


準備:
    boot2docker.iso 文件。本範例使用 1.11 版本,可以到 https://github.com/boot2docker/boot2docker/releases 上下載。
    U 盤一個,推薦閃迪酷豆,用於寫入 boot2docker.iso,僅僅需要 30 多 MB 的空間,多了也是浪費。
    推薦:在 docker 客戶端上準備支持 ssh 協議的軟件,windows 下如 xshell 或者 git 等。
    無“分區”的電腦一臺作爲 docker 服務端(可以是虛機)。


注意:
    在物理機上部署 boot2docker 會清空(服務端)硬盤上的所有數據。請提前將有用數據備份到其他物理介質上。


步驟:
    將 boot2docker.iso 使用軟件寫入 U 盤,這裏推薦 linux 或 OS X 下的 dd 命令。
    將服務端電腦設置成從 U 盤啓動。
    推薦步驟:進入服務端操作系統後,使用 ifconfig 查看 ip 。然後在客戶端電腦上使用 ssh 連接到服務端電腦上,方便複製黏貼下方 shell 命令。
    注意:
        此處必須保證服務端電腦硬盤的 MBR 是空的,boot2docker.iso 會進行檢測。
        如果沒有提前清理服務端硬盤數據,可以在服務端上執行 sudo dd if=/dev/zero of=/dev/sda bs=1k count=256 來刪除 MBR。
    鏈接到服務端的 shell 上執行:
    
UNPARTITIONED_HD=`fdisk -l | grep "doesn't contain a valid partition table" | head -n 1 | sed 's/Disk \(.*\) doesn.*/\1/'`
DISK_VENDOR=$(cat /sys/class/block/$(basename $UNPARTITIONED_HD /dev/)/device/vendor /sys/class/block/$(basename $UNPARTITIONED_HD /dev/)/device/model | tr -d "\n")
sudo sed -i "s/VMware, VMware Virtual S/$DISK_VENDOR/g;s/1000M/`free -m | grep Mem | awk '{print $2}'`M/g;s/ext4 -L/ext4 -i 8192 -L/g" /etc/rc.d/automount
sudo sh /etc/rc.d/automount
sudo reboot
    
    最後一行會重啓服務端電腦,此時硬盤已經準備好了。之後進行 docker 相關操作會保存在服務端硬盤上,而非內存之中。


變更 docker 用戶的密碼:
    提示:docker 用戶的初始密碼是 tcuser,在 github 官網上有紀錄。 root 用戶貌似沒有密碼,可以在 docker 下使用 sudo su - root 來切換到 root。
    在 shell 上執行:
    
MYPASS=新密碼
printf %s "#!/bin/sh
echo 'docker:`echo $MYPASS | openssl passwd -1 -stdin`' | chpasswd -e
" | sudo tee /var/lib/boot2docker/bootlocal.sh
sudo chmod 755 /var/lib/boot2docker/bootlocal.sh
>.ash_history


    “新密碼”要替換成你的密碼。
    其中 /var/lib/boot2docker/bootlocal.sh 是 boot2docker 的開機啓動配置腳本。可以將自己的自定義操作放入其中。


SSH 免密碼登錄:
    boot2docker.iso 會同時檢測 ~/.ssh/authorized_keys 和 ~/.ssh/authorized_keys2。
    兩個文件內容相同。
    但由於 ~ (home)目錄是存在於內存中的,會在重啓後恢復初始狀態,
    boot2docker.iso 原本的解決方案是將 authorized_keys2 文件壓縮包寫入 MBR 中,會在系統啓動時自動釋放到 docker 的 home 路徑下。
    
    此處使用 /var/lib/boot2docker/bootlocal.sh 來解決此問題。
    
    首先在 /var/lib/boot2docker 下建立 authorized_keys 文本文件,命令: sudo vi /var/lib/boot2docker/authorized_keys
    會切換到 vi 操作界面。
    將其客戶端電腦的 ssh 公鑰文本黏貼到此處,並保存。ssh 公鑰文件在 home 文件夾下的 .ssh 文件夾裏。文件名包含 pub 的就是。(此文件由 ssh 客戶端軟件生成)
    (黏貼後,用 ESC 鍵退出編輯狀態,輸入 :wq 保存並退出 vi 界面)
    將下面代碼追加到 /var/lib/boot2docker/bootlocal.sh 中,操作同上。


su - docker -c "mkdir ~/.ssh && cat /var/lib/boot2docker/authorized_keys > ~/.ssh/authorized_keys && ln ~/.ssh/authorized_keys ~/.ssh/authorized_keys2"


    這樣就能實現遠端 ssh 面密碼登錄 docker 用戶了。
    
在客戶端電腦上執行 docker 命令:
    到 https://github.com/docker/docker/releases 下載 windows、linux、OS X 的 docker 可執行文件。
    windows 可以直接從 https://aka.ms/tp4/docker 下載 docker.exe 文件。
    然後將其放入客戶端 path 環境變量中。
    在客戶端 home 文件夾下建立 .docker 文件夾。所有操作均使用 mkdir 命令建立即可。使用資源管理器建立可能無法成功。
    將服務端 ~docker/.docker/ 目錄下的 ca.pem cert.pem key.pem 文件複製到客戶端的 .docker/ 目錄中。
    這三個文件均爲文本文件,如果不會複製,可以使用類似 cat ~docker/.docker/ca.pem 命令,分別顯示這三個 pem 文件的內容,複製內容到客戶端的對應文件中。
    在客戶端的環境變量中加入:


DOCKER_HOST=tcp://127.0.0.1:2376
DOCKER_TLS_VERIFY=1


    其中 127.0.0.1 要替換成服務端的 ip 地址。
    此時就可以在客戶端上執行 docker 命令來控制服務端的 docker 服務了。


部署 smb (網上鄰居)服務:
    使用 docker 命令可以快速搭建 smb 服務,來讓客戶端方便的訪問服務端中的內容。
    執行:
    
docker pull dperson/samba


    由於網絡問題,如果不成功,請重複執行,直到成功爲止。
    然後執行:


docker run -d --name samba -p 139:139 -p 445:445 -v /volume1:/mount dperson/samba -u "share;123456" -s "volume2;/mount;yes;no;no"


    其中 /volume1 是想要共享的服務端的路徑,share 123456 分別爲 smb 的賬號密碼,volume2 爲 smb 路徑。
    其他詳細用法,參考 https://hub.docker.com/r/dperson/samba/ 中的說明。
    
    這時就可以通過 \\此處替換服務端ip地址\volume2 訪問服務端的 /volume1 路徑了。
    注意:
        boot2docker 將硬盤掛載到類似 /mnt/sda1 的路徑之上,其他的路徑都是在內存之中的。
        不要將文件放入其他路徑。




參考資料:
http://yuanlixg.lofter.com/post/1d2add0a_7524070
http://ahui.us/post/zai_macos_huo_windows_shang_zhi_jie_shi_yong_boot2docker.iso.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章