Linux中國

如何使用 Dockerfile 創建自定義 Docker 鏡像

在這份指南中,我們將看到 Dockerfile 的簡要介紹以及如何在 Linux 中使用 Dockerfile 來自動的 創建自定義 Docker 鏡像

什麼是 Dockerfile ?

Dockerfile 是附有構建 Docker 鏡像說明的易於理解的文本文件。它囊括了用戶在創建鏡像時可以調用的所有命令。

我們可以使用 Dockerfile 創建自定義的鏡像。可以通過 Docker Hub 分享的自定義 Docker 鏡像。

如果你還不知道,Docker Hub 是 Docker 提供的託管存儲庫服務,用於團隊查找和共享容器鏡像,當然世界上任何人也都可以訪問。

想像一下,早期如果我們想用 Nginx,我們要通過很多步驟,才能安裝和配置好 Nginx 。得益於 Docker Hub ,現在我們可以在幾分鐘內,下載並運行 Nginx 的預置容器鏡像。

Nginx Docker Image In Dockerhub

運行如下命令從 Docker Hub 上拉取 Nginx 鏡像:

# docker pull nginx

一旦我們拉取了 Docker 鏡像,可以運行如下命令使用它:

# docker run -it -d -p 8080:8080 nginx

就這樣,十分簡單!

參考下方鏈接,了解更多使用 Docker 的方式:

Docker Hub 上有超過十萬個來自軟體供應商、開源項目以及社區的容器鏡像。

你可以從 Docker Hub 上下載你選擇的鏡像,並且使用上面的命令開始使用它。

理解 Dockerfile 格式

Docker 可以讀取 Dockerfile 中的 指令 來自動的創建鏡像。

典型的 Dockerfile 包含如下指令:

1、FROM —— 這會設置容器的基礎鏡像。

例如:

FROM ubuntu:22.04

這會將容器的基礎鏡像設置為 Ubuntu 。如果 『22.04』 這個標誌沒有特別指明,則會設為最新版本(latest)。

2、LABEL —— 這是用來明確鏡像的元數據信息的鍵值對。

例如:

LABEL ENV=「DEVELOPMENT」

3、RUN —— 這會在基礎鏡像中執行指令並創建一個新層。

例如:

RUN apt-get update
RUN apt-get install tomcat

4、CMD —— 這用來設置容器啟動後先執行的命令。

例如:

CMD ["java", "-jar", "app.jar"]

5、EXPOSE —— 設置用於訪問容器的埠。容器將會監聽該埠。我們可以用來獲得輸出。

例如:

EXPOSE 8080

6、`MAINTAINER —— 顯示創建鏡像作者的信息。

例如:

MAINTAINER info@ostechnix.com

7、ENV —— 用來設置環境變數的鍵值對。這些變數在鏡像創建的時候設置,並在容器創建好後可以使用。

例如:

ENV DB_NAME=」MySQL」
ENV DB_VERSION=」8.0」

8、COPY —— 用來拷貝本地文件至容器中。

例如:

COPY /target/devops.jar devops.jar

9、ADD —— 具有與拷貝相同的功能,不過更進一步還可以提取本地的 tar 文件或者從 URL 拷貝文件。

例如:

ADD devops.tar.xz / .
ADD http://example.com/abc.git /usr/local/devops/

10、ENTRYPOINT —— 用來設置鏡像的主要命令。與 CMD 指令功能相同。不同的是 ENTRYPOINT 中的指令不會被重寫。

例如:

ENTRYPOINT ["java", "-jar", "app.jar"]

11、VOLUME —— 該指令用來創建指定位置的掛載點。

例如:

VOLUME /app/devops

12、USER —— 將設置運行鏡像並使用的用戶名稱以及用戶組。

例如:

USER dhruv
USER admin

13、WORKDIR —— 這會設置工作目錄。如果目錄不存在,則會創建。

例如:

WORKDIR /var/lib/

這是一個 Dockerfile 的樣本,可以參考一下:

FROM ubuntu:latest
MAINTAINER Senthilkumar Palani "info@ostechnix.com"
RUN apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ jammy universe" >>
/etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]

我將向你展示創建一個 Dockerfile 、創建並使用鏡像的簡單例子。

創建一個 Dockerfile

創建一個名為 dockerfile 的文件:

# nano dockerfile

添加下面幾行命令。我們將更新並安裝 vimcurl 包:

FROM alpine

RUN apk update
RUN apk add vim
RUN apk add curl

Dockerfile For Alpine Linux

按下 CTRL+OCTRL+X 鍵保存文件並關閉。

現在 Dockerfile 已經就位。讓我們繼續,用該 Dockerfile 創建一個鏡像。

注意: 如果你在使用 Docker 桌面版,你可以以一個普通用戶運行 docker 命令。

使用 Dockerfile 創建 Docker 鏡像

只需運行以下命令,便可以使用 Dockerfile 創建 Docker 鏡像:

# docker build -t alpine .

請注意最後有一個 .)。

輸出示例:

[+] Building 51.2s (8/8) FINISHED                                               
 => [internal] load build definition from Dockerfile                       0.1s
 => => transferring dockerfile: 104B                                       0.0s
 => [internal] load .dockerignore                                          0.1s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/alpine:latest          38.8s
 => [1/4] FROM docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a  2.7s
 => => resolve docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a  0.0s
 => => sha256:d7d3d98c851ff3a95dbcb70ce09d186c9aaf7e25d48 1.47kB / 1.47kB  0.0s
 => => sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379 2.80MB / 2.80MB  2.4s
 => => sha256:7580ece7963bfa863801466c0a488f11c86f85d9988 1.64kB / 1.64kB  0.0s
 => => sha256:9b2a28eb47540823042a2ba401386845089bb7b62a9637d 528B / 528B  0.0s
 => => extracting sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379cbf2b  0.2s
 => [2/4] RUN apk update                                                   4.3s
 => [3/4] RUN apk add vim                                                  3.5s
 => [4/4] RUN apk add curl                                                 1.3s 
 => exporting to image                                                     0.4s 
 => => exporting layers                                                    0.4s 
 => => writing image sha256:14231deceb6e8e6105d2e551799ff174c184e8d9be8af  0.0s 
 => => naming to docker.io/library/alpine                                  0.0s 

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

按照上面的命令, Docker 會通過保存在當前工作目錄中的 Dockerfile 中的命令開始自動的創建鏡像。還記得我們在 Dockerfile 中保存的 apk updateapk add vimapk add curl 命令嗎?這些命令也將會自動的執行。

如果 Dockerfile 保存在其他目錄,你可以使用 -f 標誌來指定路徑,例如:

# docker build -f /path/to/a/Dockerfile .

創建好鏡像後,我們可以使用如下命令運行它:

# docker run -it alpine

該命令會啟動這個 Alpine 容器並連接到它。

/ # uname -a
Linux 8890fec82de8 5.10.104-linuxkit #1 SMP Thu Mar 17 17:08:06 UTC 2022 x86_64 Linux
/ # cat /etc/alpine-release 
3.16.1
/ #

如果你使用 Docker 桌面版,你可以通過 容器 Containers 標籤頁界面來查看運行中的容器。

View Containers In Docker Desktop

這就是使用 Dockerfile 構建自定義容器映像的方式。

我們僅僅講了基礎內容。你可以用 Dockerfile 做到很多東西。建議你參考一下官方 Dockerfile 參考 ,以了解更多內容。

via: https://ostechnix.com/a-brief-introduction-to-dockerfile/

作者:sk 選題:lkxed 譯者:Donkey 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...