【Docker篇之一】Docker鏡像及容器

1、Docker核心概念

一、鏡像(image)

Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲是一個面向Docker容器引擎的只讀模板,好比一個鏡像能夠是一個完整的centos操做系統,也能夠是一個安裝了MySQL的應用程序,稱之爲一個鏡像。
鏡像文件用戶能夠本身建立和更新現有鏡像,也能夠從網上下載已經作好的應用鏡像直接使用。docker

二、容器(Container)

容器是鏡像的另外一個運行實例,是獨立運行的一個或一組應用以及他們所必須的運行環境,包括文件系統、系統庫類、shell環境等。鏡像是隻讀模板,而容器會給這個只讀模板一個額外的可寫層。shell

三、倉庫(Repository)

倉庫是用來集中存放鏡像的地方,當本身建立了鏡像後,可使用push命令將它上傳到公共倉庫(Public)或者私有倉庫(Private),這樣,當其餘機器想要使用時,直接下載下來便可使用。apache

2、Docker鏡像操做

一、搜索鏡像

  • 經過docker search 命令搜索遠端官方倉庫的共享鏡像。
  • 搜索關鍵字爲httpd的鏡像

docker search httpdcentos

【Docker篇之一】Docker鏡像及容器

二、獲取鏡像

  • 對於docker來講,若是下載鏡像時不指定標籤,則默認會下載倉庫中最新版,所以也可經過制定標籤來下載指定版本,這裏的標籤(tag)就是用來區分鏡像版本的。bash

  • 下載鏡像httpd

docker pull httpd服務器

【Docker篇之一】Docker鏡像及容器

整個下載過程能夠看出,鏡像文件由若干層(Layer)組成,咱們稱之爲AUFS(文件聯合系統),是實現增量保存與更新的基礎,下載過程當中會輸出鏡像的各層信息 tcp

三、查看鏡像信息

docker imageside

【Docker篇之一】Docker鏡像及容器

REPOSITORY ---鏡像屬於的倉庫
TAG ---鏡像的標籤信息,標記同一個倉庫中不一樣鏡像
IMAGE ID ---鏡像的惟一ID號,惟一標識了該鏡像
CREATED ---鏡像建立時間
SIZE ---鏡像大小
  • 還能夠根據鏡像的惟一標識ID號,獲取鏡像詳細信息。

docker inspect 11426a19f1a2操作系統

【Docker篇之一】Docker鏡像及容器

  • 使用docker tag命令來爲本地的鏡像添加新的標籤。

命令格式:docker tag 鏡像名稱:[標籤] 新名稱:[新標籤]3d

  • 例如:本地鏡像httpd添加新的名稱爲apache,新的標籤爲apache1

docker tag httpd apache:apache1

【Docker篇之一】Docker鏡像及容器

四、刪除鏡像

  • 方法一:docker rmi 倉庫名稱:標籤
  • 方法二:docker rmi 鏡像ID號

  • 注:當一個鏡像有多個標籤的時候,docker rmi 命令只是刪除該鏡像多個標籤中的指定標籤,不會影響鏡像文件。但當該鏡像只剩下一個標籤的時候,此時刪除該標籤的時候會完全刪除該鏡像。
  • 當使用方法二刪除時,必須確保該鏡像沒有被容器使用才能進行,刪除時系統會先刪除掉指向該鏡像的全部標籤,而後刪除鏡像自己。若是該鏡像已經被容器使用,正確的作法是先刪除依賴該鏡像的全部容器,在刪除鏡像

五、存出鏡像和導入鏡像

存出鏡像

  • 當須要把一臺機器上的鏡像遷移到另外一臺機器上的時候,須要將鏡像保存成本地文件,這一過程叫作存出鏡像。
  • 別的機器經過拷貝的鏡像,將該鏡像導入到本身的鏡像庫中,這一過程叫作載入鏡像。

<br/>命令格式:docker save -o 存儲文件名 存儲的鏡像<br/>

  • 將本地的httpd鏡像存出apache2

