Docker入門基礎(chǔ)之鏡像使用

當(dāng)運(yùn)行容器時(shí)企孩,使用的鏡像如果在本地中不存在宏所,docker 就會(huì)自動(dòng)從 docker 鏡像倉庫中下載幽七,默認(rèn)是從 Docker Hub 公共鏡像源下載。

Docker入門基礎(chǔ)之容器使用
Docker入門基礎(chǔ)之應(yīng)用實(shí)戰(zhàn)

下面我們來學(xué)習(xí):

  • 1隙赁、管理和使用本地 Docker 主機(jī)鏡像
  • 2、創(chuàng)建鏡像

列出鏡像列表
我們可以使用 docker images 來列出存在于宿主機(jī)上的鏡像梆暖。

 root@ubuntu:~# docker images
 REPOSITORY         TAG        IMAGE ID     CREATED      SIZE
 alpine           latest      055936d39205   3 weeks ago    5.53MB
 mysql           5.7        7faa3c53e6d6   3 weeks ago    373MB
 ubuntu           15.04       d1b55fd07600   3 years ago    131MB
 ubuntu           16.04       2a697363a870   2 weeks ago    119MB

各個(gè)選項(xiàng)說明:

  • REPOSITORY:表示鏡像的倉庫源
  • TAG:鏡像的標(biāo)簽
  • IMAGE ID:鏡像ID
  • CREATED:鏡像創(chuàng)建時(shí)間
  • SIZE:鏡像大小

同一倉庫源可以有多個(gè) TAG伞访,代表這個(gè)倉庫源的不同個(gè)版本,如ubuntu倉庫源里轰驳,有16.04厚掷、15.04等多個(gè)不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像级解。

以相應(yīng)的鏡像啟動(dòng)容器
我們?nèi)绻褂冒姹緸?6.04的ubuntu系統(tǒng)鏡像來運(yùn)行容器時(shí)冒黑,命令如下:

 root@ubuntu:~# docker run -it ubuntu:16.04 sh

如果要使用版本為15.04的ubuntu系統(tǒng)鏡像,則命令如下:

root@ubuntu:~# docker run -it ubuntu:15.04 sh

各個(gè)參數(shù)解析:

  • docker: Docker 的二進(jìn)制執(zhí)行文件勤哗。
  • run: 與前面的 docker 組合來運(yùn)行一個(gè)容器抡爹。
  • -it: 其實(shí)是兩個(gè)參數(shù)組成, -i 和 -t芒划,-i:允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互冬竟。-t:在新容器內(nèi)指定一個(gè)偽終端或終端。
  • ubuntu:15.04指定要運(yùn)行的鏡像民逼,Docker首先從本地主機(jī)上查找鏡像是否存在泵殴,如果不存在,Docker 就會(huì)從鏡像倉庫 Docker Hub 下載公共鏡像拼苍。
  • sh: 執(zhí)行命令笑诅。

獲取一個(gè)新鏡像
當(dāng)我們在宿主機(jī)上使用一個(gè)不存在的鏡像時(shí) Docker 就會(huì)自動(dòng)下載這個(gè)鏡像。如果我們想預(yù)先下載這個(gè)鏡像映屋,我們可以使用 docker pull 命令來下載它苟鸯。

 root@ubuntu:~# docker pull ubuntu:18.04
 18.04: Pulling from library/ubuntu
 6abc03819f3e: Pull complete
 05731e63f211: Pull complete
 0bd67c50d6be: Pull complete
 Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
 Status: Downloaded newer image for ubuntu:18.04

下載完成后,我們可以直接使用這個(gè)鏡像來運(yùn)行容器棚点。

查找鏡像

我們可以從 Docker Hub 網(wǎng)站來搜索鏡像早处,Docker Hub 網(wǎng)址為: https://hub.docker.com/
我們也可以使用 docker search 命令來搜索鏡像。比如我們需要一個(gè)httpd的鏡像來作為我們的web服務(wù)瘫析。我們可以通過 docker search 命令搜索 httpd 來尋找適合我們的鏡像砌梆。

在這里插入圖片描述

NAME:鏡像倉庫源的名稱
DESCRIPTION:鏡像的描述
OFFICIAL:是否docker官方發(fā)布

