• <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>

            zhiye_wang

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

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

            第四章 使用Docker鏡像和倉庫(二)

            回顧:

            開始學習之前,我先pull下來ubuntu和fedora鏡像

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

            Using default tag: latest

            latest: Pulling from library/fedora

            9bdb5101e5fc: Pull complete 

            Digest: sha256:1fa98be10c550ffabde65246ed2df16be28dc896d6e370dab56b98460bd27823

            Status: Downloaded newer image for fedora:latest

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

            Using default tag: latest

            latest: Pulling from library/ubuntu

            ebe73f29e6e1: Pull complete 

            4976a0f2dc03: Pull complete 

            5c117067c385: Pull complete 

            001d664e2dd4: Pull complete 

            Digest: sha256:7eb6ad74ec4fbe56ac194d8760063c88ca362f05a9038f2bc4f09a51849a4a53

            Status: Downloaded newer image for ubuntu:latest

            4.5.6 Dockerfile 和構建緩存

            想略過緩存功能,可以使用 docker build 的 --no-cache 標志

            sudo docker build --no-cache -t="zhiyewang/static_web" .

            4.5.7 基于構建緩存的 Dockerfile 模板

            FROM ubuntu:14.04

            MAINTAINER zhiyewang "zhiye_wang@yeah.net"

            ENV REFRESHED_AT 2016-03-16

            RUN apt-get -qq update

            這里要想重新構建 Dockerfile ,只需要將第三行的日期修改以下即可。將會更新 APT 包的緩

            存。

            4.5.8 查看新鏡像

            查看鏡像如何構建出來,可以使用 docker history 命令。可以看到新構建的 zhiyewang/stat

             ic_web 鏡像的每一層。以及創建這些層的 Dcoekrfile 命令。

            4.5.9 從構建的新鏡像啟動容器

            上一節成功使用 Dockerfile 命令構建出 zhiyewang/static_web 這個鏡像?,F在我們來試試

            看鏡像是否工作正常。z

            基于新構建的鏡像啟動一個新容器。

             

            [#17#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -d -p 80 --name stati

            c_web zhiyewang/static_web nginx -g "daemon off;"

            d4d9024c688d267761dee792e0b0686a6b2d06dcf53e656c98d95408f4894974

            這條命令基于方才構建的鏡像名字,啟動了一個名為 static_web 的新容器。 同時指定了 -d 選

            項,告訴 Docker 以分離的方式在后臺運行。同時也指定了在新容器中運行的命令: nginx -g "

            daemon off;"。這將以前臺的方式啟動 Nginx。新標志 -p 用來控制 Docker 在運行時應該公

            開哪些網絡端口給外部(宿主機)。

             

            [#19#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker ps -l

            CONTAINER ID        IMAGE                            COMMAND                           PORTS                  

            d4d9024c688d        zhiyewang/static_web   "nginx -g 'daemon off"         0.0.0.0:32768->80/tcp 

            可以看到容器中的 80 端口被映射到宿主機的 32768 端口。

            也可以使用 docker port 查看端口的情況

            [#20#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker port d4d9024c688d

            80/tcp -> 0.0.0.0:32768

            這樣的端口映射方式為隨機的,我們也可以指定特定的端口映射

            將容器的 80 端口綁定到本地宿主機的 80 端口

            sudo docker run -d -p 80:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"

            將容器的 80 端口綁定到本地宿主機的 8080 端口

            sudo docker run -d -p 8080:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"

            將容器的 80 端口綁定到本地宿主機的 127.0.0.1 這個 IP 的 80 端口

            sudo docker run -d -p 127.0.0.1:80:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"

            將容器的 80 端口綁定到本地宿主機的 127.0.0.1 這個 IP 的隨機端口

            sudo docker run -d -p 127.0.0.1::80 --name static_web zhiyewang/static_web nginx -g "daemon off;"

            對外公開端口,此命令可以將容器內的 80 端口對本地宿主機公開,并且綁定要宿主機的一個

            隨機端口。此命令同時也會將 Dockerfile 文件中 EXPOSE 指令指定的其他端口一并公開。

            sudo docker run -d -p --name static_web zhiyewang/static_web nginx -g "daemon off;"

            這樣我們就可以使用本地宿主機的 IP 地址或者 127.0.0.1 的 localhost 來連接到運行的容器,

            查看 Web 服務器的內容了。

            [#33#cloudsoar@cloudsoar-virtual-machine ~]$curl localhost:32768

            Hi, I am in your container

            4.5.10 Dockerfile 指令

            1 CMD 指令

            CMD 指令用于指定一個容器啟動時候需要運行的指令。有點類似于 RUN 指令,區別是 RUN 

            指令是指定鏡像被構建時候運行的指令,而 CMD 是容器被啟動時運行的指令。

            命令行啟動容器的 /bin/true

            [#34#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t zhiyewang/static_web /bin/true

            可以使用 CMD 寫在 Dockerfile 中:

            CMD ["/bin/true"]

            也可以為要運行的命令指定參數

            CMD ["/bin/bash", "-l"]

            需要注意的是 docker run 命令可以覆蓋 CMD 指令。如果 dockerrun 中指定了命令,而CM

             D 中也指定了相同的命令,命令行中的指令會覆蓋 Dockerfile 中的 CMD 指令。

            假設我們的 Dockerfile 中有如下命令

            CMD [ "/bin/bash" ]

            使用 docker build 命令構建一個新鏡像,假設為 zhiyewang/test,并基于此鏡像啟動一個新

            容器。

            [#35#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -t -i zhiyewang/test

            root@7ec0a03d41fc:/# 

            可以看到 docker run 命令的末尾并沒有指定 /bin/bash 指令,卻進入了容器的 bash。實際上

            Docker 使用了 CMD 中指定的命令。

            但是 Dockerfile 中只能指定一條 CMD 指令。如果制定多個,只有最后一個會被調用。

            2 ENTRYPOINT

            ENTRYPONIT 指令提供的命令不會再容器啟動時被命令行覆蓋。

            ENTRYPONIT ["/usr/sbin/nginx"]

            為 ENTRYPOINT 指定參數

            ENTRYPONIT ["/usr/sbin/nginx", "-g", "daemon off;"]

            如果需要 也可以在運行時通過 docker run 的 --entrypoint 標志覆蓋 ENTRYPOINT 指令。

            3 WORKDIR

            WORKDIR /opt/webapp/db

            RUN bundle install

            WORKDIR /opt/webapp

            ENTRYPOINT [ "rackup" ]

            把目錄切換到 /opt/webapp/db 指定了 bundle install 命令,然后又將工作目錄切換為 /opt

             /webapp 最后這只了 ENTRYPOINT 指令來啟動 rackup 命令。

            4 ENV

            ENV 可以用來在鏡像構建過程中設置環境變量

            ENV RMV_PATH /home/rvm/

            這個環境變量設置后在后續的任何 RUN 中都可以使用

            也可以在其他指令中直接使用這些環境變量 

            RVM_PATH=/home/rvm/ gem install unicorn

            ENV 創建的環境變量也會被持久保存到從我們的鏡像創建的任何容器中。比如在容器中運行

            env 查看:

            root@7ec0a03d41fc:/# env

            ... 

            RVM_PATH=/home/rvm/

            運行時環境變量

            sudo docker run -ti -e  "WEB_PORT=8080" ubuntu env

            可以講容器的 WEB_PORT 環境變量設置為 8080

            5 USER

            user 指令用來指定該鏡像會以什么樣的用戶去執行

            USER nginx

            我們可以指定用戶名或者 UID 以及組或者 GID,甚至是兩者的組合。也可以在 docker run 命

            令中通過 -u 選項來覆蓋該指令的值。如果不通過 USER 指定特定用戶,默認是 root 。

            6 VOLUME

            VOLUME ["/opt/project"]

            這條指令將會為基于此鏡像創建的任何容器創建一個名為 /opt/projiect 的掛載點。也可以通過

            數組的方式指定多個卷。

            VOLUME ["/opt/project", "/data"]

            7 ADD

            ADD 命令用來將構建環境下的文件和目錄復制到鏡像中。也可以指定URL。Docker 通過目的地

            址的參數末尾的字符來判斷文件源是目錄還是文件。如果目的地址以 / 結尾,Docker 認為是一個

            目錄,如果不是的話,認為是文件。

            ADD http://wordpress.org/latest.zip /root/wordpress.zip

            ADD 在處理本地的歸檔文件(包括 gzip,bzip2,xv)指定為源文件時候,會自動將歸檔解壓。

            ADD latest.tar.gz /var/www/wordpress/

            8 COPY

            COPY 和 ADD 的本質區別是 COPY 只關心在構建上下文中復制本地文件,而不會去做文件提

            取和解壓的工作。COPY 的文件源路徑必須是一個與當前構建環境相對的文件或目錄,本地文

            件都放到和 Dockerfile 同一個目錄下。不能復制該目錄之外的任何文件。目的為止必須是容器

            內部的一個絕對路徑。該指令創建的文件或者目錄的 UID 和 GID 都會被設置為 0 。

            COPY conf.d/ /etc/apache2/

            9 ONBUILD

             

            4.6 將鏡像退送到 Docker Hub

            [#37#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker push zhiyewang/static_web

            The push refers to a repository [docker.io/zhiyewang/static_web] (len: 1)

            e97eb7ef0136: Pushed 

            6a7a53f6e78a: Pushed 

            ddc8935b098a: Pushed 

            40fa5cd1c3d2: Pushed 

            c5aed3a8ff95: Pushed 

            0b427fcc4cbb: Pushed 

            9d89fd8f8a3e: Pushed 

            073de23ee32b: Pushed 

            latest: digest: sha256:152eb2d70e0f795fbe1b8f8c9eea09e7832a8b01e953cc051cd07832732da0ed size: 14731

            現在可以在 Docker Hub 上看到我們的鏡像了。

             

            自動構建

             

            4.7 刪除鏡像

            如果不需要一個鏡像了 可以使用 docker rmi 來刪除

            [#41#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rmi zhiyewang/static_web

            Error response from daemon: conflict: unable to remove repository reference "zhiyewang/static_web" (must force) - container 7ec0a03d41fc is using its referenced image e97eb7ef0136

            Error: failed to remove images: [zhiyewang/static_web]

            可以看到這個鏡像被一個容器 7ec0a03d41fc 使用著,首先刪除掉容器即可。 

            [#53#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rm 7ec0a03d41fc

            7ec0a03d41fc

            [#62#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rmi e97eb7ef0136

            Deleted: e97eb7ef013619e503bd729596a06e46ee85786619d95950e54f5a74c6fc2694

            Deleted: 6a7a53f6e78a802ea932a5914e63d217acf4a47ddbedb80dab042d55297573a5

            Deleted: ddc8935b098a0b449a3335286b2b0e555b3d44bd5d92dea305c57f6f7c846fae

            Deleted: 40fa5cd1c3d2ae9c80763e9b787c5c9b4848a34164fc2138d2c160830505466d

            Deleted: c5aed3a8ff9508b42644cef59c2b44c249628c54130fa1a030f3f2b299124ecc

            這里刪除的是本地的鏡像。每一個 Deleted: 行都代表一個鏡像層被刪除。

            4.8 運行自己的 Docker Registry

            這個可以自己試試了。

             

            到此為止,第四章學習完畢。

            下一篇學習在測試中使用 Docker,用Docker 測試一個靜態網站,用 Docker 創建并測試一個

            WEB 應用,用 Docker 用于持續集成

            posted on 2016-03-17 11:01 zhiye_wang 閱讀(693) 評論(0)  編輯 收藏 引用 所屬分類: docker
            国产精品久久久天天影视香蕉| 伊人久久综合无码成人网| 久久婷婷五月综合色奶水99啪| 久久久久这里只有精品| 久久久久亚洲AV成人网| 久久国产一片免费观看| 精品国产热久久久福利| 久久久无码精品亚洲日韩软件| 久久久久亚洲av毛片大| 国产精品久久久香蕉| 麻豆av久久av盛宴av| 久久综合给合久久狠狠狠97色69| 亚洲国产精品无码久久久蜜芽| 色诱久久久久综合网ywww| 国内精品久久久久影院一蜜桃| aaa级精品久久久国产片| 成人妇女免费播放久久久| 人人狠狠综合久久亚洲婷婷| 久久国产精品一区| 亚洲欧洲精品成人久久曰影片| 狠狠色丁香久久婷婷综合图片| 久久香综合精品久久伊人| 香蕉久久夜色精品国产小说| 久久无码国产| 久久天天躁狠狠躁夜夜avapp| 99久久精品日本一区二区免费| 久久精品亚洲欧美日韩久久| 偷窥少妇久久久久久久久| 久久人人爽人人爽人人AV| 久久免费高清视频| 97视频久久久| 国产免费久久精品丫丫| 久久精品一区二区三区AV| 久久se精品一区二区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久涩综合| 国产精品久久久久久吹潮| 亚洲国产成人精品女人久久久 | 99久久久国产精品免费无卡顿| 久久中文字幕无码专区| 2022年国产精品久久久久|