Docker容器基礎篇——鏡像、容器
1. 什麽是容器?
容器技術是一種虛擬化的方案,與傳統虛擬機不同,傳統虛擬機是通過中間層將一臺或多臺獨立的機器虛擬運行於物理硬件之上,而容器則是直接運行於操作系統內核之上的用戶空間。因此,容器虛擬化也被稱為操作系統虛擬化。
Docker容器與傳統虛擬機的比較,如下表
特性 | Docker | 虛擬機 |
---|---|---|
啟動速度 | 秒級 | 分鐘級 |
性能損耗 | 共享kernel幾乎沒有性能損耗 | 通過對於硬件層的模擬,增加了系統調用鏈路的環節,有性能損耗 |
系統支持量 | 上千個 | 幾十個 |
隔離性 | 資源限制 | 完全隔離 |
傳統的虛擬機需要額外的虛擬機管理程序和虛擬機操作系統層,而docker容器是直接在操作系統層面上實現的虛擬化,如下圖所示:
2.什麽是docker?
docker是可以將開發的應用程序自動部署到容器的開源引擎,由go語言編寫,是一種輕量級別的虛擬機。
(1)docker的特點
1.提供簡單輕量的建模方式
2.職責的邏輯分離
3.快速高效的開發生命周期
4.鼓勵使用面向服務的架構
(2)Docker的基本組成
1、Docker客戶端/守護進程
Docker是C/S架構的程序,Docker客戶端向Docker服務器端的守護進程發送請求,守護進程處理完所有的工作並返回結果。Docker客戶端向客戶端發送請求,既可以通過本地,也可以通過遠程來訪問。
2、Docker Image鏡像
Docker的鏡像是創建docker容器的基礎,類似於虛擬機的快照,Docker的鏡像是一個層疊的只讀文件系統(AUFS).
3、Docker Container 容器
Docker的容器是從鏡像創建的運行實例,它可以通過鏡像啟動,停止和刪除。所創建的每一個容器都是相互隔離、互不可見的,可以保證平臺的安全性。
4、Docker Registry倉庫
Docker倉庫是用來保存鏡像的地方,當創建了自己的鏡像後,可以使用push命令將它傳到公有倉庫或私有倉庫,這樣當下次要使用時,就可以將鏡像從倉庫上pull下來即可。
二、Docker容器的安裝
1.安裝docker
yum install -y docker
2.開啟docker服務,並設置為開機自啟動
systemctl start docker.service systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
3.查看docker基本信息
[root@promote /]# docker info //查看docker基本信息
Client:
Version: 1.13.1 //docker客戶端的版本信息
API version: 1.26
Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64
....
Docker Root Dir: /var/lib/docker //docker使用的存儲驅動和存儲的位置
Debug Mode (client): false
Debug Mode (server): false
...
三、Docker鏡像的操作
1、查找Docker鏡像有兩種
(1)通過訪問Docker Hub 網站來獲取鏡像
http://registry.hub.docker.com
(2)通過docker search命令查找鏡像
docker search 命令格式如下
docker search [OPTIONS] TERM
--automated=false //自動化選項
--no-trunc-false //false,表示以截斷的方式進行輸出
-s,stars=0 //限定顯示結果的最低星級,最多返回25個結果
查找cobbler鏡像,並限定查詢的鏡像的最低星級為2星
docker search -s 2 cobbler
Flag --stars has been deprecated, use --filter=stars=3 instead
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/jasonlix/docker-cobbler cobbler 2.8.0 7 [OK]
docker.io docker.io/containersol/docker-cobbler Cobbler in a Docker Container 3 [OK]
docker.io docker.io/sspreitzer/cobbler 3 [OK]
docker.io docker.io/headmelted/cobbler Cobbler is a pre-configured environment fo... 2 [OK]
docker.io docker.io/iilab/docker-cobbler This is a work in progress for a Cobbler i... 2
(2)Docker加速器配置
加速器的配置
點這裏可以查看
(3)將查找到的鏡像下載拉取到本地
docker pull [OPTIONS] NAME [:TAG]
-a,--all-tags=false //將倉庫中所有標記的鏡像下載到本地
下載剛剛查找到的星級為7的鏡像cobbler
docker pull docker.io/jasonlix/docker-cobbler
(4)查看鏡像信息
命令語法:
docker images 倉庫名稱:[TAGS]
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/jasonlix/docker-cobbler latest 2211e1f06c4e 17 months ago 293 MB
從回顯的信息中可以讀出以下信息:
REPOSITORY 鏡像屬於的倉庫。
TAG 鏡像的標簽信息,標記同一個倉庫中的不同鏡像
IMAGE ID 鏡像的唯一ID號,唯一標識了該鏡像。
CREATED 鏡像創建時間。
VIRTUAL SIZE鏡像大小。
通過鏡像的唯一標識獲得該鏡像的詳細信息
docker inspect 2211e1f06c4e
使用docker tag 命令為本地的鏡像docker.io/jasonlix/docker-cobbler添加新的名稱跟新的標簽cobbler。
docker tag docker.io/jasonlix/docker-cobbler cobbler:cobbler
docker images | grep cobbler
docker.io/jasonlix/docker-cobbler latest 2211e1f06c4e 17 months ago 293 MB
cobbler cobbler 2211e1f06c4e 17 months ago 293 MB
(5)刪除docker操作
刪除docker的方式有兩種:一是docker rmi 倉庫名稱:標簽的格式,二是docker rmi 鏡像id號的格式
docker rmi cobbler:cobbler
Untagged: cobbler:cobbler
Untagged: docker.io/jasonlix/docker-cobbler@sha256:bce2dd8ccba88f25c5ae07986b952328b0e874d3c7813ac8868736f02624cfec
docker images | grep cobbler
docker.io/jasonlix/docker-cobbler latest 2211e1f06c4e 17 months ago 293 MB
當一個鏡像有多個標簽時,docker rmi命令只是刪除該鏡像的多個標簽中的指定標簽,並不會影響鏡像文件。
(6)鏡像的存出和載入
存出命令格式 :docker save -o 存儲文件名 存儲的鏡像
docker save -o cobber docker.io/jasonlix/docker-cobbler
ls -l cobber
-rw-------. 1 root root 306899968 8月 9 23:50 cobber
載入命令格式:docker load<存出的文件
docker --input 存出的文件
(7)上傳鏡像
命令格式:docker push 倉庫名稱:標簽
上傳鏡像需要創建一個公共的賬戶,這邊的賬戶名為test
docker tag docker.io/jasonlix/docker-cobbler test/cobbler:centos7
docker login //登錄docker賬戶
登錄成功後可以上傳鏡像
docker push test/cobbler:centos7
四、docker容器的操作
1.創建容器,並查看運行狀態
命令格式:docker create [選項] 鏡像 運行的程序
docker create -i -t docker.io/jasonlix/docker-cobbler /bin/bash //-i表示為容器的輸入保持打開 -t表示為容器開啟一個偽終端
10e7cb9df588ea0e850473c9b5609b260f0357171fdc2c4c8f3d1f3800f40308
查看所有容器的運行狀態
docker ps -a //-a 表示所有
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
10e7cb9df588 docker.io/jasonlix/docker-cobbler "/bin/bash" About a minute ago Created loving_leavitt
2.同過容器id號啟動容器
docker start 10e7cb9df588
10e7cb9df588
docker ps -a | grep 10e7cb9df588
10e7cb9df588 docker.io/jasonlix/docker-cobbler "/bin/bash" 4 minutes ago Up 42 seconds loving_leavitt //此時docker容器的狀態為up狀態
3.容器的終止
命令格式:docker stop 容器id/名稱
docker stop 10e7cb9df588
10e7cb9df588
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
10e7cb9df588 docker.io/jasonlix/docker-cobbler "/bin/bash" 8 minutes ago Exited (137) 27 seconds ago loving_leavitt
//此時status為exitd狀態
4.容器的進入
格式命令:docker exec -it 容器id/名稱 /bin/bash
[root@promote docker]# docker exec -it 10e7cb9df588 /bin/bash //進入docker
[root@10e7cb9df588 /]# ls //查看docker下的文件
anaconda-post.log boot etc lib lost+found mnt proc run srv sys usr
bin dev home lib64 media opt root sbin start.sh tmp var
[root@10e7cb9df588 /]# exit //退出docker
exit
5.容器的刪除
命令格式:docker rm 容器id/名稱
[root@promote docker]# docker stop 10e7cb9df588 //在刪除docker容器之前要先終止容器
10e7cb9df588
[root@promote docker]# docker rm 10e7cb9df588
10e7cb9df588
[root@promote docker]# docker ps -a | grep 10e7cb9df588
Docker容器基礎篇——鏡像、容器