天天看點

Dockerfile制作jdk鏡像和微服務鏡像部署的最佳實踐【Dockerfile實戰】

因為公司之前搭建測試伺服器是我搭建的,其中包含使用docker來部署微服務項目,于是将這篇Dockerfile的最佳實踐記錄于此,為避免大家被坑,希望此文能幫你解除疑惑~

ps:因為是公司伺服器不是個人伺服器,我也沒有多餘的時間去再用個人伺服器示範一次,是以大家也要有一些docker的基礎知識,這裡沒有貼圖希望大家能夠諒解~(等我日後來給大家補圖!)

Dockerfile制作jdk鏡像和微服務鏡像部署的最佳實踐【Dockerfile實戰】

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

Dockerfile常用指令 說明
FROM 設定鏡像使用的基礎鏡像
RUN 編譯鏡像時運作的腳本(shell格式或exec格式)
CMD 設定容器的啟動指令
ENV 設定容器的環境變量
COPY 編譯鏡像時複制檔案到鏡像中
VOLUME 設定容器挂載的資料卷
WORKDIR 設定RUN CMD COPY指令的工作目錄
EXPOESE 設定鏡像暴露的端口

制作jdk鏡像

因為公司的測試伺服器是我搭建的,我以公司的測試伺服器操作為例。

JDK下載下傳:

https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html

JDK版本:

jdk-8u271-linux-x64.tar.gz

(因為在伺服器上,肯定下載下傳的是tar包,接下來我們将這個版本的JDK制作成docker鏡像)

建立一個檔案夾,将JDK的安裝包放在檔案夾内,然後建立一個Dockerfile檔案

# 建立如下目錄
sudo mkdir /usr/local/jdk
# 将下載下傳的JDK安裝包放到伺服器的此目錄下
cd /usr/local/jdk
# 建立Dockerfile檔案,并複制以下内容到Dockerfile檔案内儲存
sudo touch Dockerfile
           

Dockerfile制作JDK鏡像(必須保證JDK安裝包和Dockerfile檔案在同一目錄)

# 指定基礎鏡像(這條指令必須是第一條)
FROM centos:7
# 指定鏡像的工作目錄
WORKDIR /app
# 将JDK安裝包複制到工作目錄
ADD jdk-8u271-linux-x64.tar.gz /app
# 配置JDK環境變量
ENV JAVA_HOME=/wsy_docker/jdk/jdk1.8.0_271
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
           

建構JDK鏡像

# 為你建構的JDK鏡像取名并且打上标簽,指令:docker build . -t [name]:[tag]
# .代表在目前目錄制作鏡像(必須保證JDK安裝包和Dockerfile檔案在同一目錄的原因)
sudo docker build . -t jdk1.8:v1.0
           

驗證JDK鏡像制作完成

# 檢視鏡像
sudo docker images
# 建立、啟動容器并進入容器内部
sudo docker run -it jdk1.8:v1.0 /bin/bash
# 檢查java環境變量(出現很多javac用的指令即可證明你jdk鏡像制作成功~)
javac
# 退出容器
exit
           

制作微服務項目鏡像

制作微服務鏡像首先要依賴于JDK鏡像,既然是微服務鏡像jar包的話肯定是Springboot可執行jar包咯!

比如項目jar包名字為:

core-1.0.0.jar

,将jar包放到伺服器内的一個檔案夾,并且在此檔案夾建立一個Dockerfile檔案

# 建立如下目錄
sudo mkdir /data/app
# 将jar放到伺服器的此目錄下
cd /data/app
# 建立Dockerfile檔案,并複制以下内容到Dockerfile檔案内儲存
sudo touch Dockerfile
           

Dockerfile制作微服務項目鏡像(必須保證微服務項目jar包和Dockerfile檔案在同一目錄)

# 鏡像環境為我們制作的JDK1.8鏡像
FROM jdk1.8:v1.0
# 設定以下工作目錄和微服務jar包的環境變量
ENV workdir /app/
ENV jar core-1.0.0.jar

# 将微服務jar包複制到工作目錄
COPY ${jar} ${workdir}
# 指定工作目錄
WORKDIR ${workdir}
# 使用JDK1.8環境啟動微服務jar包
# JAVA_OPTS 環境變量的值為部署組的JVM啟動參數,在運作時 bash 替換
# 使用 exec 以使 Java 程式可以接收 SIGTERM 信号
CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar}"]
           

建構微服務項目鏡像

sudo docker build . -t core:v1.0
           

運作啟動項目鏡像

# 檢視鏡像
sudo docker images
# 建立、啟動鏡像(啟動後你就會看到項目跑起來後的日志了,這就說明)
# -d 背景運作項目(看不見項目運作後的日志)
# -p 将伺服器中的8080端口映射到容器中(微服務項目中的端口号)的8090端口
sudo docker run -d -p 8080:8090 core:v1.0
           

接下來浏覽器直接

http://IP:8080/

通路微服務項目資源驗證即可~