Dockerfile 編寫規范整理


什么是 Dockerfile?

相關文章:Docker 常用命令總結

Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

說到底,Dockerfile 就是一個名為 Dockerfile 且沒有后綴名的文本文件,在 Linux 中,使用 vim Dockerfile,即可創建一個 Dockerfile。

一個 Dockerfile 示例

通過一個示例,來學習如何編寫 Dockerfile。

先通過 vim Dockerfile, 創建 Dockerfile,再寫入如下內容:

# 這是基礎鏡像
FROM centos:7.6.1810

# 將元數據添加到鏡像, LABEL 是鍵值對。
LABEL "author"="you170917"
LABEL "version"="1.0"
LABEL "email"="you170917@gmail.com"

# 將當前目錄下的 jar 包添加進來,並重命名
ADD readinglist-0.0.1-SNAPSHOT.jar readinglist.jar

# 將當前目錄下的 jdk 包添加進來,重命名,再配置環境變量
ADD jdk1.8.0_261 jdk8
ENV PATH jdk8/bin:$PATH

# 配置環境變量支持中文
ENV LANG="en_US.UTF-8"

# 暴露 8080 端口
EXPOSE 8080

# 運行時的命令
ENTRYPOINT ["java","-jar","readinglist.jar"]

除了上面使用到的指令,Dockerfile 還有如下指令:

RUN

用於執行后面跟着的命令行命令,有以下倆種格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同於,在終端操作的 shell 命令。

exec 格式:

RUN ["可執行文件", "參數1", "參數2"]

COPY

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

CMD

類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:

  • CMD 在docker run 時運行。
  • RUN 是在 docker build。

作用:為啟動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。

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

VOLUME

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

格式:

VOLUME ["<路徑1>", "<路徑2>"...]
VOLUME <路徑>

在啟動容器 docker run 的時候,我們可以通過 -v 參數修改掛載點。

WORKDIR

指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。

docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。

格式:

WORKDIR <工作目錄路徑>

通過 Dockerfile 部署運行 jar 包

主要分為三步:

1、編寫 Dockerfile

2、構建鏡像

3、運行容器

這里,就使用上面那個 Dockerfile 。

先構建鏡像:

docker build -t readinglist:2.0 .
  • docker build 是構建鏡像的初始命令

  • -t readinglist:2.0 :指定鏡像的名字和版本號,可任意取

  • 最后的 . 表示 Dockerfile 在當前目錄下

運行容器

docker run --name=read -p 8000:8080 --restart=always -d readinglist:2.0
  • docker run:是運行容器的初始命令

  • --name=read:表示容器的名字叫做 name

  • -p 8000:8080:表示將主機 8000 端口,映射到容器內的 8080 端口

  • --restart=always:表示讓容器一直運行

  • -d:表示容器后台運行

  • readinglist:2.0 這是運行容器的基礎鏡像和版本號

參考資料

Dockerfile參考 - 官方文檔

Dockerfile - 菜鳥教程

Dockerfile編寫規范 - 博客園

Docker部署jar包運行 - CSDN

每天學習一點點,每天進步一點點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM