Docker 入門到使用

上一篇Docker 介紹到入門我們介紹了Docker並且實際弄出個虛擬的ubuntu系統,但只有這樣是不能滿足我們的,我們要的是什麼?

輕鬆的跟所有人分享我們的應用程式

因此,現在我們就來說說如何將一個完整的應用程式(環境與程式),一同打包並且上傳至DockerHub。

docker icon

首先我們先來說說上次沒說完的”container”,我們回憶一下上個階段,我們使用docker pull 指令從docker Hub取得我們的image,然後我們使用了docker run -it讓系統開始運作。

但其實這樣說並不夠精準,讓我們說的更細緻一些。

其實docker run -it這個指令是用來命令docker,讀取image內容來建立container,這邊你可能會有疑問,

那什麼是container呢?

如果我們直接字面翻譯container的話,可以知道這個的意思代表“容器”,實際上container是Docker為了系統能完全獨立的一種設計,你可以直接想成是一台小小虛擬電腦即可。

 

這樣感覺還有點模糊嗎?那我們就說得更簡單一點。

有天,你去遊戲店買了個遊戲光碟,帶回家後,你開啟了新的遊戲紀錄並玩了一下,之後你覺得這個遊戲很不錯,也想跟別人分享遊戲並炫耀一下自己的遊戲紀錄,所以你將遊戲與遊戲紀錄一起燒成了一個新的光碟,最後你不但跟朋友分享新的光碟,還把新的光碟再拿回遊戲店去賣。

我們來對應一下這個小故事。

有天,你去遊戲店(docker hub)買了個遊戲光碟(image),帶回家後,你開啟了新的遊戲紀錄並玩了一下,之後你覺得這個遊戲很不錯,也想跟別人分享遊戲並炫耀一下自己的遊戲紀錄,所以你將遊戲與遊戲紀錄(container)一起燒成了一個新的光碟(image),最後你不但跟朋友分享新的光碟(image),然後把新的光碟(image)再拿回遊戲店(docker hub)去賣。

  • 遊戲店     -> (docker hub)
  • 遊戲光碟 -> (image)
  • 遊戲與遊戲紀錄 -> (container)

這樣應該比較容易理解了吧?

那在對於Docker有了基本概念之後,我們來說一下Docker整體架構,當然我們還是以實際上常常使用的部分進行說明。

 


Docker 整體概念

docker 基礎流程圖

我們來看看上圖,可以看到裡面包含有六個“角色”與角色之間的關係,乍看之下有點複雜,因此我們將分成幾個部分來分開介紹。


  • DockerHub

DockerHub是Docker提供的雲端空間服務,提供給所有人上傳自己的image,基本上我們可以將它想像成Github。

接下來,讓我們來介紹關於“Docker Hub”的一些常用指令:

  1. 從Docker Hub 中下載 image

$ docker pull [image_tag]

2. 上傳image到Docker Hub

$ docker push [UserName]/[image_tag]

圖解:

temp


  • container

container顧名思義就是一個容器,可以根據image進行實體化,通過指令,我們可以讓image變成可執行的container,也可以將自己的container在打包回image,易於分享。

白話文來說的話,container就像是虛擬電腦,然後image就是被打包封裝起來的container。

接下來,讓我們來介紹關於“container”的一些常用指令:

  1. 根據image來實體化container

$ docker run -it --name [container_name] [image_tag]

-t 選項讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上, -i 則讓容器的標準輸入保持打開 (更多參數說明可以參考本文最後的參考文獻)

2. 啟動 container

$ docker start [container_name]

3. 進入 container

$ docker attach [container_name]

進去container之後就可以跟一般電腦一樣運作啦~ 看是要建立程式還是系統都隨你喜歡啦!

 

4. 封裝 container 成 image

$ docker commit [container_name] [image_tag]

圖解:

temp

Debug:

  • 沒辦法進入container / 沒辦法docker attach

錯誤碼:You cannot attach to a stopped container, start it first

錯誤原因: container的狀態是 exited(關閉狀態)

解決方式:先啟動container

     $ docker start [container_name]

 

  • container 啟動成功,但是會立刻變回關閉狀態(exited)

錯誤原因:代表這個container並不會保持開啟的狀態,根據原始image的設定,container會在執行完後自動結束。(更多說明可以參考本文最後的參考文獻- A docker container exits when its main process finishes.)

解決方式:刪除掉container後,重新正確的建立container

刪除container:

$ docker rm [container_name]

       重建container:

$ docker run -it --name [container_name] [image_tag] /bin/bash

 


 

終於,我們簡單的看完了如何取得建立封裝image與container,並且image與DockerHub的互動我們也重點式的說了一些,讓我們知道要如何跟別人分享我們的系統成果。但是有一個問題隱藏在這個看似完美的流程之中。

因此我們在下章節我們會來說說這個問題與dockerfile的功能(Docker 入門到使用 – dockerfile

temp

 


參考文獻:

 

Tags:
2 Comments

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *