Docker簡介及安裝配置詳解

隨着計算機近年來的蓬勃發展,產生了大量優秀系統和軟件。軟件開發人員能夠自由選擇各類軟件應用。但同時帶來的問題就是須要維護一個很是龐大的開發、測試和生產環境。面對之中狀況,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

1、Docker概述

1.Docker簡介

Docker做爲開源社區最火爆的項目,它是在Linux容器裏運行應用的開源工具,是一種輕量級的「虛擬機」,docker的所有源代碼都在https://github.com/docker 進行相關維護,其官網是:https://www.docker.comgit

Docker的Logo設計爲藍色鯨魚,拖着許多集裝箱。github

Docker簡介及安裝配置詳解
如圖所示:鯨魚能夠看做宿主機,而集裝箱能夠理解爲相互隔離的容器,每一個集裝箱中都包含本身的應用程序。正如 Docker的設計宗旨同樣:Buid、 Ship and Run Any App、 Anywhere,即經過對應用組件的封裝、發佈、部署、運行等生命週期的管理,達到應用組件級別的「一次封裝,處處運行」的目的。這裏的組件,既能夠是一個應用,也能夠是一套服務,甚至是一個完整的操做系
統。docker

2.Docker和虛擬機的區別

做爲一種輕量級的虛擬化方式,Docker與傳統虛擬機相比具備顯著的優點。如圖:
Docker簡介及安裝配置詳解shell

Docker之因此擁有衆多優點,與操做系統虛擬化自身的特色是分不開的。傳統虛擬機須要有額外的虛擬機管理程序和虛擬操做系統層,而Docker容器是直接在操做系統層面之上實現的虛擬化,如圖:
Docker簡介及安裝配置詳解json

3.Docker的使用場景

如今卡者須要能方便地建立運行在雲平臺上的應用,必需要脫離底層的硬件,同時還須要任什麼時候間、地點可獲取這些資源,這正是Docker所能提供的。vim

Docker的容器技術能夠在一條主句上輕鬆爲任何應用建立一個輕量級的、可移植的、自給自足的容器。經過這種容器打包應用程序,意味着簡化了從新部署、調試這些瑣碎的重複工做,極大地提升了工做效率。centos

好比:服務器從騰訊雲遷移到阿里雲,若是採用了Docker容器技術,遷移只須要在新的服務器上啓動須要的容器便可。緩存

2、Docker的核心概念及安裝

1.鏡像

Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲是一個面向Docker容器引擎的只讀模板。

Docker提供了簡單的機制來建立和更新現有的進行,用戶也能夠從網上下載已經作好的應用進行來直接使用。

2.容器

Docker的容器是從鏡像建立的運行實例。它能夠被啓動、中止個刪除。所建立的每個容器都是互相隔離、互不可見,能夠保證安全性的平臺。能夠把容器看作一個簡易版的Linux環境,Docker利用容器來運行和隔離應用。

3.倉庫

Docker倉庫是用來集中保存鏡像的地方,當建立了本身的鏡像以後,可使用命令將它上傳到公有倉庫或私有倉庫,這樣一來當下次要在另一條機器上使用這個鏡像是,只需從倉庫拉取下來便可!

倉庫註冊服務器是存放倉庫的地方,其中包含了多個倉庫,每一個倉庫集中存放某一類鏡像,而且使用不一樣的標籤來區分它們。目前最大的公有倉庫Docker Hub,存放了數量龐大的鏡像提供用戶下載使用。

4.安裝Docker

Docker支持在主流的操做系統平臺上進行使用,包括Windows系統、Linux系統及MacOS系統等。目前最新的RedHat RHEL、Centos及Ubuntu系統官方軟件源中都已經默認自帶了Docker包,可直接安裝使用,也能夠用Docker本身的YUM源進行配置。

Centos系統下安裝Docker能夠有兩種方式:

  • 使用curl得到Docker的安裝腳本進行安裝;
  • 使用YUM倉庫來安裝Docker;
    須要注意的是,目前Docker只能支持64位系統。

本次博文使用Centos 7.3系統,採用兩種方式進行安裝:

(1)Docker使用系統自帶的YUM源

