青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

zhiye_wang

向星空仰望的越深,越發現自己的渺小

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  31 隨筆 :: 1 文章 :: 2 評論 :: 0 Trackbacks

第4章 使用Docker鏡像和倉庫

回顧:

回顧如何使用 docker run 創建最基本的容器

$sudo docker run -i -t --name another_container_mum ubuntu /bin/bash

root@3d49f5830c81:/# 

這條命令會啟動一個新的名為 another_container_mum 的容器,這個容器基于ubuntu鏡

像并且會啟動Bash Shell

---------------------------------------------------------------------------------------------

4.1 什么是 Docker 鏡像

4.2 列出鏡像


可以看出我這里有三個鏡像。

其中 ubuntu 是我上午下載的 ubuntu 基礎鏡像,paulcos11/docker-tutorial 是下載的另外

一個用戶上傳的鏡像。但是不知道 CREATED 這一欄的時間怎么不準。

鏡像從倉庫下載下來。鏡像保存在倉庫中。而倉庫存在于Registry中。默認的Registry是由Do

cker公司運營的公共 Registry 服務,即是 Dcoker Hub。

每個鏡像庫都可以存放很多鏡像,例如我們查看一下ubuntu倉庫中的其他鏡像,

可是使用 docker images 查看所有的 ubuntu docker 鏡像

sudo docker images

可以使用docker pull下載某個基礎鏡像

