1. 程式人生 > >Docker的使用初探(一):常用指令說明

Docker的使用初探(一):常用指令說明

目錄

Docker的使用初探(一):常用指令說明

前幾個星期實踐的了,再不記錄一下真的就忘乾淨了

Docker即容器技術,具體的介紹已經有很多,不打算贅述了,說一些優點

為什麼要用Docker

對我個人來說,最大的優點就是在一臺電腦上可以部署不同的環境而不用擔心它們產生衝突,最常見的衝突就是端口占用,使用Docker技術可以很方便地規避這一問題,而且便於管理,我不用在本地處理多個環境

更廣泛一點好處還有很多

  • 更高效的利用系統資源

    下文會看到,即使我在一臺普通電腦上同時執行多個環境,也不會佔用宿主機過多的資源,正常的開發仍然可以進行,更不用說專門的伺服器主機

  • 更快速的啟動時間

    傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。

  • 一致的執行環境

    開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 這段程式碼在我機器上沒問題啊

    這類問題。

  • 持續交付和部署

    對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。
    使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過 Dockerfile 來進行映象構建,並結合 持續整合(Continuous Integration) 系統進行整合測試,而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。

  • 更輕鬆的遷移

    由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上執行,無論是物理機、虛擬機器、公有云、私有云,甚至是筆記本,其執行結果是一致的。因此使用者可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況。

  • 更輕鬆的維護和擴充套件

    Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。此外,Docker 團隊同各個開源專案團隊一起維護了一大批高質量的 官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。

Docker的安裝與簡單使用

基礎的東西就不說了,不同作業系統的安裝具體看這個
Docker —— 從入門到實踐。我在文章裡主要記錄一些要點,以及在windows系統上的具體操作

國內映象加速

和npm一樣,國內網路問題,拉去映象速度比較慢,所以要配置國內映象,可以使用Docker官方的或者其他雲服務商提供的

我使用的是Windows 10系統,配置方式是在系統右下角托盤Docker圖示內右鍵選單選擇 Settings,開啟配置視窗後左側導航選單選擇 Daemon。在 Registry mirrors 一欄中填寫加速器地址 https://registry.docker-cn.com,之後點選 Apply 儲存後 Docker 就會重啟並應用配置的映象地址了。

常用指令

安裝完Docker之後再使用cmd命令開啟命令控制行中就可以使用Docker命令了,目前我只做了一些簡單的實踐,記錄一下我使用頻率比較高的指令

1. docker ps -a

首先要檢視當前安裝使用了哪些容器

這個命令會列出所有容器的狀態,容器的ID、名稱、使用的映象、對映地址等,我個人覺得是使用頻率最高的一個

2. docker pull [NAME]

與npm類似,要想建立容器,需要先選擇映象拉取到本地,在Docker Hub找到需要的映象,或者自己製作好映象後,使用docker pull命令拉取到本地,以.NET Core的官方的示例映象為例

docker pull microsoft/dotnet-samples

執行命令後等待拉取完成即可,再次拉取同一映象即更新

3. docker image ls

檢視本機的映象

拉取後檢視本地映象的狀態,會分別列出映象來自的倉庫(Repository)、標籤(通常是版本號)、映象ID、建立時間、映象大小

4. docker [image/container] rm [ID/NAME]

刪除映象或容器,rm指令的用法對於容器和映象是相同的,主要不同的是就是映象沒有名稱

如果要通過名稱刪除映象,可以這樣 docker image rm <倉庫名>:<標籤>

如果要通過ID刪除映象,可以輸入完整的ID,也可以使用短ID,短ID就是隻輸入ID的前幾個字元,一般三個以上就可以區分不同的映象

需要注意的是,如果有依託於映象的子容器就不能刪除,並且容器正在執行時也不能刪除,但是可以加上-f引數,這樣Docker會發送SIGKILL訊號給容器

另外,所有的container指令可以省掉,docker rm [ID/NAME] 就是刪除指定容器

5. docker run []

新建並啟動一個容器,這個命令比較重要且常用的引數比較多,這裡用微軟官方映象給的命令作為示例

docker run -it --rm -p 8000:80 --name aspnetcore_sample microsoft/dotnet-samples:aspnetapp
  • -t 選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上
  • -i 則讓容器的標準輸入保持開啟
  • --rm要結合前面的it引數,主要還是測試用的,加入這個引數後,當我們使用Ctrl+C關閉終端之後,這個容器會自動刪除
  • -p 埠對映,8000:80表示將容器的80埠對映到宿主機的8000埠上,也就是說訪問我本機的8000埠就相當於訪問我們部署環境的80埠了
  • --name 容器的名稱
  • 最後的那個是映象的名稱,前面提過了,<倉庫名>:<標籤>

執行這個命令之後,docker首先會看有沒有相應的映象,如果沒有就會自動執行拉取操作,我們前面拉取了微軟官方的Core應用映象,這裡則啟動一個Web示例映象,這樣會有一個拉取的操作,需要等待一會

這樣就是建立成功並啟動了,訪問http://localhost:8000就可以看到Core的示例網站

如果去掉 --rm 引數,退出後不會刪除容器,通過下文的 start 命令可以再啟動,如果不使用引數則不會再進入終端

如果有問題可以用前面說的第一個命令ps看下當前容器的狀態

6. docker start [ID/NAME]

當我們重啟docker後,一般情況下容器會處於Exited退出狀態,這個時候要通過start命令啟動,ID前面說過,使用長ID短ID均可,名稱就是建立容器是--name引數設定的

這裡用上文已經關閉容器的例子

返回容器ID一般就是啟動成功,這樣就可以繼續通過80埠訪問

7. docker exec

進入容器,還有另一個指令 docker attach 兩者有些不一樣,這裡會在下文說明原因

docker exec 後邊可以跟多個引數,這裡主要說明 -i -t 引數。

前面 run 命令也說過,這裡有些類似,只用 -i 引數時,由於沒有分配偽終端,介面沒有我們熟悉的Linux命令提示符,但命令執行結果仍然可以返回。當 -i -t 引數一起使用時,則可以看到我們熟悉的 Linux 命令提示符。

但是不知道是不是命令使用錯誤,只能在後面跟一個 ls這樣的簡單命令,如果用 cd [目錄名稱] 這種有空格的命令就無法識別,所以使用 bash 命令進入linux終端就可以正常使用linux命令了


下一節會講一講如何在Docker上部署.NET Core,不再是官方的示例,而是如果從開發環境到部署的環境,本地如何通過Dockerfile構建映象上傳到倉庫