使用Dockerfile將項目打包成DockerImage
Java Maven 項目打包出Docker鏡像
1. 項目結構
src
main
...
test
...
target
Dockerfile
pom.xml
Dockerfile
FROM openjdk:8-jre-alpine
# EXPOSE 8080
MAINTAINER yangyxd
ADD xxx.jar xxx-svr.jar
ENTRYPOINT ["java","-jar","xxx-svr"]
2. 打包出 jar
mvn package
打包成功后,將在 target
目錄中生成 xxx.jar
文件
3. 生成 dockerImage
在 windows 上,我比較喜歡用bat來執行命令。在項目根目錄中,新建 DockerbuildImage.bat
文件:
echo off
echo 編譯Docker鏡像
cd target
docker build -f ../Dockerfile -t my-project-name:1.0.0 .
docker images
pause
其中, docker images
是在生成成功后順便列出所有鏡像來觀察一下,可以去掉。
my-project-name
為自定義的鏡像名稱,1.0.0
為自定義的鏡像版本號。
雙擊 bat 文件,即可生成鏡像。
4. 運行docker鏡像
不需要開放服務端口的服務:
docker run --name my-project-svr -i -t -d my-project-name:1.0.0
需要開放指定端口的服務:
docker run --name my-project-svr -i -t -d -p 8080:8080 my-project-name:1.0.0
其中, my-project-svr
為自定義的容器名稱。
Node.js 項目打包出Docker鏡像
1. 項目結構
dist
doc
node_modules
src
main
...
test
...
Dockerfile
package.json
package-lock.json
tsconfig.json
...
Dockerfile
FROM node:14.15.5-alpine3.13
EXPOSE 8080
# 服務端口
ENV EXPOSE_PORT 8080
# 如果是windows進程設置環境變量 cmd => set ENV_NAME=xxx
ENV ENV_NAME xxx
# 數據庫配置
ENV DB_MYSQL_CONFIG '{"host":"xxx","port":3306,"user":"xxx","password":"xxx","database":"xxx","connectTimeout":15000}'
RUN mkdir /xxx_service
WORKDIR /xxx_service
COPY package.json package.json
COPY package-lock.json package-lock.json
# 安裝依賴
RUN npm install --registry=https://registry.npm.taobao.org
# 拷貝工程文件
COPY . .
# 構建 輸出到dist
RUN npm run build
CMD ["node","--stack_trace_limit=100","dist/app.js"]
2. 生成 dockerImage
新建 DockerbuildImage.bat
文件:
echo off
echo 編譯Docker鏡像
docker build -f Dockerfile -t my-project-name:1.0.0 .
docker images
pause
其中, docker images
是在生成成功后順便列出所有鏡像來觀察一下,可以去掉。
my-project-name
為自定義的鏡像名稱,1.0.0
為自定義的鏡像版本號。
雙擊 bat 文件,即可生成鏡像。
3. 運行docker鏡像
和上面 Java 項目運行方式一樣。