1. 程式人生 > >Docker容器實戰-簡單使用

Docker容器實戰-簡單使用

一、hello-world

    在之間CentOS安裝的時候,我們運行了hello-world第一個容器,hello-world是Docker官方推薦的第一個學習映象,它的功能就是簡單的輸出一段日誌在終端上。

    Docker是基於Linux核心的Namespace、CGroups和UnionFS三項基本功能實現的,通過docker run hello-world就可以執行Docker容器。

命令的格式
          docker:Docker客戶端程式
          run:子命令,執行容器
          hello-world:映象名稱

執行過程
          首先在本地查詢是否有hello-world這個映象,如果沒有則去Dockerhub即Docker主倉庫拉取
          啟動一個容器,並把映象裝載進容器執行

    使用docker images檢視系統中有哪些映象

這裡寫圖片描述

REPOSITORY:映象名稱
TAG:映象版本,在Run時如果不帶版本就會拉取最新版本
IMAGE ID:映象的截斷後ID
CREATED:映象建立時間
VIRTUAL SIZE:映象佔用空間

二、容器與映象

    上面有說到容器和映象兩個關鍵字,容器和映象是Docker最核心的部分,使用Docker時實際就是在容器中執行映象

(1)容器

    很多人在最初可能會認為容器就是一種輕量級的虛擬機器,但從根本形態上來看,容器其實就是執行在作業系統上的一個程序,不過加入了對資源的隔離和限制

    通常,在執行一個程序如果程序中出現死迴圈,CPU就會被佔用完;如果程序出現記憶體洩漏或大記憶體分配就可能把系統記憶體用完,因為預設程序間共用了CPU和記憶體,這種不進行隔離的處理方式,就會遇到相互間干擾的問題

    前面也說了,Docker基於的三大核心功能是CGroups、Namespace和UnionFS

CGroups:限定一個程序的資源使用,如CPU、記憶體,使使用者主機更好地執行多個容器而相互不受影響

Namespace:隔離工作區,通過Namespace,容器執行在自己的獨立名稱空間,外層沒有訪問許可權,目前Docker 使用了PID、NET、IPC、MNT、UTS(UNIX Timesharing System) Namespace

Union FS:處理分層映象,是映象更加輕量級和快速,Docker可使用AUFS、VFS、Btrfs等不同的Union FS

(2)映象

    容器是一個動態概念,映象則是一個相對靜止的概念,簡單來說映象就是容器中的檔案系統(* 映象除了檔案系統,還集成了一部分容器執行引數,可以將映象看成容器模板)

    檔案系統管理技術在很早前就出現了,即chroot系統呼叫技術,通過該技術可以改變程序執行目錄,並將其限定在這個目錄中,但其僅僅只是簡單的隔離

    因此Docker使用了Layered FS,把檔案系統分為多個層,是多個容期間可以使用公共的部分,而映象就是有Layered FS組成,並且映象是隻讀的,當容器執行時,會在映象上添上一層可讀可寫層

(3)關係

    容器和映象二者缺一不可,可相互轉換

這裡寫圖片描述

三、基本操作

(1)檢視資訊

功能描述:檢視Docker執行狀態及版本資訊(Docker Daemon守護程序執行狀態縮影)
語法:docker info
輸出:容器個數、映象個數、Daemon版本、儲存驅動

這裡寫圖片描述

(2)下載映象

    Docker映象是分層的,使用時都需要從第一個基礎映象開始,官方推薦的基礎映象為Ubuntu

功能描述:從Docker Hub拉取映象,如映象存在則直接返回
語法:docker pull ubuntu

這裡寫圖片描述

(3)執行含Shell終端的映象

    在之前的hello-world中,容器輸出日誌執行完成後就自動退出了,當然,Docker也可以執行一個可互動的容器,如果在互動式容器中執行exit命令,則整個容器都會停止執行,如果需要退出互動模式且不影響容器執行則可以使用Ctrl+PQ

    剛剛拉取了一個Ubuntu映象,現在可以通過docker命令執行容器

語法:docker run -i -t ubuntu /bin/bash
          -i 啟動一個可互動容器
          -t 使用pseudo-TTY,關聯到容器的stdin和stdout
          -d 後臺執行容器(本例子中未使用)
          ubuntu 表明執行的映象
          /bin/bash 啟動容器時執行的命令
提示:對一個虛擬網路伺服器來說,Pseudo-TTY(PTY,假冒的TTY)是等價的終端
         當執行一個終端模擬程式或GNOME終端程式時,PTY對虛擬的使用者或者如終端模擬程式一樣的偽終端來說,就像是一個TTY在執行。

這裡寫圖片描述

(4)檢視容器

功能描述:檢視容器
語法:docker ps [-a]
          -a 檢視所有容器
注意:使用ps命令檢視時若容器退出,該命令就列舉不出容器,需要使用-a選項

這裡寫圖片描述

    因為我之前在執行ubuntu容器時,通過Ctrl+PQ退出的互動模式,並未停止容器,所以通過ps可以看到其正在執行,而通過docker ps -a則可以看到我在昨天寫上一篇博文時執行的hello-world容器資訊。

    使用docker kill 容器號殺掉容器後可以看到使用ps命令看不到執行容器存在了。