1. 程式人生 > 程式設計 >Docker系列-(1) 原理與基本操作

Docker系列-(1) 原理與基本操作

docker.png

Docker是一個開源的應用容器引擎,基於Go語言,並遵從Apache2.0協議開源。

Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化。

Docker容器是完全使用沙箱機制,相互之間不會有任何介面,相比於虛擬機器器,容器啟動速度快,效能開銷極低。

Docker架構

首先介紹下Docker的架構,可以由下圖表示,主要由Clients、Hosts、Registries組成,下面提到了幾個專有名詞,我來一個個單獨介紹:

Picture1.png

Image

Docker映象,用於建立 Docker 容器的模板。可以看成Java裡面的Class類。

Container

獨立執行的一個或者一組容器。啟動Images後會生成Container,因此可以看成Java裡面類的例項化物件。一個Image可以啟動多次生成多個Container。

Client

Docker 客戶端,使用 Docker Api與 Docker 的守護程式通訊。一般在桌面開發中,Client和下面介紹到的Host都在同一個客戶端中,使我們感覺Client和Host是在一起的,其實原理是上單獨的兩個模組。

Host

Docker 主機,一個物理或者虛擬的機器,用於執行 Docker 守護程式和容器。

Registry

Docker倉庫,用來儲存映象。官方的Docker映象是

hub.docker.com/,註冊後可以在這裡存放你自己的Image。

Machine

docker-machine就是幫助你快速去建立安裝docker環境的工具,當我們需要在很多臺Server上安裝Docker環境時,我們可以使用Machine進行安裝。

Docker常用操作流程

日常工作中,用到的最多的Docker操作如下,主要包含:

  • 從本地提交Image到遠端映象
  • 從遠端獲取映象到本地
  • 在本地進行映象的測試與製作

Picture1.png

接下來進行Docker的實際安裝與操作。

安裝

Docker官方在這裡 docs.docker.com/install 給出了詳細的安裝流程,直接按照步驟一步步安裝,一般不會有什麼問題。

注意:在Ubuntu系統上進行安裝時,推薦使用Install using the repository的方式安裝,否則直接使用安裝包安裝會出現很多依賴問題。

Docker基本操作

Docker安裝好了以後,我們可以執行

docker run hello-world
複製程式碼

來啟動我們的第一個docker容器,正常情況下,docker會從遠端倉庫下載好hello-world以後直接啟動。

Screen Shot 2019-11-23 at 8.43.17 PM.png

Docker的操作主要包括兩類,一類是對Image映象的操作,另一類是對Container容器的操作。

容器與映象的關係

首先通過下圖再次認識一下容器與映象的關係,簡單來講,映象類似Class類,容器類似new物件。另外映象類似於Class類,也有繼承的關係,也就是說一個映象可以基於另一個映象,增加自己的新的功能和需求,這點在後續的製作Docker映象和Docker檔案結構中會詳細講到。

Picture1.png

映象操作

以下是主要的映象操作,

docker [images|rmi|tag|build|history|save|load]
複製程式碼
  • images:列出本地映象列表
  • rmi [映象名:版本]:刪除映象
  • tag [映象名:版本] [倉庫]/[映象名:版本]:標記本地映象,將其歸入某一倉庫
  • build -t [映象名:版本] [path]:Dockerfile 建立映象
  • history [映象名:版本]: 檢視指定映象的建立歷史
  • save -o xxx.tar [映象名:版本] / save [映象名:版本]>xxx.tar : 將映象儲存成 tar 歸檔檔案
  • load --input xx.tar / docker load<xxx.tar : 從歸檔檔案載入映象

容器操作

相比於對映象的操作,對於容器的操作更多,

docker [run|start|stop|restart|kill|rm|pause|unpause]
複製程式碼
  • run/create[映象名]: 建立一個新的容器並執行一個命令
  • start/stop/restart[容器名]:啟動/停止/重啟一個容器
  • kill [容器名]: 直接殺掉容器,不給程式響應時間
  • rm[容器名]:刪除已經停止的容器
  • pause/unpause[容器名]:暫停/恢復容器中的程式
docker [ps|inspect|exec|logs|export|import]
複製程式碼
  • ps:檢視容器列表(預設檢視正在執行的容器,-a檢視所有容器)
  • inspect[容器名]:檢視容器配置元資料
  • exec -it [容器名] /bin/bash:進入容器環境中互動操作
  • logs --since="2019-02-01" -f --tail=10 [容器名]:檢視容器日誌
  • cp path1 [容器名]:path 容器與主機之間的資料拷貝
  • export -o test.tar [容器名] / docker export [容器名]>test.tar : 檔案系統作為一個tar歸檔檔案
  • import test.tar [映象名:版本號]:匯入歸檔檔案,成為一個映象

以上給出了容器和映象的基本操作,一般情況下,開發比較常見的是下面三個,

1. 啟動容器並且後臺執行

docker run -d --name myhello-world hello-world
複製程式碼

Screen Shot 2019-11-23 at 9.09.25 PM.png

注意到-d引數是後臺執行,--name指定容器的名稱.

同時在執行時可以繫結容器埠,比如啟動nginx容器的時候,可以將nginx的80埠繫結到本機的8080埠。

docker run -d -p 8080:80 --name nginx nginx:latest
複製程式碼

2. 進入正在執行的容器

docker exec -it nginx /bin/bash
複製程式碼

-it互動式的啟動bash,這個在後面會經常用到,因為經常會進入容器進行除錯。

這一節主要介紹了Docker的基本架構和操作,後續會介紹Docker的檔案結構和Docker的製作。


搜尋『後端精進之路』並關注,立刻獲取最新文章和價值2000元的BATJ精品面試課程

後端精進之路.png