拉取httpd鏡像
我們決定使用上圖中的httpd 官方版本的鏡像,使用命令 docker pull 來下載鏡像贬循。

root@ubuntu:~# docker pull httpd
 Using default tag: latest
 latest: Pulling from library/httpd
 743f2d6c1f65: Already exists
 c92eb69846a6: Pull complete
 2211b052800a: Pull complete
 aed180197314: Pull complete
 7c472a4980a7: Pull complete
 Digest: sha256:a35ad614c1ffc6fe931f12dc42b682edbdcc62cf78d8edc41499dd90ef0f8003
 Status: Downloaded newer image for httpd:latest

下載完成后咸包,我們就可以使用這個(gè)鏡像了。

創(chuàng)建鏡像
當(dāng)我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時(shí)杖虾,我們可以通過以下兩種方式對(duì)鏡像進(jìn)行更改烂瘫。

  • 1.從已經(jīng)創(chuàng)建的容器中更新鏡像,并且提交這個(gè)鏡像
  • 2.使用 Dockerfile 指令來創(chuàng)建一個(gè)新的鏡像

更新鏡像
更新鏡像之前,我們需要使用鏡像來創(chuàng)建一個(gè)容器坟比。

root@ubuntu:~# docker run -it ubuntu:16.04 sh

在運(yùn)行的容器內(nèi)使用 apt-get update 命令進(jìn)行更新芦鳍。

 # apt-get update
 Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
 Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
 Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
 Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
 Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
 Get:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB]
 Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
 Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
 Get:9 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
 Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB]
 Get:11 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
 Get:12 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB]
 Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
 Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB]
 Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB]
 Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
 Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B]
 Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B]
 Fetched 15.8 MB in 8s (1933 kB/s)
 Reading package lists... Done

在完成操作之后,輸入 exit命令來退出這個(gè)容器葛账。

通過 docker ps -a 查看所有容器:

root@ubuntu:~# docker ps -a
 CONTAINER ID   IMAGE              COMMAND        CREATED      STATUS           PORTS          NAMES
 12847d9f5071   ubuntu:16.04           "sh"          2 minutes ago   Exited (0) 43 seconds ago               peaceful_edison
 3cec6f5e47c0   httpd              "httpd-foreground"   5 minutes ago   Exited (0) 5 minutes ago               vigilant_heisenberg

此時(shí)ID為12847d9f5071的容器柠衅,是按我們的需求更改的容器。我們可以通過命令docker commit來提交容器副本籍琳。

root@ubuntu:~# docker commit -m="has update" -a="yeqing112" 12847d9f5071 yeqing112/ubuntu:v2
sha256:5cce1167ee4c083ff9b87e61a58081805e76d015a12a4811bd152263aa013860

各個(gè)參數(shù)說明:

  • -m: 提交的描述信息菲宴。
  • -a: 指定鏡像作者。
  • 12847d9f5071: 容器ID趋急。
  • yeqing112/ubuntu:v2: 指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名喝峦。

我們可以使用 docker images 命令來查看我們的新鏡像 yeqing112/ubuntu:v2

root@ubuntu:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v2                  5cce1167ee4c        2 minutes ago       144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB

從上面的信息中可以看到我們更新過的鏡像,文件體積明顯比之前大了一些宣谈。

構(gòu)建鏡像
除了上面更新鏡像的方法愈犹,我們還可以使用命令 docker build , 從零開始來構(gòu)建一個(gè)新的鏡像闻丑。為此,我們需要?jiǎng)?chuàng)建一個(gè) Dockerfile 文件勋颖,其中包含一組指令來告訴 Docker 如何構(gòu)建我們的鏡像嗦嗡。

root@ubuntu:~# cat Dockerfile 
FROM    ubuntu:16.04
MAINTAINER      Fisher "service@urlos.com"

RUN     apt-get update

EXPOSE  22
EXPOSE  80

CMD     /bin/bash

每一個(gè)指令都會(huì)在鏡像上創(chuàng)建一個(gè)新的層,每一個(gè)指令的前綴都必須是大寫的饭玲。

第一條FROM侥祭,指定使用哪個(gè)鏡像源

RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令,安裝了什么

這里我們還是一樣茄厘,執(zhí)行一個(gè) apt-get update 更新命令

然后矮冬,我們使用 Dockerfile 文件,通過 docker build -t yeqing112/ubuntu:v3 . 命令來構(gòu)建一個(gè)新鏡像次哈。

