學習Docker之Docker、容器和鏡像的簡介和常用命令

第一篇通過部署SpringBoot項目來見識到了Docker的強大點我,接下來就來簡單聊聊什麼是Docker?

  • 什麼是Docker
  • 鏡像與容器
  • Docker常用命令

問題

  • 小王在工作之餘接了個私單,功能很簡單,開發完之後只要在本地將程序跑起來,就能完成客戶的需求。於是小王每天晚上花個一兩個小時去開發,一週之內搞定了,然而在遠程給客戶部署的時候,出現了各種各樣的問題,光配置環境就花了兩三個小時,好不容易搞定了一臺機器,客戶說“辛苦了,還有十幾臺要幫我安裝一下”,小王聽完差點一口老血噴了出來。

  • 工作上小王開發的服務要部署在各個環境上,有的環境還不止一兩個節點,一些環境的配置反反覆覆的去做花費了小王好長的時間,真的是開發十分鐘,配置兩小時啊。

這些問題看完下面相信你心中就會有解決的辦法了。

什麼是Docker

*Docker是一個能夠把開發的應用程序自動部署到容器的開源引擎。由Docker公司的團隊編寫,基於Apache2.0開源授權協議發行
Docker在虛擬化的容器執行環境中增加了一個應用程序部署引擎。改引擎的目標就是提供一個輕量、快速的環境,能夠運行開發者的程序,並方便高效地將程序從開發者的筆記本部署到測試環境,然後再部署到生產環境。Docker及其簡潔,它所需的全部環境只是一臺僅僅安裝了兼容版本的Linux內核和二進制文件最小限制的宿主機。*
摘自《THE DOCKER BOOK》

簡單的說,程序員只要把程序開發好,然後通過Docker就可以很簡單很快速的將服務部署在任何一個安裝了Docker的機器上。這裏引入了容器的概念,Docker可以幫用戶構建和部署容器,用戶只需要把自己的應用程序或服務打包放進容器即可。
可愛的Docker.png

Docker借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計哲學中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件
每個容器都包含一個軟件鏡像,也就是說容器的“貨物”,而且與真正的貨物一樣,容器裏的軟件鏡像可以進行一些操作。例如:鏡像可以被創建、啓動、關閉、重啓以及銷燬。
和集裝箱一樣,Docker在執行上述操作時,並不關心容器裏塞進了是麼,它不管裏面是Web服務器,還是數據庫,或者是應用服務器是麼的。所有容器都按照相同的方式將內容“裝載”進去。
Docker也不關心用戶要把容器運到何方:用戶可以在自己的筆記本中構建容器,上傳到Registry,然後下載一個物理的或虛擬的服務器來測試。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量通用。(內容都在《THE DOCKER BOOK》上)

鏡像與容器

10張圖帶你深入理解Docker容器和鏡像
網上介紹鏡像與容器的文章很多,每個人都有自己的一套方式去理解,我的理解如下:

容器好比是快遞箱(集裝箱),鏡像好比是集裝箱裏的貨物(實物)。不同的貨物在裝配的時候所需要的填充物不同,如電子設備可能需要大量的泡沫紙、生鮮需要冰袋等等。這個時候Docker 就好比快遞公司,Registry好比某購物平臺。假如你想要某個實物(鏡像),快遞公司會自動將將實物(鏡像)打包好送到你的手裏,開箱即用。你也可以自己製作實物(鏡像),然後指明這個鏡像所需要的一些環境等配置,再一併提交給某購物平臺(Registry),方便他人使用。

注意:這裏只爲方便的去理解容器與鏡像,可能不同層次理解是不一樣的。當然了深層次的容器和鏡像並不是這樣子的,後續的文章會繼續介紹。

接下來就舉兩個例子

  • 通過已有鏡像來啓動
    之前自己開發了一個服務放在了DockerHub上quick-docker,這個是已知的,我們接下來直接在docker上運行這個啓動它
    已知鏡像運行.png
    如上圖,直接運行一個鏡像,docker會將鏡像pull到本地,然後按照鏡像所需要的環境去創建容器,然後去啓動。

  • 自己創建鏡像並提交
    這裏就不在贅述,可參見上一篇博客Docker初體驗,裏面有詳細的步驟。

注意:以上基於個人理解,只是便於去理解,容器和鏡像的概念遠不如此,並且容器與鏡像比較重要,希望看到這裏的客觀多留意一下,多參看官方的文檔。

Docker常用命令

images

  • 搜索image
    docker search image_name
  • 下載image
    docker pull image_name
  • 列出鏡像列表
    docker images 可加參數如下
    -a, –all=false Show all images;
    –no-trunc=false Don’t truncate output;
    -q, –quiet=false Only show numeric IDs

  • 刪除images,刪除images,通過image的id來指定刪除誰
    docker rmi <image id>

  • 刪除images id 爲none的
    docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
  • 刪除全部image
    docker rmi $(docker images -q)
  • 顯示一個鏡像的歷史
    docker history image_name 可加參數
    –no-trunc=false Don’t truncate output;
    -q, –quiet=false Only show numeric IDs

container

  • 列出當前所有正在運行的container
    docker ps
  • 列出所有的container
    docker ps -a
  • 列出最近一次啓動的container
    docker ps -l
  • 停止所有的container,這樣才能夠刪除其中的images:
    docker stop $(docker ps -a -q)
  • 刪除所有container:
    docker rm $(docker ps -a -q)

更多命令參見:菜鳥教程

最後

Docker入門還是很簡單的,本文簡單的做了Docker的介紹、容器與鏡像的相關內容還有常用的命令,希望對你有所幫助。

CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://vector4wang.tk/
簡書:https://www.jianshu.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc
如果感覺有幫助的話,點個贊哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章