Docker架構、鏡像及容器的基本操作

Docker架構、鏡像及容器的基本操作

前言引導

Docker是在Linux容器裏運行應用的開源工具,是一種輕量級的虛擬機,誕生於2013年。Docker的設計宗旨:Build、Ship and Run Any、Anywhere,即通過對應用組件的封裝、發佈、部署、運行等生命週期的管理,達到應用組件級別的“一次封裝,到處運行”的目的。

Docker概述

Docker架構、鏡像及容器的基本操作

如上圖所示,Docker的logo設計爲藍色鯨魚,拖着許多集裝箱。其中鯨魚可以看作爲宿主機,而集裝箱可以理解爲相互隔離的容器,每個集裝箱中都包含自己的應用程序。

Docker容器與傳統虛擬的比較

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

Docker之所以擁有衆多優勢,跟操作系統虛擬化自身的特點是分不開的。傳統虛擬機需要有額外的虛擬化管理程序和虛擬機操作系統層。而Docker容器是直接在操作系統層面之上實現的虛擬化。如下圖

Docker架構、鏡像及容器的基本操作

Docker的核心概念與安裝

  • 鏡像(Image)

Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解爲是一個面向Docker容器引擎的只讀模板。

  • 容器(Container)

Docker容器是從鏡像創建的運行實例,容器可以被啓動、停止和刪除。所創建的每一個容器都是相互隔離的,互不可見的,可以保證平臺的安全性。

  • 倉庫(Repository)

Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之後,可以使用push命令將它上傳到公共倉庫(Public)或者私有倉庫(Private)。

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

安裝Docker

  • 先關閉防火牆及SELinux
systemctl stop firewalld.service
setenforce 0
  • 使用yum命令安裝Docker服務
yum -y install docker

yum安裝好docker之後,就可以直接啓動服務了。

systemctl start docker.service        //開啓服務
systemctl enable docker.service       //設置開機自啓動
  • Docker程序介紹

安裝好的Docker系統有兩個程序:Docker服務端和Docker客戶端。其中Docker服務端是一個服務進程,管理着所有的容器。Docker客戶端則扮演着Docker服務端的遠程控制器,可以用來控制Docker的服務端進程。一般情況下,Docker服務端和客戶端運行在一臺機器上。

可以通過查看docker版本信息檢查docker服務。

Docker架構、鏡像及容器的基本操作

Docker鏡像的基本操作

  • 搜索鏡像
docker search nginx     //搜索遠端官方倉庫中的共享nginx鏡像

Docker架構、鏡像及容器的基本操作

  • 獲取鏡像
docker pull docker.io/nginx   //獲取上面搜索到的星級最高的鏡像

Docker架構、鏡像及容器的基本操作

從整個下載過程中可以看出,鏡像文件由若干層(Layer)組成,稱之爲AUFS(聯合文件系統),是實現增量保存與更新的基礎。

  • 查看獲取到的鏡像信息

下載到本地的鏡像文件保存在/var/lib/docker/image/overlay/文件下的repositories.json文件

Docker架構、鏡像及容器的基本操作

docker images    //查看下載到本地的所有鏡像

Docker架構、鏡像及容器的基本操作

圖中各個參數的釋義:
REPOSITORY: 鏡像屬於的倉庫
TAG: 鏡像的標籤信息,標記同一個倉庫中的不同鏡像
IMAGE ID: 鏡像的唯一ID號,唯一標識了該鏡像
CREATED: 鏡像創建時間
VIRTUAL SIZE: 鏡像大小

  • 通過鏡像的唯一標識ID號,獲取鏡像詳細信息
docker inspect c82521676580     //獲取鏡像唯一標識號爲c82521676580的鏡像的詳細信息

Docker架構、鏡像及容器的基本操作

  • 爲本地鏡像添加新標籤
docker tag docker.io/nginx nginx:test    //本地鏡像docker.io/nginx添加新的名稱爲nginx,新的標籤爲test

