1. 程式人生 > >製作ubuntu16.04最小docker映象

製作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映象自己動手做出來了!!