dockerfilee基礎命令

来源:https://www.cnblogs.com/Their-own/archive/2022/08/30/16640792.html
-Advertisement-
Play Games

Dockerfile 基本結構 Dockerfile 是一個文本格式的配置文件,用戶可以使用 Dockerfile 快速創建自定義鏡像。 Dockerfile 由一行行命令語句組成,並且支持以 # 開頭的註釋行。 Docker分為四部分: 基礎鏡像信息 維護者信息 鏡像操作指令 容器啟動時預設要執行 ...


Dockerfile

目錄

基本結構

Dockerfile 是一個文本格式的配置文件,用戶可以使用 Dockerfile 快速創建自定義鏡像。

Dockerfile 由一行行命令語句組成,並且支持以 # 開頭的註釋行。

Docker分為四部分:

  • 基礎鏡像信息
  • 維護者信息
  • 鏡像操作指令
  • 容器啟動時預設要執行的指令

指令

FROM

格式為FROM <image>FROM <image>:<tag>

第一條指令必須為FROM指令。並且,如果在同一個Dockerfile中創建多個鏡像時,可以使用多個FROM指令(每個鏡像一次)。

示例

#語法:
FROM <鏡像名稱>

LABEL MAINTAINER

指定維護者信息

#語法:
LABEL MAINTAINER "[作者] [郵箱]"

ENV

設置環境變數,定義了環境變數,那麼在後續的指令中,就可以使用這個環境變數

#語法:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

ARG

構建參數,與 ENV 作用一致。不過作用域不一樣。ARG 設置的環境變數僅對 Dockerfile 內有效,也就是說只有 docker build 的過程中有效,構建好的鏡像內不存在此環境變數。

#語法:
ARG <參數名>[=<預設值>]

RUN

用於執行後面跟著的命令行命令。有以下倆種格式:

shell格式

#語法:
RUN <命令行的命令>
RUN ["/bin/bash","-c","echo hello"]

exec格式

#語法:
RUN ["可執行文件", "參數1", "參數2"]
RUN echo "hello world\nhello tom" > /tmp/abc && \
    cat /tmp/abc

CMD

  • CMD 在docker run 時運行。
  • RUN 是在 docker build。
  • 作用:為啟動的容器指定預設要運行的程式,程式運行結束,容器也就結束。CMD 指令指定的程式可被 docker run 命令行參數中指定要運行的程式所覆蓋。

註意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。

