初學者的docker學習

0 如何理解docker,是開始學習的關鍵

初學者應該如何理解docker?初學時,我對docker的感受是這樣的:docker就像是虛擬機技術的升級版,雖然之後來看,這個看法有失偏頗,但仍然可以作為一個初學者理解的好切入點。當然從官方的角度來說,docker是一種「容器」,但是和初學者解釋容器的概念,顯然比較突兀。

讓我們來看看docker有哪些和虛擬機類似的概念:

  1. docker可以啟動一個centos或ubuntu或某個linux發行版的鏡像,並提供一個bash入口,區別是docker啟動的速度更快
  2. docker可以啟動一個nginx或mysql或web類應用的鏡像,此鏡像中包含有操作系統(比如ubuntu11.04精確至版本號),依賴lib版本(比如gcc等),以及使用的app如何安裝,簡單來說,就是得到一個「純凈」的,只有你需要的app的鏡像,同樣的,docker啟動的速度還是一如既往的比虛擬化技術快
  3. docker做到了文件系統,內存,cpu等硬體資源看起來和宿主系統的隔離

從這幾點來說,似乎虛擬機可以做到的docker都可以做到,而且docker速度更快,鏡像佔用空間更少,這些特性在帶來好奇的同時也給了很多初學者疑問---docker是如何做到的

1 如何安裝Docker,避免因為防火牆打擊學習積極性

  • 首先,從官方的 docker.com/products/doc 下載安裝,當然也可以選擇:brew安裝docker 或是下載源碼包自行編譯,不過對於一個初學者來說,一種簡單的安裝模式,比較不容易打擊積極性。 tips:下載安裝docker時,如果因為眾所周知的原因導致速度夠慢,可以使用迅雷離線下載。

  • 第二步,就是驗證安裝的成果了,在terminal中使用命令:

    docker run -ti ubuntu:latest /bin/bashdocker run 是docker運行鏡像的起頭-ti 表示運行在交互模式,一般這個模式就是可以起動bash,然後和容器有命令行的交互ubuntu:lastest 中的ubuntu表示鏡像名字,鏡像由docker官方或個人提供/bin/bash 表示在docker容器中執行的命令

    當然對於大部分牆內的玩家可能一時半會會得不到結果,卡在網路獲取鏡像上,這裡可以使用國內一些雲服務公司的代理鏡像,我個人採用了daocloud 的鏡像,該鏡像配置需要先註冊一個daocloud的賬號,鏈接:加速器 DaoCloud ,注意,配置了加速器沒有辦法通過日誌等方式來驗證,只能通過看鏡像下載速度是否有顯著提升來確定,作為參考,我這裡的下載速度大約提升到1MB- 3MB每秒。

  • 接下來可以巡視一下ubuntu的文件結構,首先默認用戶為root,文件系統和mac系統截然不同,基本上是一個非常純凈的ubuntu系統。
  • 接下來在容器中做出一些修改,比如跑一個命令,安裝python:

    apt-get updateapt-get install python

    就這樣,完成了python在docker啟動的ubuntu容器內的安裝。

2 進一步來學習一些docker啟動的一些容器特性

  • 接下來,實驗一些docker的特性,先退出剛啟動的ubuntu bash,再回到mac的terminal,運行命令:

    docker images

    此時,會顯示出剛剛創建的容器列表:

    Macintoshsong-2:~ song$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest bd3d4369aebc 9 days ago 126.6 MB

    非常吃驚的是size無比小,大小才126.6MB,至於為何如此小,這是docker的核心競爭力之一,之後會仔細深入探討。

  • 如何再次進入剛才的容器,如果使用剛才的命令,docker會報錯,是因為該鏡像在本地已經創建,所以接下來要進入該鏡像需要使用以下命令:

    docker run -ti bd3d4369aebc /bin/bash其中bd3d4369aebc為image的id,在上面一條命令中得到

  • 在再次進入bash後,執行命令python,會發現python木有了,剛才安裝的python再次丟了,所以在鏡像內執行的全部操作,在退出或殺死鏡像後,不會直接在鏡像中保存。為了保存容器中更改內容,可以採用

    Macintoshsong-2:myworks song$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES254c67dc4bbe bd3d4369aebc "/bin/bash" 9 minutes ago Up 9 minutes nostalgic_poincare獲取到container id(注意,container id和image id是不同的)接著使用命令:Macintoshsong-2:myworks song$ docker commit -m "Added json gem" -a "Kate Smith" 254c67dc4bbe example/new_ubuntu:v2獲取一個新的docker鏡像,在該鏡像中,會有一個默認安裝好的python(或任何你在原有ubuntu鏡像中所作出的修改)

  • how to learn more :
    • 了解什麼是docker hub : Build your own images
    • push 一個自己製作的image到公有hub:Build your own images
    • 了解至少一個國內的hub服務,比如阿里云:Docker 鏡像服務

3 本篇總結

  • 初學者如何理解docker,我建議先不要急著了解原理或容器概念,對於用戶來說,先看如何使用,一些好的特性,可以先記錄,再做原理探討
  • 初學者如何安裝docker,以及如何啟動一個互動式的ubuntu docker容器
  • docker的特性,如image比傳統虛擬化技術小,以及如何保存一個更改後的image(保存在本地)
  • 容器內的更改如何保存,如何創建自己的容器並遞交到公有的docker hub

推薦閱讀:

Linux 下什麼 IDE 開發工具最好?
如何用 Nginx 配置透明 HTTP 和 HTTPS 代理?
你有可能買一台 Chromebook 么?
Linux 伺服器有必要開啟 iptables 防火牆么?
為什麼 Linus Torvalds 不願意將 Linux 變成 GPLv3 授權?

TAG:Docker | 虚拟化 | Linux |