docker save -o apache2 httpd

【Docker篇之一】Docker鏡像及容器

載入鏡像

命令格式:docker load < 存出的鏡像文件
或者:
docker --input 存出的鏡像文件

六、上傳鏡像

  • 本地存儲的鏡像文件愈來愈多,就要一個專門的地方存放這些鏡像---倉庫。目前比較方便的就是公共倉庫,默認上傳的是Docker hub官方倉庫,須要註冊帳號完成登陸後才能上傳。

  • 在上傳鏡像以前還須要對本地鏡像添加新的標籤,而後再使用docker push命令上傳。

docker tag httpd apache:test
docker login

Username: madeb   //此帳號需本身註冊
Password: 
Login Succeeded
  • 成功登陸後就可上傳鏡像了。

docker push apache:test

  • 注:如果須要退出登陸

docker logout

3、Docker容器操做

一、容器的建立與啓動

  • 新建立的容器處於中止狀態,不運行任何程序。
  • 須要在其中發起一個進程來啓動容器,該進程是容器的惟一進程。
  • 該進程結束時,容器也會徹底中止。

<br/>命令格式:docker create [選項] 鏡像 運行的程序<br/>

-i 讓容器的輸入保持打開
-t 讓Docker分配一個僞終端

docker create -it httpd /bin/bash
docker ps -a
docker start e1e05c66ec9c //開啓容器
docker ps -a

【Docker篇之一】Docker鏡像及容器

  • 建立容器並執行一條命令。
  • 這種方式和在本地執行命令幾乎沒有區別

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"

二、容器的終止

  • 想要中止容器的運行前須要查看容器的運行狀態,以及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_euclid

docker stop e1e05c66ec9c

  • 當查看到STATUS狀態爲Exited時,即狀態終止。

三、容器的進入

  • 當不進入容器時,讓容器執行任務,一條任務執行完成後容器會自動中止,爲了不繁瑣的狀況,咱們須要進入容器執行,且退出容器後,容器並不會中止。
命令格式:docker exec -it e1e05c66ec9c /bin/bash
-i 表示讓容器的輸入保持打開
-t 表示讓docker分配一個僞終端
  • 例如

docker exec -it e1e05c66ec9c /bin/bash

【Docker篇之一】Docker鏡像及容器

四、容器的導出與導入

容器導出

  • 不管這個容器是運行仍是中止都可導出。

<br/>命令格式:docker export 容器ID/名稱 &gt; 文件名<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

五、容器的刪除

  • 可使用docker rm 命令將一個已經處於終止狀態的容器刪除。

<br/>命令格式:docker rm 容器ID/名稱<br/>

docker rm e1e05c66ec9c
docker ps -a | grep e1e05c66ec9c

  • 若是要刪除一個正在運行的容器,能夠添加-f選項強制刪除,但建議先將容器中止在作刪除操做。

docker默認的存儲目錄在本地/var/lib/docker/,docker的鏡像、容器、日誌等內容所有都存儲在這裏,也可單獨使用大容量分區來存儲這些內容,而且通常選擇LVM邏輯卷,從而避免出現docker運行過程當中存儲目錄容量不足的問題。

4、Docker資源控制

一、限制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

二、多任務按比例分析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

三、限制cpu內核使用

  • 若是服務器有16個核心,那麼cpu編號爲0~15,使容器綁定第1~4個內核使用。

docker run --cpuset-cpus 0,1,2,3 容器名

二、對內存使用的限制

  • 在docker中能夠經過docker run -m 命令來限制內存使用量,相應的配置文件爲/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes。須要注意的是,一旦容器cgroup使用的內存超過了限制的容量,Linux內核將會嘗試收回這些內存,若是仍舊無法控制內存控制在限制範圍以內,進程就會被殺死。

docker run -m 512m 容器名 //限制容器的內存爲512m

三、對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

相關文章
相關標籤/搜索