Docker的安裝、鏡像操做、容器操做及資源控制

Docker概述

Docker是在linux容器裏運行應用的開源工具,是一種輕量級的虛擬機。Docker包含三大核心概念,分別是:鏡像、容器和倉庫。Docker的容器技術能夠在一臺主機上輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。經過這種容器打包應用程序,意味着簡化了從新部署、調試這些瑣碎的重複工做。極大地提升了工做效率。linux

Docker容器與傳統虛擬化的比較nginx

特性 Docker容器 虛擬機
啓動速度 秒級 分鐘級
計算能力消耗 幾乎無 消耗50%
性能 接近原生 弱於
單機系統支持量 上千個 幾十個
隔離性 資源限制 徹底隔離

Docker核心概念

鏡像(image)

Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲一個面向Docker容器的只讀模板。例如,一個鏡像能夠是一個完整的centos操做系統環境,成爲一個centos鏡像;也能夠是一個安裝了MySQL的應用程序,稱爲一個MySQL鏡像。docker

容器(container)

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

倉庫(repository)

Docker倉庫是用來集中保存鏡像的地方,當建立了本身的鏡像以後,可使用push將它上傳到公共倉庫或者私有倉庫,這樣,當你下次要在另外一臺機器上使用鏡像時,只須要pull下來便可。vim

docker安裝

Docker支持在主流的操做平臺上使用,包括Windows、Linux、MacOS等,本次使用Docker的yum源來進行安裝。centos

yum倉庫配置

vim /etc/yum.repo.d/docker.repo
[docker]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

安裝Docker

yum -y install docker-engine

開啓服務

systemctl start docker.service                //開啓服務
systemctl enable docker.service            //設置爲開機自啓

配置阿里雲鏡像加速器

在使用Docker的過程當中涉及到從倉庫下載鏡像,利用國外的源下載鏡像時,有時下載速度會特別慢,這裏我使用的阿里雲的鏡像加速服務。安裝安裝1.10.0以上版本的Docker客戶端安全

配置鏡像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://j0bdjvov.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

參考:阿里雲容器鏡像服務bash

Docker鏡像操做

查看版本

docker version      //查看所使用Docker版本

Docker的安裝、鏡像操做、容器操做及資源控制

搜索鏡像

使用docker search + 關鍵字的方式,搜索遠端倉庫中的鏡像,搜索返回不少包含關鍵字的鏡像,其中返回信息包含鏡像名稱(NAME)、描述(DESCRIPTION)、星級(STARS)、是否官方建立(OFFICIAL)、是否主動建立(AUTOMATED)。默認的輸出信息會按照星級進行排序,星級表示了鏡像的受歡迎程度,越高越好用。這裏我以httpd爲例搜索。服務器

docker search httpd

Docker的安裝、鏡像操做、容器操做及資源控制

下載鏡像

docker pull httpd

從下載的過程能夠看出,鏡像文件由若干層(layer)組成,這種組成方式稱之爲AUFS(聯合文件系統),是實現增量保存與更新的基礎,下載過程當中會輸出鏡像的各層信息。
Docker的安裝、鏡像操做、容器操做及資源控制ide

查看鏡像信息

docker images         //查詢系統中全部鏡像的信息