[#12#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull ubuntu

 

Docker Hun 中有兩種類型倉庫:用戶倉庫和頂層倉庫。用戶倉庫的鏡像都是有Docker用戶

創建的,而頂層倉庫則是由Docker內部的人來管理的。用戶倉庫的命名由用戶名和倉庫名兩

部分組成,如:paulcos11/docker-tutorial,用戶名:paulcos11,倉庫名:docker-tutor

ial,與其相對的頂層倉庫只包含倉庫名部分,例如 ubuntu,fedora。頂層倉庫由Docker公

司和由選定的能提供優質基礎鏡像的廠商管理。

4.3 拉取鏡像

使用docker images可以查看本地Docker宿主機上面的鏡像。如果希望能在鏡像列表中只看

到某個鏡像的內容,例如 fedora,可以通過在 docker images 命令后面跟指定的鏡像名來實

現,例如: 

使用 docker pull 拉取鏡像

[#15#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull fedora

Using default tag: latest

latest: Pulling from library/fedora

6888fc827a3f: Pull complete 

9bdb5101e5fc: Downloading [===================>                               ] 28.63 MB/74.33 MB

4.4 查找鏡像

我本地的鏡鏡像有:

[#1#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker images

[sudo] password for cloudsoar: 

REPOSITORY                         TAG                 IMAGE ID               CREATED             VIRTUAL SIZE

paulcos11/docker-tutorial   latest              e37931352714        8 days ago          587.8 MB

ubuntu                                  latest              8ed581e3fa7a        11 days ago         188 MB

此時 fedora 鏡像還是沒有下載完畢的。不著急。我們先練習其他的操作,在 paulcos11/do

cker-tutorial 鏡像中使用 docker run 命令來從 docker-tutorial 創建一個容器。

[#2#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t paulcos11/docker-tutorial /bin/bash

root@869a3b2049ad:/#

可以看到,已經從 paulcos11/docker-tutorial 鏡像啟動了一個新的容器。

4.5 構建鏡像

構建 Docker 鏡像有以下兩種方法:

使用 docker commit 命令。

使用 docker build 命令和 Dockerfile 文件。

4.5.1 創建 Docker Hub 賬號

在 hub.docker.com 創建一個自己的賬號,注冊之后通過收到的確認郵件激活,下面就可以測

試剛才注冊的賬號是否可以工作了。要登錄到 docker hub,可以使用 docker login 命令。如

這里看到我是注冊成功了,用戶名只能是字母或者數組的組合。下面使用 docker login 來驗證

我的賬號:

[#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker login

Username: zhiyewang

Password: 

Email: zhiye_wang@yeah.net           

WARNING: login credentials saved in /home/cloudsoar/.docker/config.json

Login Succeeded

可以看到我的賬號登錄成功了。

4.5.2 使用 Docker 的 commit 命令創建鏡像

這里我基于前面下載的 ubuntu 鏡像來創建一個新鏡像。

首先我在這個基礎鏡像中啟動一個容器

[#5#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t ubuntu /bin/bash

root@460f5a1ac42a:/# 

在容器中安裝個 Apache 作為一個 web 服務器來運行。這樣每次使用 Apache 的時候不用再

重新安裝 Apache 了。

root@460f5a1ac42a:/# apt-get -y install apache2

Reading package lists... Done

Building dependency tree       

root@460f5a1ac42a:/# apt-get -y install vim

我喜歡用vim,同時又安裝了一個 vim,哇咔咔。

為了完成此項工作,需要先退出 exit ,然后執行 docker commit 命令。

 

這里需要注意的是, docker commit 提交的是創建容器的鏡像與容器的當前狀態之間有差異

的部分,這使得該更新非常輕量。這里可以看到我創建的結果。


如果像從剛才創建的鏡像運行一個容器,可以使用 docker run 命令

[#16#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -t -i zhiyewang/apache2 /bin/bash

root@bb634a313bf2:/# 

4.5.3 使用 Dockerfile 構建鏡像

事實上所有資料都不推介使用 docker commit 的方法構建鏡像,而是使用 Dockerfile 的定義

文件和 docker build 命令來構建鏡像。

我們的第一個 Dockerfile

現在我們創建一個目錄,并在里面創建初始的 Dockerfile,我們將創建一個包含簡單 Web 服

服務器的 Docker 鏡像。


這里我們創建了一個名為 static_web 的目錄用來保存 Dockerfile,這個目錄就是我們的構建環

境(build environment),Docker 則稱此環境為上下文(context)或者構建上下文(build

 context)。Docker 會在構建鏡像時候,將構建上下文和該上下文中的文件和目錄上傳到 doc

 ker 守護進程。這樣 Docker 守護進程就能直接訪問你想在鏡像中存儲的任何代碼。

下面是一個 Dockerfile 的例子,用 Dockerfile 構建一個能作為 Web 服務器的 Docker 鏡像。

  1 # version: 0.0.1

  2 FROM ubuntu:14.04

  3 MAINTAINER zhiyewang "zhiye_wang@yeah.net"

  4 RUN apt-get update

  5 RUN apt-get install -y nginx

  6 RUN echo 'Hi, I am in your container' \

  7     >/usr/share/nginx/html/index.html

  8 EXPOSE 80                             

命令解釋:

Dockerfile 由一系列指令和參數組成。每條指令都是大寫,而且后面需要跟一個參數。Docker

 file 會按照順序從上往下執行。

Dockerfile 支持注釋,所有以井號開頭的都是注釋。

FROM ubuntu:14.04 指定了 ubuntu 14.04 作為基礎鏡像,每

執行一條指令,對容器做出修改。自動會再指定類似 docker commit 的操作,提交一個新鏡像

層,繼續執行下一條指令。

MAINTAINER 指令會告訴 Docker 該鏡像的作者是誰,以及作者的電子郵件地址。

接下來我們執行了三條 RUN 指令,RUN 指令會在當前鏡像中運行指定的命令。我們通過RUN明

令更新了 APT 倉庫,安裝了 nginx 包,之后創建了  /usr/share/nginx/html/index.html 文件,

默認情況,RUN執行會在 shell 里使用 /bin/sh -c 來執行。如果再不支持 shell 或者不想再 shell

中運行,可以使用 exec 格式的 RUN

RUN [ "apt-get", "install", "-y", "nginx" ]

接下來的 EXPOSE 指令,告訴 Docker 該容器內的應用程序將會使用 Docker 的指定端口。但是

Docker 并不會自動打開此端口,而是需要再使用 docker run 運行容器時候指定需要打開那些端

口。

4.5.4 基于 Dockerfile 構建新鏡像

運行 Dockerfile 

[#34#cloudsoar@cloudsoar-virtual-machine ~]$cd static_web/

[#35#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker build -t="zhiyewang/static_web" .

Sending build context to Docker daemon 2.048 kB

Step 1 : FROM ubuntu:14.04

14.04: Pulling from library/ubuntu

Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

Status: Downloaded newer image for ubuntu:14.04

 ---> 8ed581e3fa7a

Step 2 : MAINTAINER zhiyewang "zhiye_wang@yeah.net"

 ---> Running in 7806118624b7

 ---> c5aed3a8ff95

Removing intermediate container 7806118624b7

...

Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...

 ---> ddc8935b098a

Removing intermediate container c81405d28e41

Step 5 : RUN echo 'Hi, I am in your container'  >/usr/share/nginx/html/index.html

 ---> Running in f0049e284208

 ---> 6a7a53f6e78a

Removing intermediate container f0049e284208

Step 6 : EXPOSE 80

 ---> Running in 2a0714253002

 ---> e97eb7ef0136

Removing intermediate container 2a0714253002

Successfully built e97eb7ef0136

 

這里使用 -t 參數為新鏡像設置了倉庫和名稱。倉庫為 zhiyewang,名稱為 static_web,也可

以構建過程中為鏡像添加一個標簽,方法為“鏡像名:標簽”
sudo docker build -t="zhiyewang/static_web:v1" .

如果沒有定制任何標簽,Docker 會自動為鏡像設置一個 latest 標簽。

上面命令最后的 . 告訴我們去當前路徑去找 Dockerfile 文件。也可以指定一個 Git 倉庫的源地

址來指定 Dockerfile 的位置。例如

sudo docker build -t="zhiyewang/static_web:v1" \

 git@github.com:zhiyewang/docker-static_web

這里假設的在 Git 倉庫的目錄下存在 Dockerfile 文件。我也沒有注冊 Git 賬號去執行過。

查看 docker build 過程發現,構建上下文已經上傳到了 Docker 守護進程:

Sending build context to Docker daemon 2.048 kB

之后,可以看到 Dockerfile 中的每條明令都被順序執行,而且構建過程的最終結果返回了新的

鏡像的 ID,即 e97eb7ef0136 ,并且 Docker 會提交每一步的執行結果。

4.5.4 指令失敗時候會怎樣

例如我們將上面的第 4 步的包名 nginx 寫成 ngin

[#41#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker build -t="zhiyewang/static_web" .

[sudo] password for cloudsoar: 

Sending build context to Docker daemon 2.048 kB

Step 1 : FROM ubuntu:14.04

 ---> 8ed581e3fa7a

Step 2 : MAINTAINER zhiyewang "zhiye_wang@yeah.net"

 ---> Using cache

 ---> c5aed3a8ff95

Step 3 : RUN apt-get update

 ---> Using cache

 ---> 40fa5cd1c3d2

Step 4 : RUN apt-get install -y ngin

 ---> Running in 86e3dbaadf20

Reading package lists...

Building dependency tree...

Reading state information...

E: Unable to locate package ngin

The command '/bin/sh -c apt-get install -y ngin' returned a non-zero code: 100

發現會出錯。我們來調試一下失敗原因。用 docker run 明令來基于這次構建到目前為止已經

成功的最后一步創建一個容器,它的 ID 是 40fa5cd1c3d2 ,如下代碼:

[#42#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker run -t -i 40fa5cd1c3d2 /bin/bash

root@b978996f25f3:/#

這時我們在此容器中運行第 4 步:

root@b978996f25f3:/# apt-get install -y ngin

Reading package lists... Done

Building dependency tree       

Reading state information... Done

E: Unable to locate package ngin

發現包名錯誤。

我們可以在這個容器中再次運行 apt-get install -y nginx,這次輸入正確的包名,來定位問題

,如果一旦解決了這個問題,就可以退出容器,用正確的包名修改 Dockerfile 文件,之后再次

構建即可。

這一篇到這里。下一篇繼續學習Dockerfile 和構建緩存。

posted on 2016-03-17 11:00 zhiye_wang 閱讀(464) 評論(0)  編輯 收藏 引用 所屬分類: docker
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品在线观看| 一区二区三区日韩欧美精品| 欧美在线啊v| 国产亚洲欧美中文| 久久久久久网| 免费国产自线拍一欧美视频| 亚洲日本中文| 一本色道久久加勒比88综合| 国产精品美女xx| 久久九九全国免费精品观看| 久久精品中文字幕一区| 91久久久在线| 一区二区三区欧美亚洲| 国产亚洲精品bt天堂精选| 裸体歌舞表演一区二区| 欧美大色视频| 性伦欧美刺激片在线观看| 久久激情综合| 宅男噜噜噜66一区二区| 亚洲欧美视频| 亚洲乱码日产精品bd| 亚洲淫性视频| 亚洲国产精品一区二区第一页| 亚洲毛片播放| 狠狠色综合一区二区| 亚洲日本成人| 国产视频一区二区在线观看| 欧美激情a∨在线视频播放| 欧美日韩一区二区精品| 久久综合色婷婷| 欧美午夜精品久久久| 久久综合给合久久狠狠狠97色69| 欧美精品一区二区三区蜜桃 | 久久一区二区三区国产精品| 99视频精品全部免费在线| 亚洲欧美国产77777| 亚洲精品乱码久久久久| 欧美一区二区三区播放老司机| 亚洲国产精品999| 亚洲欧美中文日韩在线| 一区二区高清在线| 蜜臀91精品一区二区三区| 午夜性色一区二区三区免费视频| 女人香蕉久久**毛片精品| 久久国产精品久久久久久久久久| 欧美巨乳在线| 欧美国产第二页| 国产一区二区精品久久| 一区二区三区精品视频在线观看| 亚洲高清视频在线| 久久久av网站| 久久久久久亚洲精品杨幂换脸| 欧美日韩不卡在线| 亚洲国产视频一区| 亚洲国产精品久久久久婷婷老年| 欧美一级二区| 性色一区二区| 国产精品久久中文| 一本色道久久加勒比88综合| 亚洲精品午夜| 欧美顶级大胆免费视频| 噜噜噜噜噜久久久久久91| 国产亚洲精品久久久久婷婷瑜伽| 在线一区观看| 欧美一区二区黄色| 国产欧美日韩视频一区二区三区| 一区二区av在线| 亚洲欧美激情四射在线日| 国产精品高潮久久| 宅男噜噜噜66一区二区66| 亚洲一区二区久久| 欧美性大战久久久久久久| 99这里有精品| 亚洲欧美三级在线| 国产欧美综合一区二区三区| 亚洲欧美成人在线| 久久久欧美一区二区| 伊人夜夜躁av伊人久久| 久久久亚洲精品一区二区三区| 免费成人美女女| 亚洲精品乱码久久久久久蜜桃麻豆| 久热精品视频在线| 亚洲人精品午夜| 亚洲一区二区在线视频| 国产欧美日韩精品专区| 久久九九久精品国产免费直播| 美女主播一区| 一区二区三区国产盗摄| 国产精品视频999| 久久久精品999| 亚洲欧洲一区二区在线播放| 亚洲专区免费| 一区二区三区在线不卡| 欧美国产精品| 午夜精品美女久久久久av福利| 久久一区二区精品| 洋洋av久久久久久久一区| 国产精品久久久久久久午夜片| 欧美一区三区二区在线观看| 欧美成人亚洲成人| 亚洲在线免费观看| 亚洲第一黄色网| 国产精品xxx在线观看www| 久久精品亚洲一区| 亚洲免费成人| 农村妇女精品| 午夜综合激情| 日韩一级成人av| 国产一区二区三区日韩| 欧美激情亚洲一区| 欧美在线影院在线视频| 日韩午夜在线| 欧美高清成人| 久久精品卡一| 亚洲综合不卡| 亚洲精品少妇网址| 激情视频一区二区| 国产精品一区二区久久精品| 欧美黄色影院| 噜噜噜91成人网| 久久狠狠亚洲综合| 亚洲欧美不卡| 在线亚洲电影| 亚洲美女视频在线免费观看| 免费av成人在线| 久久精品一二三区| 亚洲欧美日韩一区二区三区在线| 亚洲国产精品欧美一二99| 国产一区二区丝袜高跟鞋图片| 欧美日韩一区二区三区免费| 欧美成人一区二区在线| 久久美女性网| 久久久久看片| 久久精品女人的天堂av| 欧美一激情一区二区三区| 亚洲视频成人| 亚洲午夜久久久久久久久电影网| 亚洲国产专区| 亚洲精品国产精品久久清纯直播| 女人色偷偷aa久久天堂| 久久婷婷亚洲| 老司机免费视频一区二区| 久久久久久久综合| 久久久久久久久久久久久女国产乱| 亚洲欧美综合| 久久福利电影| 久久午夜精品一区二区| 欧美在线一区二区三区| 久久精品国产亚洲一区二区三区 | 亚洲一区在线播放| 亚洲影视中文字幕| 新片速递亚洲合集欧美合集| 亚洲欧美日韩一区二区三区在线观看| 在线天堂一区av电影| 亚洲小说春色综合另类电影| 亚洲桃花岛网站| 亚洲欧美韩国| 久久久久久欧美| 欧美成人一区二区三区| 亚洲成色www8888| 99国产精品久久久久老师| 国产精品99久久久久久久久| 亚洲欧美日本国产有色| 欧美一区日韩一区| 免费看的黄色欧美网站| 欧美日韩视频不卡| 国产日韩欧美不卡在线| 在线日韩一区二区| 日韩一级片网址| 午夜精品福利一区二区三区av | 久久高清一区| 欧美不卡在线| 一本色道久久综合亚洲91| 羞羞色国产精品| 男女av一区三区二区色多| 欧美日韩在线免费视频| 国产婷婷成人久久av免费高清 | 99精品热视频| 久久精品72免费观看| 欧美成人一区二区三区| 国产精品99久久久久久久女警 | 国产精品二区影院| 国内精品一区二区| 一区二区电影免费观看| 久久午夜视频| 亚洲一二三区在线观看| 免费日韩视频| 国产婷婷97碰碰久久人人蜜臀| 亚洲美女av电影| 久久视频一区二区| 亚洲视频自拍偷拍| 蘑菇福利视频一区播放| 国产视频在线观看一区| 一区二区电影免费观看| 欧美chengren| 欧美一区二区三区在线观看| 欧美日韩综合视频| 91久久久久久国产精品| 久久综合电影一区| 亚洲欧美一级二级三级|