基于Node的前端项目
常规镜像
FROM node:12
WORKDIR /app
COPY package.json ./
RUN npm install --registry https://registry.npm.taobao.org
COPY . .
EXPOSE 3000
CMD ["npm", "run","dev"]
修改基础镜像
FROM node:12-alpine
WORKDIR /app
COPY package.json ./
RUN npm install --registry https://registry.npm.taobao.org
COPY . .
EXPOSE 3000
CMD ["npm", "run","dev"]
多级构建
# STAGE 1
FROM node:12-alpine AS build
WORKDIR /app
COPY package.json ./
RUN npm install --registry https://registry.npm.taobao.org
COPY . /app
RUN npm run build
# STAGE 2
FROM node:12-alpine
WORKDIR /app
RUN npm install -g webserver.local
COPY --from=build /app/build ./build
EXPOSE 3000
CMD webserver.local -d ./build
使用nginx
# STAGE 1
FROM node:12-alpine AS build
WORKDIR /app
COPY package.json ./
RUN npm install --registry https://registry.npm.taobao.org
COPY . /app
RUN npm run build
# STAGE 2
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
后端项目
基于Java的运行项目
# 使用java环境
FROM java
# 项目名称
ENV ARTIFACTID app
#设置作者
MAINTAINER author
# 缓存目录
VOLUME tmp
# 将当前项目的jar包添加到容器中
ADD $ARTIFACTID.jar $ARTIFACTID.jar
# 当容器启动时 执行启动命令
ENTRYPOINT ["java","-jar","app.jar"]
基于Tomcat的镜像
# 基于tomcat镜像
FROM tomcat:latest
# war包名称
ENV ARTIFACTID name
# 将当前项目的war包赋值到容器的webapps中
COPY ./$ARTIFACTID.war /usr/local/tomcat/webapps
脚本
(含上传目录文件挂载)构建容器脚本.txt
#!/bin/bash
#配置信息
#操作/项目相对路径(Dockerfile和源jar的文件位置)
BASE_PATH=/root/DockerFiles/jenkins/workspace/ruoyi/dist
#存储文件的位置(物理机)
FILE_PATH=/root/DockerFiles/ruoyi
VFILE_PATH=/data
#容器名称
CONTAINER_NAME=ruoyi
#镜像名称
MIRR_NAME=ruoyi
#端口映射
PORT=15200
#查找正在运行的本程序的容器ID
CID=$(docker ps | grep "$CONTAINER_NAME" | awk '{print $1}')
#当前容器的个数
CNUMS=$(docker ps | grep "$CONTAINER_NAME" | wc -l)
#查找正在运行的本程序的镜像ID
IID=$(docker images | grep "$MIRR_NAME" | awk '{print $3}')
#当前镜像个数
INUMS=$(docker images | grep "$MIRR_NAME" | wc -l)
#当前时间
DATE=$(date "+%Y-%m-%d-%H-%M-%S")
#进入项目镜像路径
function goDir(){
echo "进入$BASE_PATH" >>log.txt
cd $BASE_PATH
}
#构建docker镜像
function build(){
echo "开始构建镜像" >>log.txt
docker build -t $CONTAINER_NAME$DATE .
echo "结束构建镜像" >>log.txt
}
#创建容器
function createCt(){
docker run -d -p $PORT:$PORT -v $FILE_PATH:$VFILE_PATH --restart always --name $CONTAINER_NAME$DATE $MIRR_NAME$DATE
}
#关闭容器
function stopCt(){
docker stop $CID
}
#删除正在运行的docker容器
function delRuningCt(){
echo "当前正在运行的$CONTAINER_NAME容器个数: $CNUMS" >>log.txt
# 当前CID的个数<=1时才允许删除
if [ "$CNUMS" -le 1 ];then
echo "删除容器 $CID $CONTAINER_NAME" >>log.txt
docker rm $CID
else
echo "不允许一次性删除多个容器"
fi
}
#删除镜像
function delRuningIg(){
echo "当前正在运行的$MIRR_NAME镜像个数: $INUMS" >>log.txt
# 当前IID的个数<=1时才允许删除
if [ "$INUMS" -le 1 ];then
echo "删除镜像 $IID $MIRR_NAME" >>log.txt
docker rmi $IID
else
echo "不允许一次性删除多个镜像" >>log.txt
fi
}
#入口函数
function run(){
goDir
if [ -n "$CID" ]; then
echo "存在$CONTAINER_NAME容器,CID=$CID,停止$CONTAINER_NAME容器" >>log.txt
stopCt
delRuningCt
delRuningIg
build
createCt
echo "$CONTAINER_NAME容器创建完成" >>log.txt
else
echo "不存在$CONTAINER_NAME容器,docker run创建$CONTAINER_NAME容器" >>log.txt
build
createCt
echo "$CONTAINER_NAME容器创建完成" >>log.txt
fi
}
#入口
run
(基于tomcat)构建容器脚本.txt
#!/bin/bash
#配置信息
#操作/项目相对路径(Dockerfile和源jar的文件位置)
BASE_PATH=/root/DockerFiles/tomcat/webapps
#配置文件的位置(物理机)
FILE_CONF_PATH=/root/DockerFiles/tomcat/conf
#日志文件存储的位置(物理机)
FILE_LOG_PATH=/root/DockerFiles/tomcat/logs/jcjklw_logs
#容器名称
CONTAINER_NAME=jcjklw
#镜像名称
MIRR_NAME=jcjklw
#端口映射
PORT=15100
#映射的容器文件卷(不能改)
VFILE_CONF_PATH=/usr/local/tomcat/conf
VFILE_LOG_PATH=/usr/local/tomcat/logs
#查找正在运行的本程序的容器ID
CID=$(docker ps | grep "$CONTAINER_NAME" | awk '{print $1}')
#当前容器的个数
CNUMS=$(docker ps | grep "$CONTAINER_NAME" | wc -l)
#查找正在运行的本程序的镜像ID
IID=$(docker images | grep "$MIRR_NAME" | awk '{print $3}')
#当前镜像个数
INUMS=$(docker images | grep "$MIRR_NAME" | wc -l)
#当前时间
DATE=$(date "+%Y-%m-%d-%H-%M-%S")
#进入项目镜像路径
function goDir(){
echo "进入$BASE_PATH" >>log.txt
cd $BASE_PATH
}
#构建docker镜像
function build(){
echo "开始构建镜像" >>log.txt
docker build -t $CONTAINER_NAME$DATE ./
echo "结束构建镜像" >>log.txt
}
#停止容器
function stopCt(){
docker stop $CID
}
#删除正在运行的docker容器
function delRuningCt(){
echo "当前正在运行的$CONTAINER_NAME容器个数: $CNUMS" >>log.txt
# 当前CID的个数<=1时才允许删除
if [ "$CNUMS" -le 1 ];then
echo "删除容器 $CID $CONTAINER_NAME" >>log.txt
docker rm $CID
else
echo "不允许一次性删除多个容器"
fi
}
#删除镜像
function delRuningIg(){
echo "当前正在运行的$MIRR_NAME镜像个数: $INUMS" >>log.txt
# 当前IID的个数<=1时才允许删除
if [ "$INUMS" -le 1 ];then
echo "删除镜像 $IID $MIRR_NAME" >>log.txt
docker rmi $IID
else
echo "不允许一次性删除多个镜像" >>log.txt
fi
}
#创建容器
function createCt(){
docker run -d -p $PORT:8080 -v $FILE_CONF_PATH:$VFILE_CONF_PATH -v $FILE_LOG_PATH:$VFILE_LOG_PATH --restart always --name $CONTAINER_NAME$DATE $MIRR_NAME$DATE
}
#入口函数
function run(){
goDir
if [ -n "$CID" ]; then
echo "存在$CONTAINER_NAME容器,CID=$CID,停止$CONTAINER_NAME容器" >>log.txt
stopCt
delRuningCt
delRuningIg
build
createCt
echo "$CONTAINER_NAME容器创建完成" >>log.txt
else
echo "不存在$CONTAINER_NAME容器,docker run创建$CONTAINER_NAME容器" >>log.txt
build
createCt
echo "$CONTAINER_NAME容器创建完成" >>log.txt
fi
}
#入口
run
版权声明:本文为TheLongir原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。