docker images | grep test    //過濾查看新添加的標籤信息
  • 刪除鏡像

使用docker rmi命令刪除多餘的鏡像

刪除鏡像的方法有兩種:一、使用鏡像的標籤刪除鏡像;二、使用鏡像的ID刪除鏡像

命令格式:

docker rmi 倉庫名稱:標籤
docker rmi 鏡像ID號

Docker架構、鏡像及容器的基本操作

  • 存出鏡像和載入鏡像

把一臺機器上的鏡像遷移到另一臺機器上時,將鏡像保存成本地文件的過程叫做存出鏡像;將存出的鏡像從A機器拷貝到B機器,需要在B機器上使用該鏡像,可以將該導出文件導入到B機器的鏡像庫中,這個過程叫做載入鏡像。

docker save -o nginx docker.io/nginx      //存出鏡像

docker load < nginx或者docker --inputnginx     //導入鏡像

Docker架構、鏡像及容器的基本操作

  • 上傳鏡像

當本地鏡像越存越多的時候,就需要指定一個專門的地方存放鏡像——倉庫。目前比較方便的就是公共倉庫,默認上傳到Docker Hub官方倉庫,但是這個方法必須先註冊使用公共倉庫的賬號。可以使用docker login命令輸入用戶名、密碼和郵箱來完成註冊和登錄。登錄之後可以使用“docker push 倉庫名稱:標籤”進行上傳鏡像。

docker push li(賬號)/nginx:centos         //上傳鏡像

Docker容器的基本操作

  • 容器的創建與啓動
docker create -it docker.io/nginx /bin/bash     //創建容器
docker ps -a     //查看所有容器
docker start 1ad3c22a5e36     //開啓容器
docker stop 1ad3c22a5e36     //關閉容器

參數詳解:
-i:讓容器的輸入保持打開
-t:讓Docker分配一個僞終端
/bin/bash : 表示啓動容器時要運行的命令

Docker架構、鏡像及容器的基本操作

  • 容器的進入
docker exec -it 1ad3c22a5e36 /bin/bash     //進入容器

參數詳解:
-i:表示讓容器的輸入保持打開
-t:表示讓Docker分配一個僞終端

Docker架構、鏡像及容器的基本操作

  • 容器的導出和導入
docker export 1ad3c22a5e36 > nginxtar    //容器的導出

cat nginxtar | docker import - nginx:test    //容器的導入

Docker架構、鏡像及容器的基本操作

Docker架構、鏡像及容器的基本操作

  • 容器的刪除

要刪除正在運行的容器可以添加 -f 選項強制刪除,建議先關閉容器在刪除。

docker rm 1ad3c22a5e36   //刪除時指定 ID
  • 後臺持續運行容器
docker run -d jasonlix/docker-cobbler /usr/bin/bash -c "while true;do echo hello;done"

注意:docker run ,等於執行了docker create ,在執行docker start 。就是說:在使用docker run創建容器的時候 如果檢查鏡像,若沒有鏡像,會從公共倉庫下載,然後在創建容器,運行容器。

docker run -itd --name c7 --network bridge --ip 172.16.10.135 centos:latest /bin/bash
下載資源 名字c7 網卡橋接 本地IP 鏡像倉庫centos 最新latest

Docker資源限制

  • 限制CPU使用速率
docker run --cpu-quota 20000 centos(容器名)    //cpu的使用率限定爲20%
  • 按比例分享CPU
docker run --cpu-shares 1024 centos
  • 限制CPU內核使用

  • 使用 --cpuset-cpus 後面跟 0,1,2,3 (0表示第1個內核,1表示第2個內核.......)
docker run --cpuset-cpus 0,1 centos       //容器centos獨享 第1和第2個內核
  • 限制內存使用
docker run -m 512m centos      //限制cents容器內存512M
對blkio限制
  • 對容器的讀寫限制
例如:限制容器的/dev/sda1 的寫入ipos爲1MB

docker run --device-write-bps /dev/sda1:1mb centos
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章