docker--鏡像、容器管理

Docker值得關注的特性:?

o??? 文件系統(tǒng)隔離:每個進程容器運行在一個完全獨立的根文件系統(tǒng)里。

?o??? 資源隔離:系統(tǒng)資源,像CPU和內(nèi)存等可以分配到不同的容器中,使用cgroup。?

o??? 網(wǎng)絡隔離:每個進程容器運行在自己的網(wǎng)絡空間,虛擬接口和IP地址。

?o??? 日志記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索。

?o??? 變更管理:容器文件系統(tǒng)的變更可以提交到新的映像中,并可重復使用以創(chuàng)建更多的容器。無需使用模板或手動配置。

?o??? 交互式shell:Docker可以分配一個虛擬終端并關聯(lián)到任何容器的標準輸入上,?

一.安裝docker?

?1.centos6安裝docker

由于centos6系統(tǒng)內(nèi)核是2.6,因此必須要先升級內(nèi)核

? 升級內(nèi)核? yum安裝帶aufs模塊的3.10內(nèi)核

#cd?/etc/yum.repos.d?

#wget?http://www.hop5.in/yum/el6/hop5.repo

#yum?install?kernel-ml-aufs?kernel-ml-aufs-devel

修改grub的主配置文件/etc/grub.conf,設置default=0,表示第一個title下的內(nèi)容為默認啟動的kernel(一般新安裝的內(nèi)核在第一個位置),重啟系統(tǒng),這時候你的內(nèi)核就成功升級了。

[root@localhost?~]#?uname?-r

3.10.5-3.el6.x86_64查看內(nèi)核是否支持aufs:

?[root@localhost?~]#?grep?aufs?/proc/filesystems

nodev????aufs

對于 CentOS6,可以使用EPEL庫安裝 Docker,命令如下

#yuminstall http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

#yum install docker-io

啟動docker服務

#service?docker?start

2.centos7安裝docker

yum? -y install docker

systemctl? start? docker.service

3.查看docker版本

docker? version?

docker info

二.Docker image詳細介紹

docker把下載的 images 存儲到docker主機上,如果一個 image 不在主機上,docker會從一個鏡像倉庫下載,默認的倉庫是?DOCKER HUB? 公共倉庫。

接下來將介紹更多關于docker images 的內(nèi)容,包括:

?使用和管理本地主機上的images

?創(chuàng)建一個基礎的images

?上傳 images 到docker hub (公共 images 倉庫)

?列出本地主機上已經(jīng)存在的images

1)查看本機的鏡像文件? ?

docker? images


?REPOSITORY:來自于哪個倉庫,比如docker.io/centos

?TAG的標記,比如?latest

?IMAGE ID:鏡像它的 ID 號

?CREATED:創(chuàng)建時間

?SIZE:鏡像的SIZE

2)獲取images

docker? pull? docker.io/centos

當我們啟動容器使用的 image 不再本地主機上時,docker會自動下載他們。這很耗時,我們可以使用docker pull 命令來預先下載我們需要的 image 。下面的例子下載一個centos 鏡像

3)查找images

搜索sinatra的鏡像

docker search sinatra

4) 下載images

如下載ssh鏡像

docker pull? ?docker.io/jdeathe/centos-ssh

5) 查看鏡像完整信息

docker? inspect? docker.io/centos

當鏡像下載成功后,你可以看到 12 位的 hash 值像 05188b417f30,這是下載完整的鏡像的精簡 ID,這些短的鏡像 ID 是完整鏡像 ID 的前 12 個字符--可以使用docker inspect 或者docker images?--no-trunc來獲得完整的鏡像ID

6)創(chuàng)建自己的images

docker run -i? ?-t docker.io/centos /bin/bash

docker? commit? ? -m " add? mariadb app"? -a "jishu"? ?446819c3e6c3? centos:mariadb

1.先使用基礎images啟動容器, 更新后提交到新的images

記住容器ID

在容器中安裝一個mariadb-server

