為什么不用官方的鏡像?
不是不想使用,而是官方鏡像提供的功能實在是太少了,不信的話,你pull一個ubuntu:latest的進行,你看有沒有wget、curl、ssh這些功能,就連最簡單的ifconfig都沒有,可謂是最純凈、最精簡的操作系統。但是我們平時工作中往往需要一些鏡像能夠擁有盡可能多的功能,當然這就可能造成鏡像比較臃腫。
本次測試過程使用的ubuntu16.04桌面版。沒錯,帶GUI的桌面版,其實什么版並沒有什么區別,轉換為docker鏡像之后,使用方法沒有區別。
前提:iso已經在虛擬機中安裝好
操作很簡單,就是耗時---就是進入虛擬機中,然后將某些目錄的文件打成tar包,有了tar包之后,再使用docker的import命令來創建鏡像。
打包操作:
iso鏡像1.62G,打出的tar包5.6G,時間稍長,10分鍾左右,大概是在虛擬機里面的原因。
需要注意的是,在打包之前,請先確認要將哪些文件進行打包,比如下面這些目錄都可以不用打包:
- 某些用戶的家目錄是否需要打包
- 每個用戶的執行的歷史命令是否需要清除
- 一些涉及到隱私的文件
- 與系統鏡像沒有關系的文件,或者說只是系統運行過程中保存的垃圾文件或者緩存等
- 臨時文件
建議手動選擇要進行打包的目錄,比如:bin dev lib64 media opt root snap var boot etc lib mnt sbin srv usr vmlinuz這些目錄
如果你拿不准哪些文件目錄要打包,那么可以將根目錄下所有文件都打包(不推薦)
→ ~ # cd / → ~ # tar -cf system.tar bin dev lib64 media opt root snap var boot etc lib mnt sbin srv usr vmlinuz
建議打包時不要加-v選項,因為文件太多了,翻頁速度太快,顯示出來也看不清。
將打出的包拷貝到一個安裝了docker的環境,如果本地有docker的話,就可以不用移動。
導入操作
→ ~ # cat image.tar | docker import - ubuntu:16:04 sha256:e2b87a8f4f31657f9781b6dad1bdf423f3f3e62865995f4720852c81be0c4e96
查看導入的鏡像
→ ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 e2b87a8f4f31 29 minutes ago 4.97GB
運行新建的鏡像
這里可能會遇到一個問題,就是嘗試運行docker鏡像的時候,會提示錯誤docker: Error response from daemon: No command specified.
即使是使用管理員權限來運行也是不行的,
→ ~ $ docker run -t -i ubuntu:16.04 docker: Error response from daemon: No command specified. See 'docker run --help'. → ~ $ sudo docker run -t -i ubuntu:16.04 Password: docker: Error response from daemon: No command specified. See 'docker run --help'.
正確方法:
→ ~ $ docker run -t -i ubuntu:16.04 docker: Error response from daemon: No command specified. See 'docker run --help'. → ~ $ docker run -t -i ubuntu:16.04 /bin/bash #正確方法 root@f0389c5d3270:/# wget www.baidu.com
至於docker run -t -i ubuntu:16.04為什么不行,可以參考:使用Dockerfile來構建鏡像,因為他沒有設定RUN命令的參數,即容器啟動時,要運行的命令
推到鏡像庫
最后,可以將鏡像push到自己的鏡像庫,需要的時候就pull下來運行即可。