番外篇-Docker部署

使用Docker部署SpringBoot應(yīng)用

# Docker OpenJDK鏡像選擇

- 使用官方j(luò)dk鏡像,openjdk Tags | Docker Hub
- 自定義jdk鏡像,使用最小基礎(chǔ)鏡像,使用最新jdk版本,支持中文字體

# Docker自定義鏡像

1. 選擇合適的基礎(chǔ)鏡像
FROM alpine:3.17.3,alpine是非常小的Docker基礎(chǔ)鏡像,只有5M大小

直接使用alpine鏡像,jdk的可執(zhí)行文件無法執(zhí)行,會(huì)出現(xiàn)not found錯(cuò)誤,具體原因不詳,可以參考此文
Docker 啟動(dòng)alpine鏡像中可執(zhí)行程序文件遇到 not found - 西瓜君~ - 博客園 (cnblogs.com)
*不過我在使用過程中并未解決這個(gè)問題

只能另辟捷徑,使用鏡像frolvlad/alpine-glibc?可以解決此問題,只有12M大小
FROM frolvlad/alpine-glibc:alpine-3.17

2. 選擇合適的Jdk版本
選擇項(xiàng)目對(duì)應(yīng)的jdk版本,一般對(duì)應(yīng)有openJDK版本oracle版本
并于Dockerfile放置在同一目錄下,并加入到鏡像中
ADD openjdk-17.0.2_linux-x64_bin.tar.gz /opt/

使用ADD命令,會(huì)直接解壓相應(yīng)的文件到鏡像目錄中
比如此命令會(huì)在鏡像創(chuàng)建如下文件目錄,/opt/jdk-17.0.2/

3. 設(shè)置環(huán)境變量
設(shè)置JAVA_HOME和PATH
ENV JAVA_HOME=/opt/jdk-17.0.2
ENV PATH $JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
ENV JAVA_VERSION=17.0.2+8

Java17,禁用了TLS1.1,我們需要修改java.security文件,并復(fù)制到相應(yīng)的鏡像目錄
COPY java.security $JAVA_HOME/conf/security/

4. 設(shè)置時(shí)區(qū)和字體
為了保持時(shí)間正常和顯示中文字體,我們需要設(shè)置時(shí)區(qū)并添加中文字體支持

# time-zone
ENV TZ Asia/Shanghai
RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone
?# dejavu-font
ENV LANG en_US.UTF-8
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

5. 構(gòu)建鏡像
docker build -t?openjdk-17:1.0.0 -f Dockerfile-jdk-17 .

# Docker項(xiàng)目鏡像

有了基礎(chǔ)鏡像,我們根據(jù)項(xiàng)目執(zhí)行項(xiàng)目鏡像
1. 設(shè)置工作目錄
WORKDIR /usr/flower
工作目錄指接下來的命令使用此目錄為基礎(chǔ)

2. 拷貝可執(zhí)行jar
COPY --chown=185 .jar ./app.jar

3. 設(shè)置端口
EXPOSE 8080

4. 運(yùn)行文件
我們同時(shí)設(shè)置了JAVA_OPTS參數(shù),方便我們運(yùn)行鏡像時(shí)傳入?yún)?shù)
ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar -Duser.timezone=GMT+08 /usr/flower/app.jar"]

# Docker容器限制

1. 設(shè)置容器內(nèi)存
通過-m 或 --memory 設(shè)置內(nèi)存的使用限額,-m 100M, -m 2G

2. 設(shè)置失敗策略
通過--restart設(shè)置重啟docker時(shí),啟動(dòng)相關(guān)容器,比如:always, on-failure:3

# 運(yùn)行鏡像

docker run -id --name [flower-webapi] -p 8080:8080 [-e "JAVA_OPTS=-Dsummer.generator.worker-id=0"] [--restart=on-failure:3] [-m 2G] -d flower/webapi:1.0.0

通過-e 傳遞JAVA_OPTS參數(shù),其中summer.generator.worker-id是項(xiàng)目中自定義的參數(shù)
通過-m 設(shè)置內(nèi)存上限為2G
通過--restart設(shè)置在容器非正常退出后重啟容器,最多重啟三次


完整Dockfile-jdk-17文件地址
project/docker/Dockerfile-jdk-17 · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容