root@ubuntu:~# root@ubuntu:/home# docker build -t yeqing112/ubuntu:v3 .
Sending build context to Docker daemon  422.4kB
Step 1/6 : FROM    ubuntu:16.04
 ---> 2a697363a870
Step 2/6 : MAINTAINER      Fisher "service@urlos.com"
 ---> Running in 92229e7a091a
Removing intermediate container 92229e7a091a
 ---> 9a89f4debc7d
Step 3/6 : RUN     apt-get update
 ---> Running in d709ef335784
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B]
Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B]
Fetched 15.8 MB in 5s (3051 kB/s)
Reading package lists...
Removing intermediate container d709ef335784
 ---> 540751496556
Step 4/6 : EXPOSE  22
 ---> Running in 9ae528bc083f
Removing intermediate container 9ae528bc083f
 ---> cfccc621a52d
Step 5/6 : EXPOSE  80
 ---> Running in efd88e9349c1
Removing intermediate container efd88e9349c1
 ---> 428cb5221a06
Step 6/6 : CMD     /bin/bash
 ---> Running in 2bc08b664f97
Removing intermediate container 2bc08b664f97
 ---> 9c55ea9b9ee8
Successfully built 9c55ea9b9ee8
Successfully tagged yeqing112/ubuntu:v3

參數(shù)說明:

  • -t:指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
  • .:Dockerfile 文件所在目錄胎署,可以指定Dockerfile 的絕對(duì)路徑
    構(gòu)建成功后,使用 docker images 查看鏡像:
root@ubuntu:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v3                  9c55ea9b9ee8        9 seconds ago       144MB
yeqing112/ubuntu             v2                  5cce1167ee4c        16 minutes ago      144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB

由上面的信息看出窑滞,新的鏡像v3與v2文件體積是一樣的琼牧,兩個(gè)鏡像都只是執(zhí)行了apt-get update

設(shè)置鏡像標(biāo)簽
我們可以使用 docker tag 命令,為鏡像添加一個(gè)新的標(biāo)簽哀卫。

root@ubuntu:/home# docker tag 9c55ea9b9ee8 yeqing112/ubuntu:v3-1

docker tag 鏡像ID巨坊,這里是 9c55ea9b9ee8,用戶名稱此改、鏡像源名(repository name)和新的標(biāo)簽名(tag)趾撵。

使用 docker images 命令可以看到,ID為9c55ea9b9ee8的鏡像多了一個(gè)v3-1的標(biāo)簽共啃。

root@ubuntu:/home# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v3                  9c55ea9b9ee8        21 minutes ago      144MB
yeqing112/ubuntu             v3-1                9c55ea9b9ee8        21 minutes ago      144MB
yeqing112/ubuntu             v2                  5cce1167ee4c        38 minutes ago      144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末占调,一起剝皮案震驚了整個(gè)濱河市暂题,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妈候,老刑警劉巖敢靡,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苦银,居然都是意外死亡啸胧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門幔虏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺念,“玉大人,你說我怎么就攤上這事想括∠萜祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵瑟蜈,是天一觀的道長烟逊。 經(jīng)常有香客問我,道長铺根,這世上最難降的妖魔是什么宪躯? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮位迂,結(jié)果婚禮上访雪,老公的妹妹穿的比我還像新娘。我一直安慰自己掂林,他們只是感情好臣缀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泻帮,像睡著了一般精置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刑顺,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天氯窍,我揣著相機(jī)與錄音,去河邊找鬼蹲堂。 笑死狼讨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柒竞。 我是一名探鬼主播政供,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了布隔?” 一聲冷哼從身側(cè)響起离陶,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衅檀,沒想到半個(gè)月后招刨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哀军,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年沉眶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杉适。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谎倔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猿推,到底是詐尸還是另有隱情片习,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布蹬叭,位于F島的核電站藕咏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秽五。R本人自食惡果不足惜集畅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一事哭、第九天 我趴在偏房一處隱蔽的房頂上張望综苔。 院中可真熱鬧蚌卤,春花似錦龄减、人聲如沸劲够。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽济榨。三九已至坯沪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擒滑,已是汗流浹背腐晾。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丐一,地道東北人藻糖。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像库车,于是被迫代替她去往敵國和親巨柒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355