然后使用exit退出容器,現(xiàn)在容器已經(jīng)被改變l,使用docker commit 命令提交相應的副本


?-m? 來指定提交的說明信息,跟我們使用的版本控制工具一樣

?-a? ?可以指定更新用戶信息

之后是創(chuàng)建鏡像的容器ID,最后是指定目標鏡像的倉庫名和tag信息

使用docker? images 來查看新創(chuàng)建的鏡像


啟動新創(chuàng)建的鏡像來啟動容器

[root@VM_82_228_centos src]# docker run -i -t centos:mariadb /bin/bash

[root@64ace5cf689e /]# rpm -qa | grep mariadb

mariadb-libs-5.5.56-2.el7.x86_64

mariadb-5.5.56-2.el7.x86_64

mariadb-server-5.5.56-2.el7.x86_64

2.使用dockerfile來創(chuàng)建images

使用docker build?來創(chuàng)建一個新的 image 。為此,我們需要創(chuàng)建一個dockerfile,

vim dockerfile


Dockerfile基本的語法是

使用#來注釋

FROM? 指令告訴 Docker 使用哪個鏡像作為基礎(docker使用哪個 image 源)

MAINTAINER? 是維護者的信息

RUN? ?開頭的指令會在創(chuàng)建中運行,比如安裝一個軟件包,在這里使用 yum來安裝了一些軟件

編寫完成Dockerfile后可以使用docker build?來生成鏡像。

docker build? -t="centos:httpd"

其中? -t? 標記來添加 tag,指定新的鏡像的用戶信息。

“.”是Dockerfile所在的路徑(當前目錄),也可以替換為一個具體的Dockerfile的路徑。

可以看到 build 進程在執(zhí)行操作。它要做的第一件事情就是上傳這個Dockerfile內(nèi)容,因為所有的操作都要依據(jù)Dockerfile來進行。然后,Dockfile中的指令被一條一條的執(zhí)行。每一步都創(chuàng)建了一個新的容器,在容器中執(zhí)行指令并提交修改(就跟之前介紹過的docker commit? 一樣)。當所有的指令都執(zhí)行完畢之后,返回了最終的鏡像 id。所有的中間步驟所產(chǎn)生的容器都被刪除和清理了。

*注意一個鏡像不能超過 127 層


還可以使用docker tag 命令來修改標簽

docker tag? ID? ?修改后的標簽

7)從本地文件導入鏡像

cat? centos-6.tar.gz? ?| docker import -? centos:6

8) 上傳鏡像

用戶可以通過docker push?命令,把自己創(chuàng)建的鏡像上傳到倉庫中來共享。例如,用戶在 Docker Hub 上,完成注冊后,可以推送自己的鏡像到倉庫中。

這里有兩種訪問可以創(chuàng)建和注冊一個 Docker Hub 賬戶:

1.通過網(wǎng)站,(https://hub.docker.com)

2.通過命令行

你可以通過使用命令行輸入?docker login?命令來創(chuàng)建一個 Docker Hub 賬號

#docker login

郵箱確認

一旦你填寫完畢表格,請查看你的電子郵件,通過點擊歡迎信息中的鏈接來激活您的賬戶。

基本思路:

首先注冊docker的賬戶,然后使用docker login登錄。使用docker push可以將自己的鏡像上傳上去了

如果有其他的倉庫,例如:

#docker push docker.sina.com.cn:5000/commit

9)用dcokerrmi移除本地images

docker? rmi? 鏡像名或鏡像id

注意:在刪除 images 之前要先用dockerrm刪掉依賴于這個 images 的容器

可以使用docker ps -a?

查看要刪除的images被那個容器使用著,所以需要先刪除這個容器,

使用docker? stop? 容器ID 停止容器

然后使用docker rm 容器ID 刪除這個容器

最后使用docker rmi? 鏡像ID刪除這個鏡像

停用全部運行中的容器:

docker? stop $(docker ps -q)

刪除全部容器:

docker? rm $(docker ps -aq)

可以加& 一起執(zhí)行

10)存出和載入鏡像