參數信息:

  • REPOSITORY——鏡像屬於的倉庫
  • TAG——鏡像的標籤信息
  • IMAGE ID——鏡像的惟一id號,鏡像的惟一標識
  • CREATED——鏡像建立時間
  • VIRTUAL SIZE——鏡像大小
    Docker的安裝、鏡像操做、容器操做及資源控制

    使用鏡像id,查看鏡像詳細信息

    命令格式:docker inspect 鏡像id號

    docker inspect 11426a19f1a2

    鏡像添加新標籤

    鏡像名稱的改變包括鏡像名稱和鏡像標籤,使用 docker tag進行修改,httpd(修改後名稱,自定義):lamp(修改後標籤,自定義)

    docker tag httpd httpd:lamp

    Docker的安裝、鏡像操做、容器操做及資源控制

    鏡像刪除

    使用docker rmi刪除多餘的鏡像,可使用鏡像的標籤或者是鏡像id刪除鏡像,當一個鏡像有多個標籤時,刪除命令只會刪除該鏡像多個標籤中的指定標籤,並不會影響鏡像文件。

    當鏡像未在容器中運行時,可直接刪除鏡像

    Docker的安裝、鏡像操做、容器操做及資源控制

    當鏡像在容器中運行時,則需先刪除容器,方可刪除鏡像

    Docker的安裝、鏡像操做、容器操做及資源控制

    存出和載入鏡像

    存出鏡像

    當須要將一臺機器上的鏡像遷移到另外一臺機器使用時,需將鏡像保存爲本地文件,這一過程叫作存出鏡像,鏡像存出保存在當前目錄。

    docker save -o nginx nginx:latest

    Docker的安裝、鏡像操做、容器操做及資源控制

    載入鏡像

    將存出的鏡像拷貝到另外一臺機器上使用,而後將該導出文件導入到該機器的鏡像庫中,這一過程叫作載入鏡像,這裏載入的方式有兩種,使用的方式也不盡相同。

    docker load < nginx   //方式一
    docker --input nginx  //方式二

    上傳鏡像

    使用官方的鏡像倉庫(Docker Hub),或者採用阿里雲鏡像倉庫。

    登陸阿里雲Docker Registry

    $ sudo docker login --username=[用戶名] registry.cn-qingdao.aliyuncs.com
    用於登陸的用戶名爲阿里雲帳號全名,密碼爲開通服務時設置的密碼。

    從Registry中拉取鏡像

    $ sudo docker pull registry.cn-qingdao.aliyuncs.com/[命名空間/倉庫名稱]:[鏡像版本號]

    將鏡像推送到Registry

    $ sudo docker login --username=46877806@qq.com registry.cn-qingdao.aliyuncs.com
    $ sudo docker tag [ImageId] registry.cn-qingdao.aliyuncs.com/[命名空間/倉庫名稱]:[鏡像版本號]
    $ sudo docker push registry.cn-qingdao.aliyuncs.com/[命名空間/倉庫名稱]:[鏡像版本號]
    //請根據實際鏡像信息替換示例中的[ImageId]、[鏡像版本號]和[命名空間/倉庫名稱]參數。

    參考:阿里雲容器鏡像服務

    Docker容器操做

    容器的建立與啓動

    容器的建立是將鏡像加載到容器的過程,Docker的容器十分輕量級,用戶能夠隨時建立或者刪除。新建立的容器默認處於中止狀態,不運行任何程序,須要在其中發起一個進程來啓動容器,這個進程是該容器的惟一進程,因此當該進程結束的時候,容器也會徹底中止。中止的容器從新啓動並保留原來的修改。在建立完成容器時會返回惟一的ID。

    容器的建立

    docker create -it nginx:latest  /bin/bash    
    //-i 讓容器的輸入保持打開 -t 讓Docker分配一個僞終端
    docker ps -a       //查看全部容器的運行狀態 -a 顯示系統最近一次啓動的容器

    Docker的安裝、鏡像操做、容器操做及資源控制

    容器的啓動

    docker start 9ced2c379b0b         //能夠是容器的id或者是容器名稱

    Docker的安裝、鏡像操做、容器操做及資源控制

    一鍵建立並啓動容器

    用戶能夠直接執行docker run,直接建立並啓動容器,等同於先執行docker create,再執行docker start。須要注意的是,一旦命令執行結束,容器也會中止。當運用docker run來建立容器時,Docker在後臺的標準過程是:

  • 檢查本地是否存在指定鏡像,若不存在,則會從公共倉庫下載
  • 利用鏡像建立並啓動一個容器
  • 分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機的網橋接口中橋接一個虛擬機接口到容器中
  • 分配一個地址池中的IP地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢後容器被終止運行
    docker run centos /usr/bin/bash -c ls /

    Docker的安裝、鏡像操做、容器操做及資源控制

    如果須要讓docker容器以守護態形式在後臺運行,能夠添加 -d 選項來實現

    docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"

    Docker的安裝、鏡像操做、容器操做及資源控制

    容器的終止

    docker stop 9ced2c379b0b

    Docker的安裝、鏡像操做、容器操做及資源控制

    容器的進入

    想要進入容器,要確保容器處於up狀態
    Docker的安裝、鏡像操做、容器操做及資源控制

    容器的導出與導入

    用戶能夠將任何一個docker容器從一臺機器遷移到另外一臺機器,在遷移過程當中首先要將已經建立好的容器導出爲文件,不管容器是處於運行狀態仍是關閉狀態都可導出,導出以後將文件傳輸到其餘機器上,使用導入命令,實現容器的遷移。

    docker export cc10d2c6a7b3 > centos7
    cat centos7 | docker import - centos7:test

    Docker的安裝、鏡像操做、容器操做及資源控制

    容器的刪除

    對於容器的刪除,通常是對處於關閉狀態的容器操做,可是也可對處於運行狀態的容器進行,使用-f選項,不推薦。

    docker rm cc10d2c6a7b3

    Docker的安裝、鏡像操做、容器操做及資源控制

    Docker資源控制

    Cgroup是Control group的簡寫,是Linux內核提夠的一種限制使用物理資源的機制,主要包括CPU、內存、blkio。

    對CPU的控制

    限制cpu使用速率

    使用 --cpu-quota 選項來限制cpu的使用率,cpu的百分比是以1000爲單位

    docker run --cpu-quota 20000 容器名   //cpu的使用率限定爲20%

    多任務按比例分享CPU

    docker run --cpu-shares 1024 容器A
    docker run --cpu-shares 1024 容器B
    docker run --cpu-shares 1024 容器C    //此時cpu的分配比例爲1:1:2

    限制cpu內核使用

    使用 --cpuset-cpus選項來使某些程序獨享cpu內核,以便提升其處理速度,選項0表示第一個內核,依次第二個,第三個。

    docker run --cpuset-cpus 0,1,2,3 容器名   //使容器綁定1~4內核使用

    對內存使用的限制

    docker容器中經過命令來限制內存使用量,當容器Cgrop使用的內存超過了限制的容量,Linux內核將會嘗試回收這些內存,若是依舊沒法控制內存使用在限制範圍以內,進程將會被殺死。

    docker run -m 1024m 容器名     //限制使用內存爲1G

    對blkio的限制

    若是在一臺服務器上進行容器的混合部署,那麼會出現同時有幾個程序寫磁盤數據的狀況,這時能夠經過--device-write-iops選項來限制寫入的iops,相應的還有--device-read-bps選項限制讀取的iops。該方法只針對blkio限制的是設備,而不是分區。

    docker run --device-write-bps /dev/sda1:1mb 容器名   //限制容器的/dev/sda1的寫入ipos爲1MB
相關文章
相關標籤/搜索