日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

『中级篇』Dockerfile详解(17)

發布時間:2023/12/6 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『中级篇』Dockerfile详解(17) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般的,Dockerfile 分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。

####官網學習

https://docs.docker.com/engine/reference/builder/#usage

####FROM

必須為第一個命令,指定基礎鏡像

FROM <image> FROM <image>:<tag> FROM <image>@<digest> FROM scratch #制作base Image FROM centos #使用base Image FROM centos:7.9 FROM mysql:5.6

盡量使用官方的image作為base image!那是經得起考驗的!

####LABEL

給鏡像添加信息。使用docker inspect可查看鏡像的相關信息

LABEL maintainer="394498036@qq.com" LABEL version="1.0" LABEL description="This is description \ 歡迎關注:編程坑太多,我在等你."

其實就類似咱們寫代碼的注釋,很多人寫代碼不愿意寫注釋,其實寫注釋對自己的負責,過段時間翻坑的時候,想想當初的意思,容易很快的解決,所以一定要寫LABEL

####RUN

構建鏡像時執行的命令

RUN yum update && yum install -y vim \ python-dev #反斜線換行 RUN apt-get update && apt-get install -y perl \pwgen --no-install-recommends && rm -rf \/var/lib/apt/lists/* #注意清理cache RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

為了美觀,復雜的RUN請用反斜線換行,避免無用分層,合并多條命令成一行!

####WORKDIR

工作目錄

WORKDIR /test #如果沒有會自動創建test目錄 WORKDIR jianshu RUN pwd #輸出結果應該是/test/jianshu

用WORKDIR,不要用RUN cd 盡量使用絕對目錄!

####ADD and COPY

  • 將本地文件添加到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等類型的文件將被添加tar -x命令,進行解壓
  • 同ADD,只是不會解壓文件。 ADD &lt;src&gt;... &lt;dest&gt; ADD ["&lt;src&gt;",... "&lt;dest&gt;"] 用于支持包含空格的路徑 COPY &lt;src&gt;... &lt;dest&gt; COPY ["&lt;src&gt;",... "&lt;dest&gt;"] 用于支持包含空格的路徑 ADD hello / ADD test.tar.gz / #添加到根目錄并解壓 WORKDIR /root ADD hello test/ # /root/test/hello
  • WORKDIR /root COPY hello test/ # /root/test/hello

    大部分情況,COPY優于ADD,ADD除了COPY還有額外功能(解壓縮)!添加遠程文件/目錄請使用curl 或者wget

    ####ENV

    設置環境變量

    ENV <key> <value> ENV <key>=<value> ... ENV MYSQL_VERSION 5.6 E-NV apt-get install -y mysql-server = "${MYSQL_VERSION}" \ && rm -rf /var/lib/apt/lists/* #引用常亮

    盡量多使用,減少維護成本!

    學習下面的先了解下

    Shell 和Exec 格式

    • Shell格式 RUN apt-get install -y vim CMD echo "hello docker 微信公眾號:編程坑太多" ENTRYPOINT echo "hello docker 微信公眾號:編程坑太多"
    • Exec格式 RUN ["apt-get", "install", " -y", "vim"] CMD ["/bin/echo","hello docker 微信公眾號:編程坑太多"] ENTRYPOINT ["/bin/echo","hello docker 微信公眾號:編程坑太多"]
    • Dockerfile1 FROM centos ENV name Docker ENTRYPOINT echo "hello $name"
    • Dockerfile2 FROM centos ENV name Docker ENTRYPOINT ["/bin/echo", "hello $name"]

      通過實際的例子查看區別。

      mkdir cmd-entrrypoint cd cmd-entrrypoint/ vi Dockerfile
    • 先執行Dockerfile1
    more Dockerfile

    docker build -t liming/centos-entrypoint-shell .

    docker run liming/centos-entrypoint-shell

    • 先執行Dockerfile2
    more Dockerfile

    docker build -t liming/centos-entrypoint-exec .

    docker run liming/centos-entrypoint-exec

    我們通過shell格式運行的話,它會通過默認的bash里面通過shell執行命令,它會通過shell替換這邊變量,通過exec格式運行的話,只是單純的執行echo,沒辦法幫我們替換到$name。如何解決不一樣的問題呢?請開始我的表演!修改Dockerfile2

    FROM centos ENV name Docker ENTRYPOINT ["/bin/bash","-c", "echo hello $name"]

    docker build -t liming/centos-entrypoint-exec-new .

    docker run liming/centos-entrypoint-exec-new

    是不是很nice!

    ####CMD

    設置容器啟動后默認執行的命令和參數

    • 容器啟動時默認執行的命令
    • 如果docker run 指定了其他命令,CMD命令被忽略
    • 如何定義了多個CMD,只有最后一個會執行

    FROM centos ENV name Docker CMD echo "hello $name"

    docker build -t liming/centos-cmd-shell . docker run liming/centos-cmd-shell docker run -it liming/centos-cmd-shell /bin/bash

    ####ENTRTYPOINT

    設置容器啟動時運行的命令

    • 讓容器以應用程序或者服務的形式運行
    • 不會被忽略,一定會執行

    FROM centos ENV name Docker ENTRYPOINT echo "hello $name"

    docker build -t liming/centos-entrypoint-shell . docker run liming/centos-entrypoint-shell docker run -it liming/centos-entrypoint-shell /bin/bash

    個人網站:IT人故事會 idig8.com

    PS:Dockerfile詳解基本就介紹這么多,可能還有很多命令沒有講解,以后用到了在說吧。一定要CMD和ENTRTYPOINT因為很多官方的都常用這兩個命令。


    往期精彩
  • docker導學(一)
  • 容器的技術概述(二)
  • docker的魅力初體驗-5分鐘安裝wordpress不走彎路(三)
  • docker官網介紹(四)
  • 如何在mac上安裝docker(五)
  • 如何在window上安裝docker(六)
  • 如何在mac上通過vagrant安裝虛擬機(七)
  • 如何在window上通過vagrant安裝虛擬機(八)
  • docker-Machine的本地使用(九)
  • docker-Machine的本地使用(十)
  • 在linux/mac下通過Docker-Machine在阿里云上的使用(11)
  • docker架構和底層技術(12)
  • docker Image概述(13)
  • 手動建立一個base Image(14)
  • 什么是Container(15)
  • 構建自己的Docker鏡像(16)
  • 轉載于:https://blog.51cto.com/12040702/2154833

    總結

    以上是生活随笔為你收集整理的『中级篇』Dockerfile详解(17)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。