製作ubuntu16.04最小docker映象
背景:
最近在建設linux統一開發伺服器,用的是ubuntu16.04系統.
由於開發人員需要使用docker,因此,需要做一個docker image給大家用.
由於國家的網路限制問題,很難從dockerhub中下載到docker映象,因此,委託同事下載了一個ubuntu14.04的docker映象
雖然,docker映象是14.04,不是我們系統的16.04,但是,docker的原理是隻載入kernel,因此,docker映象14.04可以正常跑在16.04上的.
強迫症:
出了強迫症,決定自己做一個ubuntu16.04的docker映象出來.
實踐如下:
中弄下這個自動生成docker最小映象的指令碼.
mkimage-debootstrap.sh -h 檢視幫助
./mkimage-debootstrap.sh ubuntu xenial
指令碼就開始運行了(環境需要可以上外網才行)
這時關鍵來了:
到apt-get update那步時,就走不動了,因為/etc/apt/sources.list裡用的是國外的源,這裡拿不到資料
ctrl+c中斷指令碼
cd /var/tmp/docker-rootfs-debootstrap-xenial-xxxxxx-xxxxxxx
(上面的xxxx是隨機數字,根據每個人的情況不一樣)
這裡就是新檔案系統的根目錄( 指令碼是用debootstrap命令實現的).
將該路徑下的 etc/apt/sources.list改成公司映象裡的sources.list地址.
然後,檢視mkimage-debootstrap.sh裡apt-get update那之後的實現, 其實就只剩幾句有用的沒有執行了.
sudo chroot . apt update
sudo chroot . apt dist-upgrade -y
這樣,ubuntu16.04的根檔案系統就補全了
然後,將根檔案系統做成docker映象
sudo tar --numeric-owner -c . | docker import - ubuntu:xenial
檢查一下是否成功:
docker images 檢視是否有ubuntu:xenial的映象
執行:
docker run -i -t ubuntu:xenial echo success
看看是否正確輸出success.
如果是,恭喜你!
ubuntu16.04的docker映象自己動手做出來了!!