Docker基本知識

2022-05-08 13:33:06 字數 4441 閱讀 6368

docker在ubuntu上的安裝

配置docker的apt源

1. 對系統源進行更新

sudo apt-get update
2. 安裝包,允許apt命令https訪問docker源

3. 新增docker官方的gpg

4. 將docker的源新增到 /etc/apt/sources.list

sudo add-apt-repository \  "

deb [arch=amd64]  \

$(lsb_release -cs) \

stable

"

安裝docker

sudo apt-get

update


sudo apt-get install docker-ce

1. 在daocloud.io上註冊乙個賬號,如果已經有賬號的可以直接登入

2. 登入後點選右上角的加速器

3. 根據自己的系統複製加速器命令,並在主機中執行 

4. 重啟docker daemon

sudo systemctl restart docker.service
docker採用的是c/s架構。客戶端向伺服器傳送請求,伺服器負責構建、執行和分發容器

docker客戶端

最常見的客戶端是docker命令,通過docker命令可以很方便的在主機上構建和執行容器,docker支援很多操作,常見的docker命令及其用途如下 

除了docker命令列工具,使用者也可以通過rest api與伺服器通訊

docker伺服器

docker daemon是伺服器元件,以linux後台服務的方式執行 

docker daemon執行在docker主機上,負責建立、執行、監控容器,構建、儲存映象。預設配置下,docker daemon只能響應來自本地主機的客戶端請求,如果要允許遠端客戶請求,需要在配置檔案中開啟tcp的監聽,具體操作如下

1. 編輯配置檔案/etc/systemd/system/multi-user-target.wants/docker.service,在環境變數execstart後面新增-h tcp:允許來自任意的客戶端連線

2. 重啟docker daemon

sudo systemctl daemon-reload

sudo systemctl docker.service

3. 客戶端在命令列裡面加上-h引數,即可與遠端服務端通訊,其中info子命令用來檢視docker伺服器的資訊 

只有容器層是可寫的,容器層下面的所有映象都是唯讀。在容器層,使用者看到的是乙個疊加之後的檔案系統

1. 新增檔案

在容器中建立檔案時,新檔案被新增到容器層中

2. 讀取檔案

在容器中讀取某個檔案時,docker會從上往下依次在各映象層中查詢檔案。一旦找到,立即將其複製到容器層,然後開啟並讀入記憶體

3. 修改檔案

在容器中修改已存在的檔案時,docker會從上往下依次在各映象層中查詢此檔案。一旦找到,立即將其複製到容器層,然後修改

4. 刪除檔案

在容器中刪除檔案時,docker也是從上往下依次在映象層中查詢檔案。找到後,會在容器層中記錄下此刪除操作

只有當需要修改時才複製乙份資料,這種特性被稱為copy-on-write。可見,容器層儲存的是映象變化的部分,不會對映象本身進行任何修改。

docker commit建立新映象的三個步驟:執行容器、修改容器、將容器儲存為新的映象

1. 執行容器:sudo docker run -it --name test

這是以互動式的方式執行乙個容器,並將容器命名為test,使用者可以根據自己的容器用途和型別自行起名,當然除了以-it引數啟動互動型容器外,也可以使用-d引數啟動守護型容器

2. 修改容器:進入容器後,先用apt-get update對容器源進行更新,然後再用apt-get install命令來按需對容器進行擴充套件

3. 將容器儲存為新的映象:sudo docker commit test test:v1

儲存新映象的格式:sudo docker commit 《容器名稱/容器id> 新映象名稱。如果要對所建立的映象進行持續性修改,可以像上面案例一樣,用test:v1的方式來給映象名稱,它表示的是映象test的版本為v1,這樣在需要對容器進行持續性修改時很有幫助

即使docker commit命令建立映象在某種意義上很方便,但docker並不建議使用者使用該命令進行映象的建立,原因有兩點:

(1)這是一種手工建立映象的方式,很容易出錯,效率低且可重複性弱

(2)使用者並不知道映象是如何建立出來的,裡面是否有惡意程式。也就是說無法對映象進行審計,存在安全隱患

雖然不建議採用docker commit的方式建立映象,但還是要學習它,因為就算是dockerfile的方式建立映象,其底層也是docker commit一層一層構建新映象的,學習docker commit能夠幫助我們深入地理解構建過程和映象的分層結構

用dockerfile建立test/ubuntu,其內容如下

下面是dockerfile的執行步驟和建立映象過程

root@ubuntu:~# pwd         ①

/root  

root@ubuntu:~# ls          ②

dockerfile   

root@ubuntu:~# docker build -t test/ubuntu .        ③

sending build context to docker daemon 32.26 kb           ④

step 1 : from ubuntu           ⑤

---> f753707788c5   

step 2 : run apt-get update && apt-get install -y vim           ⑥

---> running in 9f4d4166f7e3             ⑦

......   

setting up vim (2:7.4.1689-3ubuntu1.1) ...   

---> 35ca89798937           ⑧

removing intermediate container 9f4d4166f7e3          ⑨

successfully built 35ca89798937           ⑩

root@ubuntu:~#   

用docker build命令來構建映象,-t引數將新映象命名為test/ubuntu,命令末尾的 . 指明build context為當前目錄。docker會從build context中查詢dockerfile檔案,也可以用-f引數指定dockerfile的位置

首先docker將build context中的所有檔案傳送給docker daemon,build context為映象提供所需的檔案或目錄

這個檔案的執行過程:首先執行from,將ubuntu作為基礎映象,該步驟會給出基礎映象的id。然後執行run,安裝所需擴充套件的服務,在該過程中會生成乙個臨時容器並返回臨時容器的id,並在臨時容器中通過apt-get來安裝所需服務,安裝成功後,將容器儲存為映象,並返回該映象的id,這裡底層使用的類似docker commit命令。最後刪除前面生成的臨時容器

映象構建成功後,可以通過docker history命令驗證。docker history會顯示映象的構建歷史,也就是dockerfile的執行過程。

Docker基本知識

docker docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。簡言之,就是可以在linux上映象使用的這麼乙個容器。docker可以在什麼情況下使...

Docker容器基本知識

docker的思想來自於貨櫃,貨櫃解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被貨櫃標準化了,貨櫃和貨櫃之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在貨櫃裡封裝的好好的,那我就可以用一艘大船把他們都運走。設想一下下面的場景 1.不...

docker基本知識點與命令

cgroups control groups 資源管理 namespace 程序隔離 基於檔案許可權 selinux安全 docker的架構 準備工作 準備centos7或以上64位作業系統,關閉防火牆或新增適當規則 安裝 筆者使用yum源在ubuntu上安裝的docker在centos上執行只需稍...