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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 Dockerfile 使用準則 1. 大: 首字母必須大寫D 2. 空: 盡量將Dockerfile放在空目錄中。 3. 單: 每個容器盡量只有一個功能。 4. 少: 執行的命令越少越好。 Dockerfile文件內容: 首行注釋信息 指令(大寫) 參數 Dockerfile使用命令: ~~~ #構建鏡像命令格式: docker build -t [鏡像名]:[版本號][Dockerfile所在目錄] #構建樣例: docker build -t nginx:v0.2 /opt/dockerfile/nginx/ #參數詳解: -t 指定構建后的鏡像信息, /opt/dockerfile/nginx/ 則代表Dockerfile存放位置,如果是當前目錄,則用 .(點)表示 ~~~ # 基礎指令 ## FROM ~~~ #格式: FROM <image> FROM <image>:<tag> #解釋: #FROM 是 Dockerfile 里的第一條而且只能是除了首行注釋之外的第一條指令 #可以有多個FROM語句,來創建多個image #FROM 后面是有效的鏡像名稱,如果該鏡像沒有在你的本地倉庫,那么就會從遠程倉庫Pull取,如果遠程也 沒有,就報錯失敗 #下面所有的 系統可執行指令 在 FROM 的鏡像中執行。 ~~~ ## MAINTAINER ~~~ MAINTAINER #格式: MAINTAINER <name> #解釋: #指定該dockerfile文件的維護者信息。類似我們在docker commit 時候使用-a參數指定的信息 ~~~ ## RUN ~~~ RUN #格式: RUN <command> (shell模式) RUN["executable", "param1", "param2"] (exec 模式) #解釋: #表示當前鏡像構建時候運行的命令,如果有確認輸入的話,一定要在命令中添加 -y #如果命令較長,那么可以在命令結尾使用 \ 來換行 #生產中,推薦使用上面數組的格式 #注釋: #shell模式:類似于 /bin/bash -c command #舉例: RUN echo hello #exec模式:類似于 RUN["/bin/bash", "-c", "command"] #舉例: RUN["echo", "hello"] ~~~ ## EXPOSE ~~~ EXPOSE #格式: EXPOSE <port> [<port>...] #解釋: 設置Docker容器對外暴露的端口號,Docker為了安全,不會自動對外打開端口,如果需要外部提供訪問, 還需要啟動容器時增加-p或者-P參數對容器的端口進行分配 ~~~ # 運行時指令 ## CMD ~~~ #格式: CMD ["executable","param1","param2"] (exec 模式)推薦 CMD command param1 param2 (shell模式) CMD ["param1","param2"] 提供給ENTRYPOINT的默認參數; #解釋: #CMD指定容器啟動時默認執行的命令 #每個Dockerfile只能有一條CMD命令,如果指定了多條,只有最后一條會被執行 #如果你在啟動容器的時候使用docker run 指定的運行命令,那么會覆蓋CMD命令。 #舉例: CMD ["/usr/sbin/nginx","-g","daemon off;"] #CMD指令實踐: #修改Dockerfile文件內容: #在上一個Dockerfile文件內容基礎上,末尾增加下面一句話: CMD ["/usr/sbin/nginx","-g","daemon off;"] #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.3 . #根據鏡像創建容器,創建時候,不添加執行命令 :~/docker/images/nginx$ docker run --name nginx-1 -itd ubuntu-nginx:v0.3 #根據鏡像創建容器,創建時候,添加執行命令/bin/bash :~/docker/images/nginx$ docker run --name nginx-2 -itd ubuntu-nginx:v0.3 /bin/bash docker ps #發現兩個容器的命令行是不一樣的 itcast@itcast-virtual-machine:~/docker/images/nginx$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED 921d00c3689f ubuntu-nginx:v0.3 "/bin/bash" 5 seconds ago e6c39be8e696 ubuntu-nginx:v0.3 "/usr/sbin/nginx -g ..." 14 seconds ago #查看兩個容器詳細ip itcast@itcast-virtual-machine:~/docker/images/nginx$ docker inspect 921d00c3689f "IPAddress": "192.168.110.65", itcast@itcast-virtual-machine:~/docker/images/nginx$ docker inspect NAMES nginx- nginx- 2 1 e6c39be8e696 CMD "IPAddress": "192.168.110.64", #格式: CMD ["executable","param1","param2"] (exec 模式)推薦 CMD command param1 param2 (shell模式) CMD ["param1","param2"] 提供給ENTRYPOINT的默認參數; #解釋: #CMD指定容器啟動時默認執行的命令 #每個Dockerfile只能有一條CMD命令,如果指定了多條,只有最后一條會被執行 #如果你在啟動容器的時候使用docker run 指定的運行命令,那么會覆蓋CMD命令。 #舉例: CMD ["/usr/sbin/nginx","-g","daemon off;"] #CMD指令實踐: #修改Dockerfile文件內容: #在上一個Dockerfile文件內容基礎上,末尾增加下面一句話: CMD ["/usr/sbin/nginx","-g","daemon off;"] #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.3 . #根據鏡像創建容器,創建時候,不添加執行命令 :~/docker/images/nginx$ docker run --name nginx-1 -itd ubuntu-nginx:v0.3 #根據鏡像創建容器,創建時候,添加執行命令/bin/bash :~/docker/images/nginx$ docker run --name nginx-2 -itd ubuntu-nginx:v0.3 /bin/bash docker ps ~~~ ## ENTRYPOINT ~~~ #格式: ENTRYPOINT ["executable", "param1","param2"] (exec 模式) ENTRYPOINT command param1 param2 (shell 模式) #解釋: #和CMD 類似都是配置容器啟動后執行的命令,并且不會被docker run 提供的參數覆蓋。 #每個Dockerfile 中只能有一個ENTRYPOINT,當指定多個時,只有最后一個起效。 #生產中我們可以同時使用ENTRYPOINT 和CMD, #想要在docker run 時被覆蓋,可以使用"docker run --entrypoint" #ENTRYPOINT指令實踐: #修改Dockerfile文件內容: #在上一個Dockerfile 文件內容基礎上,修改末尾的CMD 為ENTRYPOINT: ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.4 . #根據鏡像創建容器,創建時候,不添加執行命令 :~/docker/images/nginx$ docker run --name nginx-3 -itd ubuntu-nginx:v0.4 #根據鏡像創建容器,創建時候,添加執行命令/bin/bash :~/docker/images/nginx$ docker run --name nginx-4 -itd ubuntu-nginx:v0.4 /bin/bash #查看ENTRYPOINT是否被覆蓋 :~/docker/images/nginx$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED NAMES e7a2f0d0924e ubuntu-nginx:v0.4 "/usr/sbin/nginx -g ..." 59 seconds ago nginx-4 c92b2505e28e ubuntu-nginx:v0.4 "/usr/sbin/nginx -g ..." About a minute ago nginx-3 #根據鏡像創建容器,創建時候,使用--entrypoint參數,添加執行命令/bin/bash docker run --entrypoint "/bin/bash" --name nginx-5 -itd ubuntu-nginx:v0.4 #查看ENTRYPOINT是否被覆蓋 :~/docker/images/nginx$ docker ps CONTAINER ID IMAGE COMMAND NAMES 6c54726b2d96 ubuntu-nginx:v0.4 "/bin/bash" nginx-5 ~~~ ## CMD ENTRYPOINT 綜合使用實踐 ~~~ CMD ENTRYPOINT 綜合使用實踐 #修改Dockerfile文件內容: # 在上一個Dockerfile文件內容基礎上,修改末尾的ENTRYPOINT :~/docker/images/nginx$ vim Dockerfile ENTRYPOINT ["/usr/sbin/nginx"] CMD ["-g"] #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.5 . #根據鏡像創建容器,創建時候,不添加執行命令 :~/docker/images/nginx$ docker run --name nginx-6 -d ubuntu-nginx:v0.5 #查看效果 :~/docker/images/nginx$ docker ps -a CONTAINER ID IMAGE NAMES e28875d281eb ubuntu-nginx:v0.5 nginx-6 COMMAND "/usr/sbin/nginx -g" CREATED 9 seconds ago #根據鏡像創建容器,創建時候,不添加執行命令,覆蓋cmd的參數 -g "daemon off;" :~/docker/images/nginx$ docker run --name nginx-7 -d ubuntu-nginx:v0.5 -g "daemon off;" #查看效果 itcast@itcast-virtual-machine:~/docker/images/nginx$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED e5addad86ef5 ubuntu-nginx:v0.5 "/usr/sbin/nginx -g ..." 5 seconds ago 7 #注釋: #任何docker run設置的命令參數或者CMD指令的命令,都將作為ENTRYPOINT 指令的命令參數,追加到 ENTRYPOINT指令之后 ~~~ # 文件編輯指令 ## ADD ~~~ #ADD #格式: ADD <src>... <dest> ADD ["<src>",... "<dest>"] #解釋: #將指定的<src> 文件復制到容器文件系統中的<dest> #src 指的是宿主機,dest 指的是容器 #所有拷貝到container 中的文件和文件夾權限為0755,uid 和gid 為0 #如果文件是可識別的壓縮格式,則docker 會幫忙解壓縮 #注意: #1、如果源路徑是個文件,且目標路徑是以/ 結尾, 則docker 會把目標路徑當作一個目錄,會把源文件 拷貝到該目錄下; #如果目標路徑不存在,則會自動創建目標路徑。 #2、如果源路徑是個文件,且目標路徑是不是以/ 結尾,則docker 會把目標路徑當作一個文件。 #如果目標路徑不存在,會以目標路徑為名創建一個文件,內容同源文件; #如果目標文件是個存在的文件,會用源文件覆蓋它,當然只是內容覆蓋,文件名還是目標文件名。 #如果目標文件實際是個存在的目錄,則會源文件拷貝到該目錄下。注意,這種情況下,最好顯示的以/ 結尾,以 避免混淆。 #3、如果源路徑是個目錄,且目標路徑不存在,則docker 會自動以目標路徑創建一個目錄,把源路徑目錄 下的文件拷貝進來。 #如果目標路徑是個已經存在的目錄,則docker 會把源路徑目錄下的文件拷貝到該目錄下。 #4、如果源文件是個壓縮文件,則docker 會自動幫解壓到指定的容器目錄中。 #ADD實踐: #拷貝普通文件 :~/docker/images/nginx$ vim Dockerfile #Dockerfile文件內容 # 構建一個基于ubuntu的docker定制鏡像 # 基礎鏡像 FROM ubuntu # 鏡像作者 MAINTAINER panda kstwoak47@163.com # 執行命令 ADD ["sources.list","/etc/apt/sources.list"] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y # 對外端口 EXPOSE 80 #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.6 . #根據鏡像創建容器,創建時候,不添加執行命令進入容器查看效果 docker run --name nginx-8 -it ubuntu-nginx:v0.6 #拷貝壓縮文件 tar zcvf this.tar.gz ./* #Dockerfile文件內容 ... # 執行命令 ... # 增加文件 ADD ["linshi.tar.gz","/nihao/"] ... #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.7 . #根據鏡像創建容器,創建時候,不添加執行命令進入容器查看效果 docker run --name nginx-9 -it ubuntu-nginx:v0.7 :~/docker/images/nginx$ docker run --name nginx-9 -it ubuntu-nginx:v0.7 ~~~ ## COPY ~~~ #COPY #格式: COPY <src>... <dest> COPY ["<src>",... "<dest>"] #解釋: #COPY 指令和ADD 指令功能和使用方式類似。只是COPY 指令不會做自動解壓工作。 #單純復制文件場景,Docker 推薦使用COPY #COPY實踐 #修改Dockerfile文件內容: # 構建一個基于ubuntu的docker定制鏡像 # 基礎鏡像 FROM ubuntu # 鏡像作者 MAINTAINER panda kstwoak47@163.com # 執行命令 ADD ["sources.list","/etc/apt/sources.list"] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y COPY ["index.html","/var/www/html/"] # 對外端口 EXPOSE 80 #運行時默認命令 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] index.html 文件內容: <h1>hello world </h1> <h1>hello docker </h1> <h1>hello nginx</h1> #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.8 . #根據鏡像創建容器,創建時候,不添加執行命令 :~/docker/images/nginx$ docker run \--name nginx-10 \-itd ubuntu-nginx:v0.8 #查看nginx-10信息 :~/docker/images/nginx$docker inspect nginx-10 #瀏覽器訪問nginx查看效果 ~~~ ## VOLUME ~~~ #VOLUME #格式: VOLUME ["/data"] #解釋: #VOLUME 指令可以在鏡像中創建掛載點,這樣只要通過該鏡像創建的容器都有了掛載點 #通過VOLUME 指令創建的掛載點,無法指定主機上對應的目錄,是自動生成的。 #舉例: VOLUME ["/var/lib/tomcat7/webapps/"] ~~~ # 環境指令 ## ENV ~~~ #ENV #格式: ENV <key> <value> (一次設置一個環節變量) ENV <key>=<value> ... (一次設置一個或多個環節變量) #解釋: #設置環境變量,可以在RUN 之前使用,然后RUN 命令時調用,容器啟動時這些環境變量都會被指定 ~~~ ## ENV實踐 ~~~ #ENV實踐: #命令行創建ENV的容器 :~$ docker run -e NIHAO="helloworld" -itd --name ubuntu-111 ubuntu /bin/bash #進入容器ubuntu-111 :~$ docker exec -it ubuntu-111 /bin/bash :/# echo $NIHAO #修改Dockerfile文件內容: #在上一個Dockerfile 文件內容基礎上,在RUN 下面增加一個ENV ENV NIHAO=helloworld ... #構建鏡像 docker build -t ubuntu-nginx:v0.10 . #根據鏡像創建容器,創建時候,不添加執行命令 docker run --name nginx-12 -itd ubuntu-nginx:v0.10 docker exec -it nginx-12 /bin/bash echo $NIHAO ~~~ ## WORKDIR ~~~ #WORKDIR #格式: WORKDIR /path/to/workdir (shell 模式) #解釋: #切換目錄,為后續的RUN、CMD、ENTRYPOINT 指令配置工作目錄。相當于cd #可以多次切換(相當于cd 命令), #也可以使用多個WORKDIR 指令,后續命令如果參數是相對路徑,則會基于之前命令指定的路徑。例如 #舉例: WORKDIR /a WORKDIR b WORKDIR c RUN pwd #則最終路徑為/a/b/c ~~~ **實踐** ~~~ #WORKDIR實踐: #修改Dockerfile文件內容: # 在上一個Dockerfile 文件內容基礎上,在RUN 下面增加一個WORKDIR WORKDIR /nihao/itcast/ RUN ["touch","itcast1.txt"] WORKDIR /nihao RUN ["touch","itcast2.txt"] WORKDIR itcast RUN ["touch","itcast3.txt"] ... #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.11 . #根據鏡像創建容器,創建時候,不添加執行命令 docker run --name nginx-13 -itd ubuntu-nginx:v0.11 #進入鏡像 docker exec -it nginx-13 /bin/bash ~~~ ## USER與ARG ~~~ #USER #格式: USER daemon #解釋: #指定運行容器時的用戶名和UID,后續的RUN 指令也會使用這里指定的用戶。 #如果不輸入任何信息,表示默認使用root 用戶 #ARG #格式: ARG <name>[=<default value>] #解釋: #ARG 指定了一個變量在docker build 的時候使用,可以使用\--build-arg =來 指定參數的值,不過 #如果構建的時候不指定就會報錯。 ~~~ # 觸發器 ~~~ ONBUILD #格式: ONBUILD [command] #解釋: #當一個鏡像A被作為其他鏡像B的基礎鏡像時,這個觸發器才會被執行, #新鏡像B在構建的時候,會插入觸發器中的指令。 #使用場景對于版本控制和方便傳輸,適用于其他用戶。 ~~~ **實踐** ~~~ #編輯Dockerfile :~/docker/images/nginx$ vim Dockerfile #內容如下: # 構建一個基于ubuntu的docker定制鏡像 # 基礎鏡像 FROM ubuntu # 鏡像作者 MAINTAINER panda kstwoak47@163.com # 執行命令 ADD ["sources.list","/etc/apt/sources.list"] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y #觸發器 ONBUILD COPY ["index.html","/var/www/html/"] # 對外端口 EXPOSE 80 #運行時默認命令 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] #構建鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.12 . #根據鏡像創建容器, :~/docker/images/nginx$docker run -p 80 --name nginx-14 -itd ubuntu-nginx:v0.12 :~/docker/images/nginx$docker ps #查看鏡像信息 :~/docker/images/nginx$ docker inspect ubuntu-nginx:v0.12 #訪問容器頁面,是否被更改 :~/docker/images/nginx$ docker inspect nginx-14 #構建子鏡像Dockerfile文件 FROM ubuntu-nginx:v0.12 MAINTAINER panda kstwoak47@163.com EXPOSE 80 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] #構建子鏡像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.13 . #根據鏡像創建容器, docker run -p 80 --name nginx-15 -itd ubuntu-nginx:v0.13 #查看鏡像信息 :~/docker/images/nginx$ docker inspect ubuntu-nginx:v0.13 docker ps #訪問容器頁面,是否被更改 ~~~ # 構建緩存 第一次構建很慢,之后的構建都會很快,因為他們用到了構建的緩存 ~~~ #取消緩存: docker build --no-cache -t [鏡像名]:[鏡像版本][Dockerfile位置] ~~~
                  <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>

                              哎呀哎呀视频在线观看