常用的dockerfile及对应脚本

  • Post author:
  • Post category:其他




基于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 版权协议,转载请附上原文出处链接和本声明。