什么是 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 這是運行容器的基礎鏡像和版本號
參考資料
每天學習一點點,每天進步一點點。