1. 程式人生 > >Docker的安裝、鏡像操作、容器操作及資源控制

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

run p地址 讀寫 情況 ffi key pro ada 指定

Docker概述

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

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

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

Docker核心概念

鏡像(image)

Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向Docker容器的只讀模板。例如,一個鏡像可以是一個完整的centos操作系統環境,成為一個centos鏡像;也可以是一個安裝了MySQL的應用程序,稱為一個MySQL鏡像。

容器(container)

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

倉庫(repository)

Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之後,可以使用push將它上傳到公共倉庫或者私有倉庫,這樣,當你下次要在另一臺機器上使用鏡像時,只需要pull下來即可。

docker安裝

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

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

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

Docker鏡像操作

查看版本

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

技術分享圖片

搜索鏡像

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

docker search httpd

技術分享圖片

下載鏡像

docker pull httpd

從下載的過程可以看出,鏡像文件由若幹層(layer)組成,這種組成方式稱之為AUFS(聯合文件系統),是實現增量保存與更新的基礎,下載過程中會輸出鏡像的各層信息。
技術分享圖片

查看鏡像信息

docker images         //查詢系統中所有鏡像的信息

參數信息:

  • REPOSITORY——鏡像屬於的倉庫
  • TAG——鏡像的標簽信息
  • IMAGE ID——鏡像的唯一id號,鏡像的唯一標識
  • CREATED——鏡像創建時間
  • VIRTUAL SIZE——鏡像大小
    技術分享圖片

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

    命令格式:docker inspect 鏡像id號

    docker inspect 11426a19f1a2

    鏡像添加新標簽

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

    docker tag httpd httpd:lamp

    技術分享圖片

    鏡像刪除

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

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

    技術分享圖片

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

    技術分享圖片

    存出和載入鏡像

    存出鏡像

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

    docker save -o nginx nginx:latest

    技術分享圖片

    載入鏡像

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

    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 [email protected] 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 start 9ced2c379b0b         //可以是容器的id或者是容器名稱

    技術分享圖片

    一鍵創建並啟動容器

    用戶可以直接執行docker run,直接創建並啟動容器,等同於先執行docker create,再執行docker start。需要註意的是,一旦命令執行結束,容器也會停止。當運用docker run來創建容器時,Docker在後臺的標準過程是:

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

    技術分享圖片

    若是需要讓docker容器以守護態形式在後臺運行,可以添加 -d 選項來實現

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

    技術分享圖片

    容器的終止

    docker stop 9ced2c379b0b

    技術分享圖片

    容器的進入

    想要進入容器,要確保容器處於up狀態
    技術分享圖片

    容器的導出與導入

    用戶可以將任何一個docker容器從一臺機器遷移到另一臺機器,在遷移過程中首先要將已經創建好的容器導出為文件,無論容器是處於運行狀態還是關閉狀態均可導出,導出之後將文件傳輸到其他機器上,使用導入命令,實現容器的遷移。

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

    技術分享圖片

    容器的刪除

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

    docker rm cc10d2c6a7b3

    技術分享圖片

    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

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