2021-05-12 14:32:11
Docker映象及容器
一、Docker核心概念
1、映象(image)
Docker的映象是建立容器的基礎,類似虛擬機器的快照,可以理解為是一個面向Docker容器引擎的唯讀模板,比如一個映象可以是一個完整的CentOS作業系統,也可以是一個安裝了MySQL的應用程式,稱之為一個映象。
映象檔案使用者可以自己建立和更新現有映象,也可以從網上下載已經做好的應用映象直接使用。
2、容器(Container)
容器是映象的另一個執行範例,是獨立執行的一個或一組應用以及他們所必須的執行環境,包括檔案系統、系統庫類、shell環境等。映象是唯讀模板,而容器會給這個唯讀模板一個額外的可寫層。
3、倉庫(Repository)
倉庫是用來集中存放映象的地方,當自己建立了映象後,可以使用push命令將它上傳到公共倉庫(Public)或者私有倉庫(Private),這樣,當其他機器想要使用時,直接下載下來即可使用。
二、Docker映象操作
1、搜尋映象
- 通過docker search 命令搜尋遠端官方倉庫的共用映象。
- 搜尋鍵碼為httpd的映象
docker search httpd
2、獲取映象
-
對於docker來說,如果下載映象時不指定標籤,則預設會下載倉庫中最新版,因此也可通過制定標籤來下載指定版本,這裡的標籤(tag)就是用來區分映象版本的。
- 下載映象httpd
docker pull httpd
整個下載過程可以看出,映象檔案由若干層(Layer)組成,我們稱之為AUFS(檔案聯合系統),是實現增量儲存與更新的基礎,下載過程中會輸出映象的各層資訊
3、檢視映象資訊
docker images
REPOSITORY ---映象屬於的倉庫
TAG ---映象的標籤資訊,標記同一個倉庫中不同映象
IMAGE ID ---映象的唯一ID號,唯一標識了該映象
CREATED ---映象建立時間
SIZE ---映象大小
- 還可以根據映象的唯一標識ID號,獲取映象詳細資訊。
docker inspect 11426a19f1a2
- 使用docker tag命令來為原生的映象新增新的標籤。
命令格式:docker tag 映象名稱:[標籤] 新名稱:[新標籤]
- 例如:本地映象httpd新增新的名稱為apache,新的標籤為apache1
docker tag httpd apache:apache1
4、刪除映象
- 方法一:docker rmi 倉庫名稱:標籤
-
方法二:docker rmi 映象ID號
- 註:當一個映象有多個標籤的時候,docker rmi 命令只是刪除該映象多個標籤中的指定標籤,不會影響映象檔案。但當該映象只剩下一個標籤的時候,此時刪除該標籤的時候會徹底刪除該映象。
- 當使用方法二刪除時,必須確保該映象沒有被容器使用才能進行,刪除時系統會先刪除掉指向該映象的所有標籤,然後刪除映象本身。如果該映象已經被容器使用,正確的做法是先刪除依賴該映象的所有容器,在刪除映象
5、存出映象和匯入映象
存出映象
- 當需要把一台機器上的映象遷移到另一台機器上的時候,需要將映象儲存成本地檔案,這一過程叫做存出映象。
- 別的機器通過拷貝的映象,將該映象匯入到自己的映象庫中,這一過程叫做載入映象。
<br/>命令格式:docker save -o 儲存檔名 儲存的映象<br/>
- 將原生的httpd映象存出apache2
docker save -o apache2 httpd
載入映象
命令格式:docker load < 存出的映象檔案
或者:
docker --input 存出的映象檔案
6、上傳映象
-
本地儲存的映象檔案越來越多,就要一個專門的地方存放這些映象---倉庫。目前比較方便的就是公共倉庫,預設上傳的是Docker hub官方倉庫,需要註冊賬號完成登入後才能上傳。
- 在上傳映象之前還需要對本地映象新增新的標籤,然後再使用docker push命令上傳。
docker tag httpd apache:test
docker login
Username: madeb //此賬號需自己註冊
Password:
Login Succeeded
- 成功登入後就可上傳映象了。
docker push apache:test
- 註:若是需要退出登入
docker logout
三、Docker容器操作
1、容器的建立與啟動
- 新建立的容器處於停止狀態,不執行任何程式。
- 需要在其中發起一個進程來啟動容器,該進程是容器的唯一進程。
- 該進程結束時,容器也會完全停止。
<br/>命令格式:docker create [選項] 映象 執行的程式<br/>
-i 讓容器的輸入保持開啟
-t 讓Docker分配一個偽終端
docker create -it httpd /bin/bash
docker ps -a
docker start e1e05c66ec9c //開啟容器
docker ps -a
- 建立容器並執行一條命令。
- 這種方式和在本地執行命令幾乎沒有區別
docker run httpd /usr/bin/bash -c ls /
- 容器在執行完ls / 後會立馬停止,這個時候就需要讓docker以守護態在後台執行
- 例如,下面的程式就會在後台持續執行。
docker run -d httpd /usr/bin/bash -c ls / "while true; do echo hello;done"
2、容器的終止
- 想要停止容器的執行前需要檢視容器的執行狀態,以及ID號
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1e05c66ec9c httpd "/bin/bash" 26 minutes ago Up 25 minutes 80/tcp friendly_eucliddocker stop e1e05c66ec9c
- 當檢視到STATUS狀態為Exited時,即狀態終止。
3、容器的進入
- 當不進入容器時,讓容器執行任務,一條任務執行完成後容器會自動停止,為了避免繁瑣的情況,我們需要進入容器執行,且退出容器後,容器並不會停止。
命令格式:docker exec -it e1e05c66ec9c /bin/bash
-i 表示讓容器的輸入保持開啟
-t 表示讓docker分配一個偽終端
- 例如
docker exec -it e1e05c66ec9c /bin/bash
4、容器的匯出與匯入
容器匯出
- 無論這個容器是執行還是停止均可匯出。
<br/>命令格式:docker export 容器ID/名稱 > 檔名<br/>
- 將容器匯出為apache1
docker export e1e05c66ec9c > apache1
容器匯入
- 匯出的檔案從A機器拷貝到B機器,之後使用docker import命令匯入,成為映象。
<br/>命令格式:cat 檔名 | docker import - 生成的映象名稱:標籤<br/>
- 例如匯入apache1 成為本地映象
cat apache1 | docker import - apache1 註:此處必須先使用cat,不然無法匯入
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache1 latest 2bfb89eb2c5d 49 seconds ago 174MB
apache apache1 11426a19f1a2 8 days ago 178MB
httpd latest 11426a19f1a2 8 days ago 178M
5、容器的刪除
- 可以使用docker rm 命令將一個已經處於終止狀態的容器刪除。
<br/>命令格式:docker rm 容器ID/名稱<br/>
docker rm e1e05c66ec9c
docker ps -a | grep e1e05c66ec9c
- 如果要刪除一個正在執行的容器,可以新增-f選項強制刪除,但建議先將容器停止在做刪除操作。
docker預設的儲存目錄在本地/var/lib/docker/,docker的映象、容器、紀錄檔等內容全部都儲存在這裡,也可單獨使用大容量分割區來儲存這些內容,並且一般選擇LVM邏輯卷,從而避免出現docker執行過程中儲存目錄容量不足的問題。
四、Docker資源控制
1、限制cpu使用速率
- 在docker中可以通過--cpu-quota選項來限制cpu使用率,cpu的百分比是以1000為單位的。
docker run --cpu-quota 20000 e1e05c66ec9c //cpu的使用率限定為20%
- 還可以通過Cgroup組態檔立即生效
echo 20000 > /sys/fs/cgroup/cpu/docker/e1e05c66ec9ced2d6290ebe8e3fdea27f439dcbeea70921ec5d9e5b0bcffaf11/cpu.cfs_quota_us
2、多工按比例分析CPU
- 當有多個容器任務執行時,很難計算cpu的使用率,為了使容器合理使用cpu資源,可以通過--cpu-share選項設定cpu按比例共用資源,這種方??還可以實現cpu使用率的動態調整。
docker run --cpu-shares 1024 容器A
docker run --cpu-shares 1024 容器B
docker run --cpu-shares 2048 容器C
3、限制cpu核心使用
- 如果伺服器有16個核心,那麼cpu編號為0~15,使容器系結第1~4個核心使用。
docker run --cpuset-cpus 0,1,2,3 容器名
2、對記憶體使用的限制
- 在docker中可以通過docker run -m 命令來限制記憶體使用量,相應的組態檔為/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes。需要注意的是,一旦容器cgroup使用的記憶體超過了限制的容量,Linux核心將會嘗試收回這些記憶體,如果仍舊沒法控制記憶體控制在限制範圍之內,進程就會被殺死。
docker run -m 512m 容器名 //限制容器的記憶體為512m
3、對blkio的限制
- 如果是在一台伺服器上進行容器的混合部署,那麼會出現同時有幾個程式寫磁碟資料的情況,這時可以--device-write-iops選項來限制寫入的iops,相應的還有--device-read-bps選項可以限制讀取的iops,但是這種方法只能針對blkio限制的是裝置(device),而不是分割區,相應的組態檔/sys/fs/cgroup/blkio/docker/容器ID/blkioo.throttle.write_iops_device
docker run --device-write-bps /dev/sda1:1mb 容器名 //限制容器的/dev/sda1的寫入ipos為1MB
更多Docker相關教學見以下內容:
Linux 下的 Docker 安裝與使用 https://www.linuxidc.com/Linux/2018-06/152996.htm
CentOS 7安裝Docker應用容器引擎 https://www.linuxidc.com/Linux/2018-06/152856.htm
CentOS 7.3環境安裝Docker 18.03 https://www.linuxidc.com/Linux/2018-05/152356.htm
使用Docker分分鐘啟動常用應用 https://www.linuxidc.com/Linux/2017-04/142649.htm
CentOS 7使用Docker搭建GitLab伺服器 https://www.linuxidc.com/Linux/2018-04/151725.htm
30分鐘帶你了解Docker https://www.linuxidc.com/Linux/2018-08/153346.htm
Docker容器常見操作詳解 https://www.linuxidc.com/Linux/2018-08/153685.htm
Docker發布應用程式指南 https://www.linuxidc.com/Linux/2018-08/153405.htm
相關文章