導出鏡像

docker save? ?-o? centos6.tar? ?centos:6

載入鏡像

docker? load --input? ? centos6.tar??

或者docker? load? < centos6.tar? (會導入鏡像以及相關的元數(shù)據(jù)信息,標簽等

三. docker容器

當利用docker run來創(chuàng)建并啟動容器時,Docker在后臺運行的標準操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載。

利用鏡像創(chuàng)建并啟動一個容器。

分配一個文件系統(tǒng),并在只讀的鏡像層外面掛在一層可讀寫層。

從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去。

從地址池配置一個IP地址給容器。

執(zhí)行用戶指定的應用程序。

執(zhí)行完畢后容器被終止

1)新建容器

docker? run -i? -t centos:centos6 /bin/bash

-t? 選項讓 Docker 分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上,

?-i? 則讓容器的標準輸入保持打開(即交互式),可以使用—name給容器起個形象的名稱。


資源利用率極高

使用logout,exit或者ctrl+c? 退出容器,docker ps -a? 查看容器處于exit狀態(tài),正常退出的話,應該使用ctrl -p? + ctrl -q? 退出偽終端

下面的容器輸出一個“hello world ” ,之后終止容器


當利用docker run? 來創(chuàng)建容器時,Docker 在后臺運行的標準操作包括:

1.檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載

2.利用鏡像創(chuàng)建并啟動一個容器

3.分配一個文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層

4.從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去

5.從地址池配置一個ip地址給容器

6.執(zhí)行用戶指定的應用程序

7.執(zhí)行完畢后容器被終止

2) 啟動容器

docker start 容器ID

終止容器

docker stop 容器ID

docker? kill? 容器ID

重啟容器

docker restart 容器ID

守護態(tài)運行,

docker? ?run? -d? -t centos:centos6? /bin/bash


容器啟動后會返回一個唯一的 id,也可以通過dockerps命令來查看容器信息。

1.docker run -d 運行提個新的容器,我們通過-d 命令讓他作為一個后臺運行

2.centos:centos6 是一個我們想要在內(nèi)部運行命令的鏡像

3./bin/sh -c 是我們想要在容器內(nèi)部運行的命令

4.while true; do echo hello weibo;

sleep 1; done 這是一個簡單的腳本,我們僅僅只是每秒打印一次 hello word 一直到我們結束它

使用docker? ?inspect 容器iD 查看容器信息

使用docker? ?inspect? 查看容器的ip地址


3) 進入容器

docker? ?attach? 容器ID

使用以下命令打開容器的交互界面

$ docker? exec -it 容器ID /bin/bash

進使用-d參數(shù)時,容器會進入后臺運行,需要進入容器操作時,可以使用docker attach? 命令 或者nsenter命令

1.docker attach 允許我們進入后臺進程.

2.--sig-proxy=false 不使用容器轉發(fā)信號,允許我們使用 ctrl -c 來退出,執(zhí)行dockerps查看在后臺運行

但是使用? attach? 命令有時候并不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執(zhí)行操作了。


也可以執(zhí)行docker exec進入運行的容器

docker? exec?-it? 容器ID/名稱/bin/bash

以上命令返回一個命令界面,exec代表直接在容器中運行命令

4) 容器的導入和導出

導出容器

docker? export 容器ID? > 導出文件

導入容器

可以使用docker import? 從容器快照文件中再導入為鏡像

# catcentos6.tar | docker import – centos6:test

此外,也可以通過指定 URL 或者某個目錄來導入,例如

#docker

import http://example.com/exampleimage.tgzexample/imagerepo

*注:用戶既可以使用docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用docker import 來導入一個容器快照到本地鏡像庫。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當時的快照狀態(tài)),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數(shù)據(jù)信息

刪除容器

使用docker rm? ?只能刪除一個處于停止狀態(tài)的容器

加 -f? 參數(shù),可以刪除正在運行的容器

docker? ?rm? ?[容器ID/容器name]??

批量刪除

docker rm $(docker ps -a -q)??

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容