<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在[了解Docker](https://github.com/widuu/chinese_docker/blob/master/userguide)這部分中,我們知道了 Docker 鏡像是容器的基礎。。在[前面的部分](https://github.com/widuu/chinese_docker/blob/master/userguide/dockerizing.md)我們使用的是已經構建好的 Docker 鏡像,例如:?`ubuntu`?鏡像和?`training/webapp`?鏡像。 我們還了解到 Docker 商店下載鏡像到本地的 Docker 主機上。如果一個鏡像不存在,他就會自動從 Docker 鏡像倉庫去下載,默認是從?`Docker Hub`?公共鏡像源下載。 在這一節中,我們將探討更多的關于 Docker 鏡像的東西: * 管理和使用本地 Docker 主機鏡像。 * 創建基本鏡像 * 上傳 Docker 鏡像到?[Docker Hub Registry](https://registry.hub.docker.com/)。 ## 在主機上列出鏡像列表 讓我們列出本地主機上的鏡像。你可以使用?`docker images`?來完成這項任務: ~~~ $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE training/webapp latest fc77f57ad303 3 weeks ago 280.5 MB ubuntu 13.10 5e019ab7bf6d 4 weeks ago 180 MB ubuntu saucy 5e019ab7bf6d 4 weeks ago 180 MB ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB ubuntu precise 74fe38d11401 4 weeks ago 209.6 MB ubuntu 12.10 a7cf8ae4e998 4 weeks ago 171.3 MB ubuntu quantal a7cf8ae4e998 4 weeks ago 171.3 MB ubuntu 14.04 99ec81b80c55 4 weeks ago 266 MB ubuntu latest 99ec81b80c55 4 weeks ago 266 MB ubuntu trusty 99ec81b80c55 4 weeks ago 266 MB ubuntu 13.04 316b678ddf48 4 weeks ago 169.4 MB ubuntu raring 316b678ddf48 4 weeks ago 169.4 MB ubuntu 10.04 3db9c44f4520 4 weeks ago 183 MB ubuntu lucid 3db9c44f4520 4 weeks ago 183 MB ~~~ 我們可以看到之前使用的鏡像。當我們每次要使用鏡像啟動一個容器的時候都會從?[Docker Hub](https://hub.docker.com/)?下載對應的鏡像。 我們在鏡像列表中看到三個至關重要的東西。 * 來自什么鏡像源,例如?`ubuntu` * 每個鏡像都有標簽(tags),例如?`14.04` * 每個鏡像都有鏡像ID 鏡像源中可能存儲這一個鏡像源的多個版本。我們會看到?`Ubuntu`?的多個版本:10.04, 12.04, 12.10, 13.04, 13.10 and 14.04。每個容器有一個唯一的標簽,讓我們來識別為不同的鏡像,例如: ~~~ ubuntu:14.04 ~~~ 所以我們可以運行一個帶標簽鏡像的容器: ~~~ $ sudo docker run -t -i ubuntu:14.04 /bin/bash ~~~ 如果我們想要使用?`Ubuntu 12.04`?的鏡像來構建,我們可以這樣做 ~~~ $ sudo docker run -t -i ubuntu:12.04 /bin/bash ~~~ 如果你不指定一個鏡像的版本標簽,例如你只使用?`Ubuntu`,Docker將默認使用?`Ubuntu:latest`?鏡像。 > 提示:我們建議使用鏡像時指定一個標簽,例如?`ubuntu:12.04`?。這樣你知道你使用的是一個什么版本的鏡像。 ## 獲取一個新的鏡像 現在如何獲取一個新的鏡像?當我們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。但是這需要一段時間來下載這個鏡像。如果我們想預先下載這個鏡像,我們可以使用`docker pull`命令來下載它。這里我們下載`centos`?鏡像。 ~~~ $ sudo docker pull centos Pulling repository centos b7de3133ff98: Pulling dependent layers 5cc9e91966f7: Pulling fs layer 511136ea3c5a: Download complete ef52fb1fe610: Download complete . . . ~~~ 我們看到鏡像的每一層都被下載下來了,現在我們可以直接使用這個鏡像來運行容器,而不需要在下載這個鏡像了。 ~~~ $ sudo docker run -t -i centos /bin/bash bash-4.1# ~~~ ## 查找鏡像 Docker 的特點之一是人們創建了各種各樣的 Docker 鏡像。而且這些鏡像已經被上傳到了?`Docker Hub`?。我們可以從`Docker Hub`?網站來搜索鏡像。 ![2015-06-25/558b7b8c9bfdb](https://box.kancloud.cn/2015-06-25_558b7b8c9bfdb.png) 我們也可以使用?`docker search`?命令來搜索鏡像。譬如說我們的團隊需要一個安裝了 Ruby 和 Sinatra 的鏡像來做我們的 web 應用程序開發。我們可以通過?`docker search`?命令來搜索所有的`sinatra`?來尋找適合我們的鏡像 ~~~ $ sudo docker search sinatra NAME DESCRIPTION STARS OFFICIAL AUTOMATED training/sinatra Sinatra training image 0 [OK] marceldegraaf/sinatra Sinatra test app 0 mattwarren/docker-sinatra-demo 0 [OK] luisbebop/docker-sinatra-hello-world 0 [OK] bmorearty/handson-sinatra handson-ruby + Sinatra for Hands on with D... 0 subwiz/sinatra 0 bmorearty/sinatra 0 . . . ~~~ 我們看到了返回了大量的?`sinatra`鏡像。我們看到列表中有鏡像名稱、描述、Stars(衡量鏡像的流行程度-如果用戶喜歡這個鏡像他就會點擊 stars )和 是否是正式以及構建狀態。[官方鏡像倉庫](https://docs.docker.com/docker-hub/official_repos/)?是官方精心整理出來服務 Docker 的 Docker 鏡像庫。自動化構建的鏡像倉庫是允許你驗證鏡像的內容和來源。 ## 翻譯到這里 我們回顧以前使用的鏡像,我們決定使用`sinatra`鏡像。到目前為止,我們已經看到了兩種類型的鏡像,像`ubuntu`鏡像,我們稱它為基礎鏡像或者根鏡像。這些鏡像是由docker公司提供建立、驗證和支持。這些鏡像都可以通過自己的名字來標示。 我們還可以看到用戶的鏡像,例如`training/sinatra`,并且我們可以使用`docker pull`命令來下載它。 ~~~ $ sudo docker pull training/sinatra ~~~ 現在我們的團隊可以在自己的容器內使用這個鏡像了。 ~~~ $ sudo docker run -t -i training/sinatra /bin/bash root@a8cb6ce02d85:/# ~~~ ## 創建自己的鏡像 我們的團隊發現`training/sinatra`鏡像雖然有用但是不是我們需要的,我們需要針對這個鏡像做出更改。現在又兩種方法,我們可以更新和創建鏡像。 * 1.我們可以從已經創建的容器中更新鏡像,并且提交這個鏡像。 * 2.我們可以使用`Dockerfile`指令來創建一個鏡像。 ## 更新并且提交鏡像 更新一個鏡像,首先我們要創建一個我們想更新的容器。 ~~~ $ sudo docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/# ~~~ > 注意:創建容器ID`0b2616b0e5a8`,我們在后邊還需要使用它。 在我們的容器內添加`json` ~~~ root@0b2616b0e5a8:/# gem install json ~~~ 當我們完成的時候,輸入`exit`命令來退出這個容器。 現在我們有一個根據我們需求做出改變的容器。我們可以使用`docker commit`來提交這個容器。 ~~~ $ sudo docker commit -m="Added json gem" -a="Kate Smith" \ 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c ~~~ 這里我們使用了`docker commit`命令。我們可以指定`-m`和`-a`標示。`-m`標示是允許我們指定提交的信息,就像你提交一個版本控制。`-a`標示允許對我們的更新指定一個用戶。 我們也指定了我們想要創建的新鏡像來自(我們先前記錄的ID)`0b2616b0e5a8`和我們指定的目標鏡像: ~~~ ouruser/sinatra:v2 ~~~ 讓我們分解這個步驟。我們先給這個鏡像分配了一個新用戶名字`ouruser`;接著,未修改鏡像名稱,保留了原鏡像名稱`sinatra`;最后為鏡像指定了標簽`v2`。 我們可以使用`docker images`命令來查看我們的新鏡像`ouruser/sinatra`。 ~~~ $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE training/sinatra latest 5bc342fa0b91 10 hours ago 446.7 MB ouruser/sinatra v2 3c59e02ddd1a 10 hours ago 446.7 MB ouruser/sinatra latest 5db5f8471261 10 hours ago 446.7 MB ~~~ 使用我們的新鏡像來創建一個容器: ~~~ $ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash root@78e82f680994:/# ~~~ ## 使用`Dockerfile`創建鏡像 使用`docker commit`命令能非常簡單的擴展鏡像,但是它有點麻煩:在一個團隊中不容易共享它的開發過程。為解決這個問題,我們可以使用一個新的命令來創建新的鏡像。 為此,我們創建一個`Dockerfile`,其中包含一組指令告訴docker如何創建我們的鏡像。 現在讓我們創建一個目錄,并且創建一個`Dockerfile` ~~~ $ mkdir sinatra $ cd sinatra $ touch Dockerfile ~~~ 每一個指令鏡像就會創建一個新的層,讓我們看一個簡單的例子,我們的開發團建創建一個自己的`Sinatra`鏡像: ~~~ # This is a comment FROM ubuntu:14.04 MAINTAINER Kate Smith <ksmith@example.com> RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN gem install sinatra ~~~ 【注意】: 1)、每個指令前綴都必須大寫: INSTRUCTION statement 2)、可以使用`#`注釋; 讓我們看看`Dockerfile`做了什么: 第一個指令`FROM`,告訴Docker使用哪個鏡像源,在這個案例中我們使用了一個`Ubuntu 14.04`基礎鏡像。 下一步,我們使用`MAINTAINER`指令指定誰是維護者。 最后,我們指定三個`RUN`指令,一個`RUN`指令在鏡像內執行命令。例如安裝包。這里我們在`Sinatra`中更新了APT緩存,安裝了`Ruby`和`RubyGems`。 > 注意:我們還提供了更多的Dockerfile指令參數。 現在我們使用`docker build`命令和`Dockerfile`命令來創建一個鏡像。 ~~~ $ sudo docker build -t="ouruser/sinatra:v2" . Uploading context 2.56 kB Uploading context Step 0 : FROM ubuntu:14.04 ---> 99ec81b80c55 Step 1 : MAINTAINER Kate Smith <ksmith@example.com> ---> Running in 7c5664a8a0c1 ---> 2fa8ca4e2a13 Removing intermediate container 7c5664a8a0c1 Step 2 : RUN apt-get -qq update ---> Running in b07cc3fb4256 ---> 50d21070ec0c Removing intermediate container b07cc3fb4256 Step 3 : RUN apt-get -qqy install ruby ruby-dev ---> Running in a5b038dd127e Selecting previously unselected package libasan0:amd64. (Reading database ... 11518 files and directories currently installed.) Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ... . . . Setting up ruby (1:1.9.3.4) ... Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ... Processing triggers for libc-bin (2.19-0ubuntu6) ... ---> 2acb20f17878 Removing intermediate container a5b038dd127e Step 4 : RUN gem install sinatra ---> Running in 5e9d0065c1f7 . . . Successfully installed rack-protection-1.5.3 Successfully installed sinatra-1.4.5 4 gems installed ---> 324104cde6ad Removing intermediate container 5e9d0065c1f7 Successfully built 324104cde6ad ~~~ 我們使用`docker build`命令和`-t`來創建我們的新鏡像,用戶是`ouruser`、倉庫源名稱`sinatra`、標簽是`v2`。 如果`Dockerfile`在我們當前目錄下,我們可以使用`.`來指定`Dockerfile` > 提示:你也可以指定`Dockerfile`路徑 現在我們可以看到構建過程。docker做的第一件事是通過你的上下文構建。基本上是目錄的內容構建。docker會根據本地的內容來在docker進程中去構建。 下一步,我們`Dockerfile`一步一步執行命令。我們可以看到,每個步驟可以創建一個新的容器,在容器內運行指令并且提交改變,就像我們早期看到的`docker commit`流程、當所有的指令執行完成之后,我們就會得到`324104cde6ad`鏡像(有助于標記ouruser/sinatra:v2),然后所有中間容器會被刪除干凈。 我們可以從我們的新鏡像中創建一個容器: ~~~ $ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash root@8196968dac35:/# ~~~ > 注意:這是比較簡單的創建鏡像方法。我們跳過了你可以使用的一大堆指令。在后面的部門我們將會看到更多的指令指南,或者你可以參考`Dockerfile`參考的例子和詳細描述每一個指令。 ## 設置鏡像標簽 你可以給現有的鏡像添加標記,然后提交和構建。我們可以使用`docker tag`命令。讓我們給`ouruser/sinatra`鏡像添加一個新的標簽。 ~~~ $ sudo docker tag 5db5f8471261 ouruser/sinatra:devel ~~~ `docker tag`指令標記鏡像ID,這里是`5db5f8471261`,設定我們的用戶名稱、鏡像源名稱和新的標簽。 讓我們使用`docker images`命令查看新的標簽。 ~~~ $ sudo docker images ouruser/sinatra REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB ~~~ ## 向Docker Hub推送鏡像 一旦你構建或創造一個新的鏡像,你可以使用`docker push`命令推送到Docker Hub。可以對其他人公開進行分享,或把它添加到你的私人倉庫中。 ~~~ $ sudo docker push ouruser/sinatra The push refers to a repository [ouruser/sinatra] (len: 1) Sending image list Pushing repository ouruser/sinatra (3 tags) . . . ~~~ ## 主機中移除鏡像 你也可以刪除你主機上的鏡像,某種程度上我們可以使用`docker rmi`命令。 讓我們刪除已經不需要的容器:`training/sinatra`。 ~~~ $ sudo docker rmi training/sinatra Untagged: training/sinatra:latest Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0 ~~~ > 提示:在容器從主機中移除前,請確定容器沒有被使用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看