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

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

前言引導

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

Docker概述

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

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

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

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

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

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

Docker的核心概念與安裝

  • 鏡像(Image)

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

  • 容器(Container)

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

  • 倉庫(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以後,就能夠直接啓動服務了。ide

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命令刪除多餘的鏡像

刪除鏡像的方法有兩種:1、使用鏡像的標籤刪除鏡像;2、使用鏡像的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
相關文章
相關標籤/搜索