<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      zhiye_wang

      向星空仰望的越深,越發(fā)現自己的渺小

      博客園 首頁 新隨筆 聯(lián)系 訂閱 管理

      第4章 使用Docker鏡像和倉庫

      回顧:

      回顧如何使用 docker run 創(chuàng)建最基本的容器

      $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用戶

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

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

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

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

      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 創(chuàng)建一個容器。

      [#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 創(chuàng)建 Docker Hub 賬號

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

      試剛才注冊的賬號是否可以工作了。要登錄到 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 命令創(chuàng)建鏡像

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

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

      [#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 ,然后執(zhí)行 docker commit 命令。

       

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

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


      如果像從剛才創(chuàng)建的鏡像運行一個容器,可以使用 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

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

      服務器的 Docker 鏡像。


      這里我們創(chuàng)建了一個名為 static_web 的目錄用來保存 Dockerfile,這個目錄就是我們的構建環(huán)

      境(build environment),Docker 則稱此環(huán)境為上下文(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 會按照順序從上往下執(zhí)行。

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

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

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

      層,繼續(xù)執(zhí)行下一條指令。

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

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

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

      默認情況,RUN執(zhí)行會在 shell 里使用 /bin/sh -c 來執(zhí)行。如果再不支持 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 賬號去執(zhí)行過。

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

      Sending build context to Docker daemon 2.048 kB

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

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

      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

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

      成功的最后一步創(chuàng)建一個容器,它的 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

      發(fā)現包名錯誤。

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

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

      構建即可。

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

      posted on 2016-03-15 18:50  zhiye_wang  閱讀(353)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 尤物国精品午夜福利视频| 国产精品香港三级国产av| 国产精品特级毛片一区二区三区 | 天美传媒一区二区| 精品黄色av一区二区三区| 在线视频中文字幕二区| 国产精品午夜福利精品| 乱60一70归性欧老妇| 中文字幕无码中文字幕有码a| 亚洲中文字幕无码日韩精品| 国产成人精品三级麻豆| 国产精品小粉嫩在线观看| 亚洲国产超清无码专区| 玩弄丰满少妇人妻视频| 国产福利永久在线视频无毒不卡 | 国产精品日日摸夜夜添夜夜添无码 | 少妇被粗大的猛烈进出动视频| 国产一区二区三区日韩精品| 久久精品国产午夜福利伦理| 亚洲精品天堂在线观看| 久久人妻国产精品| 正蓝旗| 亚洲二区中文字幕在线| 一本加勒比hezyo无码人妻| 国产叼嘿视频一区二区三区 | 日本精品人妻无码77777| 成年女性特黄午夜视频免费看| 国产成人无码区免费内射一片色欲| 亚洲爆乳少妇无码激情| 亚洲av麻豆aⅴ无码电影| 四虎影视一区二区精品| 久久热精品视频在线视频| 国产又黄又硬又粗| 国产一区二区一卡二卡| 精品视频在线观自拍自拍| 日韩精品一区二区三区中文无码 | 中文字幕久区久久中文字幕| 高清自拍亚洲精品二区| 日韩国产成人精品视频| 亚洲成av人片乱码色午夜| 高中生粉嫩无套第一次|