隨着計算機近年來的蓬勃發展,產生了大量優秀系統和軟件。軟件開發人員能夠自由選擇各類軟件應用。但同時帶來的問題就是須要維護一個很是龐大的開發、測試和生產環境。面對之中狀況,Docker容器技術橫空出世,提供了簡單、靈活、高效的解決方案,不須要過多的改變現有的使用習慣,就能夠和已有的工具配合使用。所以,掌握Docker相關技術也是途徑雲計算的必經之路。node
博文大綱:
1、Docker概述
1.Docker簡介
2.Docker和虛擬機的區別
3.Docker的使用場景
2、Docker的核心概念及安裝
1.鏡像
2.容器
3.倉庫
4.安裝Docker
3、Docker鏡像操做
1.搜索鏡像
2.獲取鏡像
3.查看鏡像信息
4.刪除鏡像
5.存出鏡像和載入鏡像
4、Docker容器操做
1.容器的建立與啓動
2.容器的運行與終止
3.容器的進入
4.容器的導入與導出
5.容器的刪除
5、Docker資源控制linux
Docker做爲開源社區最火爆的項目,它是在Linux容器裏運行應用的開源工具,是一種輕量級的「虛擬機」,docker的所有源代碼都在https://github.com/docker 進行相關維護,其官網是:https://www.docker.com 。git
Docker的Logo設計爲藍色鯨魚,拖着許多集裝箱。github
如圖所示:鯨魚能夠看做宿主機,而集裝箱能夠理解爲相互隔離的容器,每一個集裝箱中都包含本身的應用程序。正如 Docker的設計宗旨同樣:Buid、 Ship and Run Any App、 Anywhere,即經過對應用組件的封裝、發佈、部署、運行等生命週期的管理,達到應用組件級別的「一次封裝,處處運行」的目的。這裏的組件,既能夠是一個應用,也能夠是一套服務,甚至是一個完整的操做系
統。docker
做爲一種輕量級的虛擬化方式,Docker與傳統虛擬機相比具備顯著的優點。如圖:shell
Docker之因此擁有衆多優點,與操做系統虛擬化自身的特色是分不開的。傳統虛擬機須要有額外的虛擬機管理程序和虛擬操做系統層,而Docker容器是直接在操做系統層面之上實現的虛擬化,如圖:json
如今卡者須要能方便地建立運行在雲平臺上的應用,必需要脫離底層的硬件,同時還須要任什麼時候間、地點可獲取這些資源,這正是Docker所能提供的。vim
Docker的容器技術能夠在一條主句上輕鬆爲任何應用建立一個輕量級的、可移植的、自給自足的容器。經過這種容器打包應用程序,意味着簡化了從新部署、調試這些瑣碎的重複工做,極大地提升了工做效率。centos
好比:服務器從騰訊雲遷移到阿里雲,若是採用了Docker容器技術,遷移只須要在新的服務器上啓動須要的容器便可。緩存
Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲是一個面向Docker容器引擎的只讀模板。
Docker提供了簡單的機制來建立和更新現有的進行,用戶也能夠從網上下載已經作好的應用進行來直接使用。
Docker的容器是從鏡像建立的運行實例。它能夠被啓動、中止個刪除。所建立的每個容器都是互相隔離、互不可見,能夠保證安全性的平臺。能夠把容器看作一個簡易版的Linux環境,Docker利用容器來運行和隔離應用。
Docker倉庫是用來集中保存鏡像的地方,當建立了本身的鏡像以後,可使用命令將它上傳到公有倉庫或私有倉庫,這樣一來當下次要在另一條機器上使用這個鏡像是,只需從倉庫拉取下來便可!
倉庫註冊服務器是存放倉庫的地方,其中包含了多個倉庫,每一個倉庫集中存放某一類鏡像,而且使用不一樣的標籤來區分它們。目前最大的公有倉庫Docker Hub,存放了數量龐大的鏡像提供用戶下載使用。
Docker支持在主流的操做系統平臺上進行使用,包括Windows系統、Linux系統及MacOS系統等。目前最新的RedHat RHEL、Centos及Ubuntu系統官方軟件源中都已經默認自帶了Docker包,可直接安裝使用,也能夠用Docker本身的YUM源進行配置。
Centos系統下安裝Docker能夠有兩種方式:
本次博文使用Centos 7.3系統,採用兩種方式進行安裝:
(1)安裝Docker
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 //因爲安裝Docker時,SELinux會組織Docker的正常啓動 [root@localhost ~]# yum -y install docker //安裝Docker
(2)啓動Docker
[root@localhost ~]# systemctl daemon-reload //從新加載守護進程 [root@localhost ~]# systemctl start docker //啓動Docker
可是啓動Docker時,能夠會出現如下狀況,如圖:
沒法正常啓動,這時須要進行如下操做:
[root@localhost ~]# vim /etc/sysconfig/docker //修改Docker的配置文件,如圖:
[root@localhost ~]# systemctl daemon-reload //從新加載守護進程 [root@localhost ~]# systemctl restart docker //從新加載docker
這樣就啓動成功了,可是也有個別的例外,還需修改配置文件:
[root@localhost ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } //注意:這個配置文件中,有時會自動生成,有時只有「{}」,可是在這個配置文件中,不容許有「,」的出現! //這是和加速配置有關的內容 [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker //這樣從新加載Docker,就不會出現錯誤了!
本人目前只遇到這兩種狀況,這裏就先介紹這兩種常見的問題!
[root@localhost ~]# docker -v //查看Docker版本 Docker version 1.13.1, build 7f2769b/1.13.1 //注意採用這種方法進行安裝,安裝的Docker版本較低!
(1)安裝Docker
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 //因爲安裝Docker時,SELinux會組織Docker的正常啓動 [root@localhost ~]# cd /etc/yum.repos.d/ //切換到yum源目錄下 [root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //獲取阿里雲的Docker的yum配置文件 [root@localhost ~]# yum makecache //創建yum元數據緩存 [root@docker ~]# yum repolist //列出yum倉庫的可用包 ...................... //省略部份內容 docker-ce-stable/x86_64 Docker CE Stable - x86_64 61 //確認docker.....這一列有可用的包,我這裏顯示的是61個(可是,必定不能夠爲0) [root@docker ~]# yum install -y docker-ce-18.09.0-3.el7 docker-ce-cli-18.09.0-3.el7 containerd.io-1.2.0-3.el7 //安裝docker
關於containerd的解釋能夠參考:containerd相關解釋
若centos是最小化安裝,則須要執行如下命令,以便支持Docker命令自動補全
[root@docker01 ~]# yum -y install bash-completion [root@docker01~]# curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose [root@docker01 ~]# source /etc/bash_completion.d/docker-compose
(2)啓動Docker
[root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker //啓動Docker,這種方法不會出現錯誤 [root@localhost ~]# docker -v //查看Docker版本 Docker version 18.09.0, build 4d60db4 //注意這種版本是較新的,也是最新的!
這兩種安裝方式,安裝的Docker版本差別較大,根據實際狀況自行選擇!
本次博文默認使用第二種安裝方式,由於第一種安裝方式,Docker版本過低,致使與不少鏡像版本不匹配!
安裝好的Docker有兩個程序:Docker服務端和Docker客戶端。
大部分狀況Docker服務端和Docker客戶端會安裝在一臺服務器上。
Docker運行容器前須要本地存在對應的鏡像,若是不存在本地鏡像,Docker就會嘗試從默認鏡像倉庫https://hub.docker.com/ 下載。這是由Docker官方維護的一個公共倉庫,能夠知足用戶的絕大部分需求,固然用戶也可經過配置來使用自定義的鏡像倉庫。
在下載Docker鏡像時,本人強烈建議使用如下方法加速鏡像下載。方法以下:
啓用道雲提供的下載鏡像加速功能(阿里也提供了該功能,我這裏就寫道雲了)。
道雲加速器網址:https://www.daocloud.io/
流程以下:
(1)訪問道雲的官網;
(2)註冊用戶而且登陸;
前兩步完成後,請看圖操做:
看到如下界面後,往下拖頁面:
拖到此處,根據本身系統版本,複製相應的命令(基於Linux服務器就複製下面這行):
在Linux服務器上執行如下命令:
[root@localhost ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker //啓用加速文件以後,須要從新啓動docker [root@localhost~]# systemctl enable docker //在完成加速器的操做後,會在/etc/docker目錄下多了一個文件 [root@localhost ~]# cat /etc/docker/daemon.json //這個就是和加速相關的文件 {"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
[root@localhost ~]# docker search dhcp //以DHCP做爲關鍵字進行搜索鏡像 INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/networkboot/dhcpd Suitable for running a DHCP server for you... 40 [OK] docker.io docker.io/joebiellik/dhcpd DHCP server running on Alpine Linux 14 [OK] docker.io docker.io/gns3/dhcp A DHCP container for GNS3 using dnsmasq 2 [OK] docker.io docker.io/instantlinux/dhcpd-dns-pxe Serve DNS, DHCP and TFTP from a small Alpi... 2 [OK] docker.io docker.io/ictu/dhcpd-tftpd dhcpd tftpd container 1 [OK] .................#省略部份內容
返回不少包含DHCP關鍵字的鏡像,其中返回的信息包括鏡像名稱(NAME)、描述(DESCRIPTION)、星級(STARS)、是否官方建立(OFFICIAL)、是否主動建立(AUTOMATED)。默認的輸出結果會按照星級評價進行排序,表示該鏡像的受歡迎程度,在下載鏡像時,能夠參考這一項,星級越高表示越受歡迎;是否爲官方鏡像一項是指是否由官方項目組建立和維護的鏡像,通常官方項目組維護的鏡像使用單個單詞做爲鏡像名稱,咱們稱爲基礎鏡像或者根鏡像。如/reinblau/dhcp這種命名方式的鏡像,表示是由docker hub的用戶reinblau建立並維護的鏡像,帶有用戶名爲前綴;是否主動建立資源則是指是否容許用戶驗證鏡像的來源和內容。
使用docker search命令只能查找鏡像,鏡像的標籤沒法查找,所以若是須要查找docker標籤,須要從網頁上訪問鏡像倉庫https://hub.docker.com/ 進行查找。
搜索到符合需求的鏡像,可使用docker pull命令從網絡下載鏡像到本地使用。
對於Docker鏡像來講,若是下載鏡像時不指定標籤,則默認會下載最新版本的鏡像,即選擇標籤爲latest;也可經過指定的標籤下載特定版本的某一鏡像。標籤就是用來區分鏡像版本的。
[root@localhost ~]# docker pull docker.io/networkboot/dhcpd //獲取dhcp的鏡像 …………………… //省略下載過程
從整個下載過程當中能夠看出,鏡像文件是由若干層組成,咱們稱爲AUFS(聯合文件系統),是實現增量保存與更新的基礎,下載過程當中會輸出鏡像的各層信息。鏡像下載到本地以後就可使用該鏡像了。
用戶也可選擇從其餘註冊服務器倉庫下載,這時須要在倉庫名稱前執行完整的倉庫註冊服務器地址。
[root@localhost ~]# docker images docker.io/networkboot/dhcpd //查看下載本地鏡像 //若是不指定鏡像名稱,則默認查看本地的全部鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/networkboot/dhcpd latest 52cbff801df2 7 months ago 105 MB
從查看的信息能夠看到如下信息:
用戶還能夠根據鏡像的惟一標識ID號,獲取鏡像的詳細信息。好比:
[root@localhost ~]# docker inspect 52cbff801df2 //查看dhcp鏡像的詳細信息(dhcp鏡像的ID號)
鏡像的詳細信息中包括建立時間、系統版本、主機名、域名、用戶、卷、標籤、操做系統、設備ID等各類信息。
爲了在後續工做中常用這個鏡像,可使用docker tag命令爲本地鏡像添加新的標籤。
[root@localhost ~]# docker tag docker.io/networkboot/dhcpd dhcp:dhcp //將本地鏡像添加一個新的名稱爲dhcp,標籤爲dhcp [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dhcp dhcp 52cbff801df2 7 months ago 105 MB docker.io/networkboot/dhcpd latest 52cbff801df2 7 months ago 105 MB //查看效果
刪除鏡像的操做有兩種:使用鏡像的標籤刪除鏡像;使用鏡像的ID刪除鏡像;
[root@localhost ~]# docker rmi docker.io/networkboot/dhcpd:latest //指定鏡像倉庫名稱與標籤名稱進行刪除,也能夠指定鏡像的ID號進行刪除
注意:當一個鏡像有多個標籤是,docker rmi命令只是刪除該鏡像多個標籤中的指定標籤,不會影響鏡像文件。至關於只是刪除了鏡像的一個標籤而已。但當該鏡像只剩下一個標籤的時候就要當心了,再使用刪除命令就會完全刪除該鏡像。
[root@localhost ~]# docker rmi dhcp:dhcp //再進行刪除就會完全刪除鏡像 Untagged: dhcp:dhcp Deleted: sha256:52cbff801df2c6e2da3866d9f9476f20f190f64a0e886fbdfa79d843befa666a Deleted: sha256:db0874da62cbba0cdfb80d69326ddb4b48a4867d9e62f1b905212a4ddca52cf6 Deleted: sha256:67b03dec2ec327771501cfc88560f9e6cce99fb74e892491accacc6a917fa4b0 Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2 Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446 Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9
當使用docker rmi命令後面跟上鏡像的ID號時,必須確保該鏡像沒有被容器使用才能進行,刪除時系統會先刪除掉全部指向該鏡像的標籤,而後刪除該鏡像文件自己。若是該鏡像已經被容器使用,正確的作法是先刪除依賴該鏡像的全部容器,再去刪除鏡像。
當須要把一臺機器上的鏡像遷移到另外一臺機器上時,須要將鏡像保存成本地文件,這一過程叫作存出鏡像,可使用docker save命令進行存出操做。以後就能夠複製該文件到其餘機器。方法以下:
[root@localhost ~]# docker save -o dhcp docker.io/networkboot/dhcpd //將本地的dhcp鏡像存出爲文件dhcp
將存出的鏡像從A機器複製到B機器,須要在B機器上使用該鏡像,就能夠將該導出文件導入B機器的鏡像庫中,這一過程叫作載入鏡像。
[root@localhost ~]# scp 192.168.1.1:/root/dhcp . //B機器使用scp的方式將dhcp文件複製到本地 [root@localhost ~]# docker load --input dhcp //將dhcp文件中載入鏡像到本地鏡像庫中 [root@localhost ~]# docker load < dhcp //這條命令,跟上一條命令一個意思,選擇其中一種便可!
容器是Docker的另外一個核心的概念,簡單來講,容器是鏡像的一個運行實例,是獨立運行的一個或一組應用及他們所必需的運行環境,包括文件系統、系統類庫、shell環境等。鏡像是隻讀模板,而容器會給這個只讀模板提供一個額外的可寫層。
Docker的建立就是將鏡像加載到容器的過程,Docker的容器十分輕量級,用戶能夠隨時建立或者刪除。新建立的容器默認處於停滯狀態,不運行任何程序,須要在其中發起一個進程來啓動容器,這個過程是該容器的惟一進程,因此當該進程結束的時候,容器天然也會停滯。停滯的容器能夠從新啓動並保留原來的修改。可使用「docker create」命令新建一個容器。
[root@localhost ~]# docker create -it networkboot/dhcpd /bin/bash 93cfa68ee12f8ea569e5a627ff241c6652641103425a32d863279ef6e459114d //使用dhcp的鏡像建立一個容器。-i:表示讓容器的輸入保持打開;-t表示讓Docker分配一個僞終端 //下面的數字則是容器的惟一ID號
若是建立容器命令出現報錯「WARNING:IPV4 forwarding is disable Networking will not work」這樣的信息。這時須要使用修改/usr/lib/sysctl.d/00-system.conf文件,在文件中添加一條「net.ipv4.ip_forward = 1」,而後重啓網絡服務便可!
建立完容器以後,可使用「docker ps」命令查看容器的運行狀態。添加「-a」選項能夠列出系統最近一次啓動的容器。
[root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93cfa68ee12f networkboot/dhcpd "/entrypoint.sh /bin…" 9 minutes ago Created nifty_pascal //輸出的信息顯示容器的ID號、加載的鏡像、運行的程序、建立時間、目前所處的狀態、端口映射、容器名稱等。 //其中狀態一欄爲「Created」則表示當前的容器是新建立的並處於中止狀態。
啓動中止狀態的容器可使用「docker start 」命令。
[root@localhost ~]# docker start 93cfa68ee12f //啓動容器(後面是容器的ID號/名稱) 93cfa68ee12f [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93cfa68ee12f networkboot/dhcpd "/entrypoint.sh /bin…" 12 minutes ago Up 2 minutes nifty_pascal //狀態變爲UP狀態,表示容器已經處於啓動狀態
若是用戶想建立並啓動容器,能夠直接執行「docker run」命令。等同於先執行「docker create」命令,再執行「docker start」命令,須要注意只要後面的命令運行結束,容器就會中止。
[root@localhost ~]# docker run networkboot/dhcpd /bin/bash -c ls //指定一個終端,-c後面是執行的命令 bin boot dev entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e555cebe89ea networkboot/dhcpd "/entrypoint.sh /bin…" 47 seconds ago Exited (0) 46 seconds ago heuristic_galileo //查詢狀態時,Exited爲退出、中止狀態
當利用「docker run」命令來建立容器時,Docker在後臺的標準運行過程是這樣:
優點須要在後臺持續地運行這個容器,就須要讓docker容器在守護形式在後臺進行運行,能夠在「docker run」命令以後添加「-d」選項來實現,可是須要注意容器所運行的程序不能結束。好比:
[root@localhost ~]# docker run -d networkboot/dhcpd /bin/bash -c "while true;do echo ok;done;" 9a69dac64cb36c43f37bbd1a7f23c8d64f83148ab8ab6ef983d30be70cc73b47 //-d選項表示在後臺運行,後面跟一個死循環的腳本便可! [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9a69dac64cb3 networkboot/dhcpd "/entrypoint.sh /bin…" 7 seconds ago Up 7 seconds kind_mendeleev //這樣,查看狀態則是「UP」狀態,表示容器始終在啓動
若是須要終止運行的容器,可使用「docker stop」命令完成。好比:
[root@localhost ~]# docker stop 9a69dac64cb3 //中止容器,後面能夠是容器的ID或名稱 9a69dac64cb3 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9a69dac64cb3 networkboot/dhcpd "/entrypoint.sh /bin…" 2 minutes ago Exited (143) 2 seconds ago kind_mendeleev //再次查看狀態則是Exited狀態,表示終止狀態
須要進入容器進行相關操做時,可使用「docker exec」命令進入運行着的容器。好比:
[root@localhost ~]# docker exec -it 93cfa68ee12f /bin/bash //-i表示讓容器的輸入保持打開,-t選項表示讓docker分配一個僞終端 //指定容器的ID,使用的shell進入容器中 root@93cfa68ee12f:/# ls //進入容器中,命令提示符發生了變化 bin dev etc lib media opt root sbin sys usr boot entrypoint.sh home lib64 mnt proc run srv tmp var root@93cfa68ee12f:/# exit //使用exit退出容器 exit
用戶能夠將任何一個Docker容器從一臺機器遷移到另外一臺機器。在遷移過程當中,首先須要將已經建立好的容器導出爲文件,可使用「docker export」命令實現,不管這個容器是處於運行狀態仍是中止狀態都可導出。導出以後可將導出文件傳輸到其餘機器,經過相應的導入命令實現容器的遷移。
[root@localhost ~]# docker export 93cfa68ee12f > dhcpd //將容器導出爲dhcpd文件,能夠是容器的名稱也但是容器的ID號
導出的文件從A機器傳輸到B機器,以後使用「docker import」命令導入,成爲鏡像。
[root@localhost ~]# scp 192.168.1.1:/root/dhcpd . //使用scp命令將容器生成的文件傳輸到本地 [root@localhost ~]# cat dhcpd | docker import - dhcp:dhcp //導入dhcpd文件成爲本地鏡像 sha256:897fc38054e773e1798db8ba9ea41ac8565b970ec7f2d34babc478b527505e81 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dhcp dhcp 897fc38054e7 4 seconds ago 84.7 MB
可使用「docker rm」命令將一個已經終止狀態的容器進行刪除。
[root@localhost ~]# docker stop 9a69dac64cb3 //經過容器的ID號進行中止 9a69dac64cb3 [root@localhost ~]# docker rm 9a69dac64cb3 //經過容器的ID號進行刪除 9a69dac64cb3 [root@localhost ~]# docker ps -a | grep 9a69dac64cb3 //最後確認一下
若是刪除一個正在運行的額容器,能夠添加「-f」選項強制刪除,可是建議先將容器中止再進行刪除操做。
Docker默認的存儲目錄在/var/lib/docker,Docker的鏡像、容器、日誌等內容所有都存儲在此,能夠單獨使用大容量的分區來存儲這些內容,而且通常選擇創建LVM邏輯卷,從而避免Docker運行過程當中存儲目錄容量不足的問題。
[root@node3 ~]# cd /sys/fs/cgroup/cpu,cpuacct/system.slice/docker-3364d6aee72d0c01e606c047737683790ccfe2a1df14933e172cfcaf8ba2b820.scope/ [root@node3 docker-3364d6aee72d0c01e606c047737683790ccfe2a1df14933e172cfcaf8ba2b820.scope]# echo 2000 >cpu.cfs_quota_us //最大值是100000,表示100%。
咱們看到 /sys/fs/cgroup 目錄中有若干個子目錄,咱們能夠認爲這些都是受 cgroups 控制的資源以及這些資源的信息。
• blkio — 這個子系統爲塊設備設定輸入/輸出限制,好比物理設備(磁盤,固態硬盤,USB 等等)。
• cpu — 這個子系統使用調度程序提供對 CPU 的 cgroup 任務訪問。
• cpuacct — 這個子系統自動生成 cgroup 中任務所使用的 CPU 報告。
• cpuset — 這個子系統爲 cgroup 中的任務分配獨立 CPU(在多核系統)和內存節點。
• devices — 這個子系統可容許或者拒絕 cgroup 中的任務訪問設備。
• freezer — 這個子系統掛起或者恢復 cgroup 中的任務。
• memory — 這個子系統設定 cgroup 中任務使用的內存限制,並自動生成內存資源使用報告。
• net_cls — 這個子系統使用等級識別符(classid)標記網絡數據包,可容許 Linux 流量控制程序(tc)識別從具體 cgroup 中生成的數據包。
• net_prio — 這個子系統用來設計網絡流量的優先級
hugetlb — 這個子系統主要針對於HugeTLB系統進行限制,這是一個大頁文件系統。
當多個容器任務運行時,很難計算CPU的使用率,爲了使容器合理使用CPU資源,能夠經過如下方式對單個容器進行限制。
[root@node3 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dhcp dhcp 56c1dba24f3e 23 hours ago 96.6 MB [root@node3 ~]# docker run -tid --cpu-shares 1024 56c1dba24f3e /bin/bash -c ls
限制新建的容器使用第一個內核
[root@node3 ~]# cat /proc/cpuinfo| grep "processor"| wc -l 2 [root@node3 ~]# docker run -tid --cpuset-cpus 1 56c1dba24f3e /bin/bash -c ls
限制新建的容器使用內存512MB
[root@node3 ~]# docker run -tid -m 512MB 56c1dba24f3e /bin/bash -c ls
一旦容器中Cgroup使用的內存超過了限制的容量,Linux內核將會嘗試收回這些內存,若是仍然沒辦法控制使用內存在限制範圍內,進程將會被殺死。
若是一個服務器上運行容器的混合部署,那麼會存在同時幾個程序寫磁盤數據的狀況,這時就須要使用一下方式來進行限制。
限制新建的容器的/dev/sda的寫入速度爲1MB
[root@node3 ~]# docker run -tid -device-write-bps 56c1dba24f3e /bin/bash -c ls
關於Docker就先簡單介紹這麼多!
———————— 本文至此結束,感謝閱讀 ————————