(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時,能夠會出現如下狀況,如圖:
Docker簡介及安裝配置詳解
沒法正常啓動,這時須要進行如下操做:

[root@localhost ~]# vim /etc/sysconfig/docker         //修改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版本較低!

(2)使用阿里雲的yum配置文件進行安裝

(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的服務端進程。

大部分狀況Docker服務端和Docker客戶端會安裝在一臺服務器上。

3、Docker鏡像操做

Docker運行容器前須要本地存在對應的鏡像,若是不存在本地鏡像,Docker就會嘗試從默認鏡像倉庫https://hub.docker.com/ 下載。這是由Docker官方維護的一個公共倉庫,能夠知足用戶的絕大部分需求,固然用戶也可經過配置來使用自定義的鏡像倉庫。

在下載Docker鏡像時,本人強烈建議使用如下方法加速鏡像下載。方法以下:
啓用道雲提供的下載鏡像加速功能(阿里也提供了該功能,我這裏就寫道雲了)。
道雲加速器網址:https://www.daocloud.io/
流程以下:
(1)訪問道雲的官網;
(2)註冊用戶而且登陸;
前兩步完成後,請看圖操做:
Docker簡介及安裝配置詳解

看到如下界面後,往下拖頁面:
Docker簡介及安裝配置詳解
拖到此處,根據本身系統版本,複製相應的命令(基於Linux服務器就複製下面這行):
Docker簡介及安裝配置詳解

在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"]}

1.搜索鏡像

[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/ 進行查找。

2.獲取鏡像

搜索到符合需求的鏡像,可使用docker pull命令從網絡下載鏡像到本地使用。

對於Docker鏡像來講,若是下載鏡像時不指定標籤,則默認會下載最新版本的鏡像,即選擇標籤爲latest;也可經過指定的標籤下載特定版本的某一鏡像。標籤就是用來區分鏡像版本的。

[root@localhost ~]# docker pull  docker.io/networkboot/dhcpd     //獲取dhcp的鏡像
                       ……………………                                   //省略下載過程

從整個下載過程當中能夠看出,鏡像文件是由若干層組成,咱們稱爲AUFS(聯合文件系統),是實現增量保存與更新的基礎,下載過程當中會輸出鏡像的各層信息。鏡像下載到本地以後就可使用該鏡像了。

用戶也可選擇從其餘註冊服務器倉庫下載,這時須要在倉庫名稱前執行完整的倉庫註冊服務器地址。

3.查看鏡像信息

[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

從查看的信息能夠看到如下信息:

  • REPOSITORY :鏡像屬於的倉庫;
  • TAG:鏡像的標籤信息,標記同一倉庫中的不一樣鏡像;
  • IMAGE ID:鏡像的惟一ID號,惟一標識了該鏡像;
  • CREATED:鏡像建立時間;
  • VIRTUAL SIZE:鏡像大小;

用戶還能夠根據鏡像的惟一標識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
//查看效果

4.刪除鏡像

刪除鏡像的操做有兩種:使用鏡像的標籤刪除鏡像;使用鏡像的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號時,必須確保該鏡像沒有被容器使用才能進行,刪除時系統會先刪除掉全部指向該鏡像的標籤,而後刪除該鏡像文件自己。若是該鏡像已經被容器使用,正確的作法是先刪除依賴該鏡像的全部容器,再去刪除鏡像。

5.存出鏡像和載入鏡像

當須要把一臺機器上的鏡像遷移到另外一臺機器上時,須要將鏡像保存成本地文件,這一過程叫作存出鏡像,可使用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                      //這條命令,跟上一條命令一個意思,選擇其中一種便可!

4、Docker容器操做

容器是Docker的另外一個核心的概念,簡單來講,容器是鏡像的一個運行實例,是獨立運行的一個或一組應用及他們所必需的運行環境,包括文件系統、系統類庫、shell環境等。鏡像是隻讀模板,而容器會給這個只讀模板提供一個額外的可寫層。

1.容器的建立與啓動

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在後臺的標準運行過程是這樣:

  • 檢查本地是否存在指定的鏡像,當鏡像不存在時,會從公有倉庫首先進行下載;
  • 利用鏡像建立並啓動一個容器;
  • 分配一個文件系統給容器;
  • 在只讀的鏡像層外面掛載一層可讀寫層;
  • 從宿主主機配置的網橋接口橋接一個虛擬機接口到容器中;
  • 分配一個地址池中的IP地址給容器;
  • 執行用戶指定的應用程序;
  • 執行完畢後容器將終止運行;

優點須要在後臺持續地運行這個容器,就須要讓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」狀態,表示容器始終在啓動

2.容器的運行與終止

若是須要終止運行的容器,可使用「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狀態,表示終止狀態

3.容器的進入

須要進入容器進行相關操做時,可使用「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

4.容器的導入與導出

用戶能夠將任何一個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

5.容器的刪除

可使用「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運行過程當中存儲目錄容量不足的問題。

5、Docker資源控制

1.限制cpu使用率

[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系統進行限制,這是一個大頁文件系統。

2.多任務按比例分享cpu

當多個容器任務運行時,很難計算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

3.限制cpu內核使用

限制新建的容器使用第一個內核

[root@node3 ~]# cat /proc/cpuinfo| grep "processor"| wc -l
2
[root@node3 ~]# docker run  -tid  --cpuset-cpus 1  56c1dba24f3e /bin/bash -c ls

4.對內存使用的限制

限制新建的容器使用內存512MB

[root@node3 ~]# docker run -tid  -m 512MB  56c1dba24f3e /bin/bash -c ls

一旦容器中Cgroup使用的內存超過了限制的容量,Linux內核將會嘗試收回這些內存,若是仍然沒辦法控制使用內存在限制範圍內,進程將會被殺死。

5.對blkio的限制

若是一個服務器上運行容器的混合部署,那麼會存在同時幾個程序寫磁盤數據的狀況,這時就須要使用一下方式來進行限制。

限制新建的容器的/dev/sda的寫入速度爲1MB

[root@node3 ~]# docker run  -tid  -device-write-bps   56c1dba24f3e /bin/bash -c ls

關於Docker就先簡單介紹這麼多!

———————— 本文至此結束,感謝閱讀 ————————

相關文章
相關標籤/搜索