在足球還叫蹴鞠的時候,我就寫了一篇有關於dockerfile的文章,本來想着靠那篇文章火一把,從此脫離開發仔的身份,專心寫文。結果很意外,這篇Dockerfile指令詳解的文章竟然訪問量比我的頭髮還少。甚至好長一段時間我都忘了它的存在,該死!
在經過了長時間的思考後,我終於知道爲什麼這篇文章會不火了,我他媽沒買量!!!
…
好吧,上面扯那麼多其實就是爲了植入我那篇過氣的文章。下面進入主題。
在我們想把自己的程序打包成鏡像,並運行在docker容器中的時候我們應該怎麼做呢?
1.編寫Dockerfile文件。
不瞭解Dockerfile指令的請跳轉鏈接。
#指定基礎鏡像(一般指定程序所依賴的環境)
#本例子是構建SpringBoot所以我指定的jdk環境變量
FROM openjdk:11
#添加維護者信息
MAINTAINER author:edison
MAINTAINER mail:[email protected]
#將./hello-world.jar添加到容器的/opt目錄中
COPY ./hello-world.jar /opt
#指定dockerfile的命令在哪個目錄下執行
WORKDIR /opt
#指定容器和外界交互的端口
EXPOSE 80
#容器運行後執行的命令(該命令在WORKDIR指定的工作目錄下執行)
#注意:多個CMD指令只有最後一個會生效
CMD java -jar hello-world.jar
#在構建鏡像時執行的命令
#我這邊用它來打印java的環境變量
RUN java -version
#添加該鏡像的元數據
LABEL version="1.0" description="這是一個Web服務器" by="edc"
2.將你的Dockerfile
文件和你的jar
包放在同一個目錄裏
注意:Dockerfile
和jar包
最好存放在一個創建好的空目錄裏,不要放在/
目錄中,因爲構建是由Docker
守護程序而不是CLI
運行的。構建過程要做的第一件事是將整個上下文(遞歸)發送到守護程序。在大多數情況下,最好以空目錄作爲上下文,並將Dockerfile
保留在該目錄中。僅添加構建Dockerfile
所需的文件。所以如果你要是將Dockerfile
放在/
目錄構建,你就是在犯罪,懂嗎?
由於我上面dockerfile的例子
hello-world.jar
是放在./
目錄下也就是和Dockerfile的同一目錄,如果說你的jar包
不和dockerfile同一目錄的話那麼COPY
指令的那個./hello-world.jar
就要換成你jar包
存放的路徑。
3.在Dockerfile所在的目錄下運行docker build --tag web:latest .
命令
不瞭解
docker build
命令的請跳轉鏈接。
注意:docker build
後面要加.
參數,代表着構建當前目錄的Dockerfile
文件。而--tag
是給鏡像取一個名字,並指定鏡像的版本號,此時構建好的鏡像名字爲web
,版本號爲latest
。
可以看到執行了docker build .
後除了打印指令的執行信息之外還在8/9
行中打印了容器裏的JDK環境變量,這是因爲我使用RUN
z執行了java -version
命令。
4.我們執行一下docker images
命令查看我有沒有我們剛剛構建好的鏡像
這時候表示鏡像構建成功。
5.使用docker run
通過構建好的新鏡像跑一個容器
6.訪問一下
成功!!!