#語法: 
CMD <shell 命令> 
CMD ["<可執行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 該寫法是為 ENTRYPOINT 指令指定的程式提供預設參數

ENTRYPONT

類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程式。

但是, 如果運行 docker run 時使用了 --entrypoint 選項,將覆蓋 ENTRYPOINT 指令指定的程式。

優點:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數

註意:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最後一個生效。

#語法:
ENTRYPOINT <shell 命令>
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

WORKDIR

WORKDIR : 指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。
docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。

#語法:
WORKDIR <工作目錄路徑>

COPY

複製指令,從上下文目錄中複製文件或者目錄到容器里指定路徑。

#語法:
COPY [--chown=<user>:<group>] <源路徑1>...  <目標路徑>
COPY [--chown=<user>:<group>] ["<源路徑1>",...  "<目標路徑>"]

ADD

ADD :ADD 指令和 COPY 的使用格類似(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下:

ADD 的優點:在執行 <源文件> 為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動複製並解壓到 <目標路徑>;並且源文件目錄可以是URL
ADD 的缺點:在不解壓的前提下,無法複製 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。

#語法:
ADD <src> <dest>

VOLUME

定義匿名數據捲。在啟動容器時忘記掛載數據捲,會自動掛載到匿名捲

#語法:
VOLUME ["<路徑1>", "<路徑2>"...]
VOLUME <路徑>

EXPOSE

EXPOSE用於告訴Docker伺服器容器暴露的埠號,供互聯繫統使用

#語法:
EXPOSE 埠號

USER

指定運行容器時的用戶名或UID,後續的RUN也會使用指定用戶。

當服務不需要管理員許可權時,可以通過該命令指定運行用戶。並且可以在之前創建所需要的用戶

#語法:
USER <用戶名>[:<用戶組>]

ONBUILD

配置當所創建的鏡像作為其他鏡像的基礎鏡像時,所執行的操作指令。

#語法:
ONBUILD <其它指令>

使用Dokcerfile製作鏡像

先創建一個目錄用於存放軟體包和dockerfile

[root@localhost ~]# mkdir apache
[root@localhost ~]# cd apache/
[root@localhost apache]# mkdir files
[root@localhost apache]# touch Dockerfile
[root@localhost apache]# ls
Dockerfile  files
[root@localhost apache]# cd files/
[root@localhost files]# wget http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
[root@localhost files]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz

編寫一個entrypoint.sh的腳本

[root@localhost apache]# cd files/
[root@localhost files]# vim entrypoint.sh 
#!/bin/bash

sed -i '/^ServerName/s/#//g' /usr/local/apache/conf/httpd/conf

exec "$@"
[root@localhost files]# chmod +x entrypoint.sh
[root@localhost files]# ll
total 11136
-rw-r--r--. 1 root root 1093896 Apr  5  2019 apr-1.7.0.tar.gz
-rw-r--r--. 1 root root  554301 Oct 23  2017 apr-util-1.6.1.tar.gz
-rwxr-xr-x. 1 root root      87 Aug 30 20:51 entrypoint.sh
-rw-r--r--. 1 root root 9743277 Jun  8 16:42 httpd-2.4.54.tar.gz

編寫Dockerfile

[root@localhost files]# cd ..
[root@localhost apache]# vim Dockerfile
FROM centos

LABEL MANTAINER "zxr [email protected]"

ENV apr_version=1.7.0 apr_util_version=1.6.1 httpd_version=2.4.54

ADD files/* /usr/src/
ADD files/entrypoint.sh /

RUN rm -rf /etc/yum.repos.d/* && \   
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo  && \ 
yum -y install make gcc gcc-c++ openssl-devel pcre-devel expat-devel libtool libxml2-devel && \
    useradd -r -M -s /sbin/nologin apache && \
    cd /usr/src/apr-${apr_version} && \
    sed -i '/$RM "$cfgfile"/d' configure && \
    ./configure --prefix=/usr/local/apr && make && make install && \
    cd /usr/src/apr-util-${apr_util_version} && \
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
    make && make install && \
    cd /usr/src/httpd-${httpd_version} && \
    ./configure --prefix=/usr/local/apache \
    --sysconfdir=/etc/httpd24 \
    --enable-so \
    --enable-ssl \
    --enable-cgi \
    --enable-rewrite \
    --with-zlib \
    --with-pcre \
    --with-apr=/usr/local/apr \
    --with-apr-util=/usr/local/apr-util/ \
    --enable-modules=most \
    --enable-mpms-shared=all \
    --with-mpm=prefork && make && make install && \
    yum clean all && \
    yum -y remove gcc gcc-c++ make && \
    rm -rf /tmp/* /usr/src/* 

WORKDIR /usr/local/apache 

EXPOSE 80   

CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]

ENTRYPOINT ["/bin/bash","/entrypoint.sh"]

創建鏡像

[root@localhost ~]# podman build -t xinruizhong/httpd:v1 apache/
[root@localhost ~]# podman images
REPOSITORY                   TAG         IMAGE ID      CREATED            SIZE
docker.io/xinruizhong/httpd  v1          31de2ac7a44b  About an hour ago  417 MB
quay.io/centos/centos        latest      300e315adb2f  21 months ago      217 MB

創建容器進行測試

[root@localhost ~]# podman run -d -p 80:80 xinruizhong/httpd:v1
a3be623f7ba0d7145515538d5be1273b5e22ea838ffd81a1adf8739d576e2cdd
[root@localhost ~]# curl 127.0.0.1:80
<html><body><h1>It works!</h1></body></html>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 部署zabbix監控服務 什麼是zabbix zabbix是一個基於WEB界面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。 zabbix能監視各種網路參數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。 zabbix由2部分構成,zabbi ...
  • 監控服務zabbix部署 zabbix介紹 zabbix是由Alexei Vladishev 開發的一種網路監視、管理系統,基於Server-Client架構。可用於監視各種網路服務、伺服器和網路機器等狀態。 ​使用各種Database-end 如 MySQL,PostgreSQL,SQlite,O ...
  • Royal TSX是mac系統上一款功能非常強大的遠程連接管理工具。相容多種連接類型,比如:RDP、VNC、基於SSH連接的終端,SFTP/FTP/SCP或基於Web的連接管理,Royal TSX 都可以滿足您的要求!內置的憑證管理,安全的團隊共用功能,共用連接列表,而無需共用您的個人憑據。 詳情: ...
  • Content 在用Docker進行持久化的存儲的時候,有兩種方式: 使用數據捲(volume) -v 容器絕對路徑 或者 -v 已經創建的volume名稱:容器絕對路徑 使用掛載點(共用宿主目錄,bind mount) -v 宿主絕對路徑:容器絕對路徑 由於兩種方法都可以使用-v和--mount參 ...
  • ​網上的教程,大多是教大家使用mac電腦製作ios證書,但是假如我們沒有mac電腦,就無法製作了。所以本站提供線上的ios證書製作工具幫助大家製作ios證書。 原來mac製作證書的流程,是先通過mac的鑰匙串訪問,生成一個csr文件,然後使用這個csr文件,去蘋果開發者中心生成一個cer證書文件,最 ...
  • 有沒有簡單好用的圖像處理軟體?Pixelmator Pro for Mac是一款專業的圖像處理軟體,通過廣泛的工具集來編輯和修飾照片,創建圖形設計,繪畫,繪製矢量圖形以及添加令人驚嘆的效果,它是您需要的唯一圖像編輯器。 詳情:Pixelmator Pro for Mac(專業的圖像編輯軟體) Pix ...
  • 哪個音頻處理軟體好用呢?iZotope RX 10是最新版本的音頻修複軟體,相對RX 9有很強的功能變化,無論您是編輯播客、錄製整個樂隊,還是製作大片,RX 10 都能讓您通過錄製的最佳音頻來吸引觀眾。 詳情:iZotope RX 10 for mac(強大的音頻修複工具) 為什麼是 RX? 去除手 ...
  • 澳大利亞標準委員會與2022年6月24日發佈了一系列新版標準。其中,AS/NZS 60335.1:2022 應在IEC 60335-1第六版對應的分標發佈之後使用。 此外,澳大利亞標準委員會發佈的標準也被用作紐西蘭標準。具體內容如下: • AS/NZS 60335.1:2022 – 家用和類似用途電 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...