[Docker] 使用Dockerfile将项目打包成DockerImage
使用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 项目运行方式一样。