一文说清dockerfile编写

发布于:2025-02-10 ⋅ 阅读:(81) ⋅ 点赞:(0)

docker用的时间比较久了,关于怎样把jar打成镜像,怎样基于已有mysql镜像添加额外初始化后封装成新的镜像,进行简单的说明。

1.jar封装镜像

from centos
# 设置本地为中文,解决中文乱码问题
RUN localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
# 修改时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 创建程序目录
RUN mkdir -p /opt/program/
# 修改字符编码,解决中文乱码问题
ENV LANG zh_CN.UTF-8
# 使用自己的JDK,“./linuxjdk64”为jdk路径
COPY ./linuxjdk64 /opt/linuxjdk64
# 设置JDK 环境变量
ENV JAVA_HOME /opt/linuxjdk64
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib  
# “./target”里面保存运行的程序,比如“xxx.jar”
COPY ./target /opt/program/target
# 设置工作目录,就是“docker exec -it ID /bin/bash”进入的容器内部的目录
WORKDIR /opt/program/target
# 对外暴露的爽口
EXPOSE 12041
# 容器启东时执行的命令
CMD ./run.sh

run.sh中参考:

java -server -Xms1g -Xmx2g -Xss256k -jar demo.jar

在这里插入图片描述

2.基于mysql封装镜像

基于mysql添加添加脚本初始化。

#基础镜像使用的是mysql:latest(mysql:8)
FROM mysql:5.7.34
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV LANG zh_CN.UTF-8

#定义工作目录变量
ENV SQL_FILE_PATH /usr/local/sqlfile

#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d

#定义要执行的sql文件名
ENV FILE_0 dms_node.sql

#定义要执行的shell文件名
ENV INSTALL_DDL_SHELL install_node_ddl.sh

#创建工作文件目录
RUN mkdir -p $SQL_FILE_PATH

#把sql文件复制到工作目录下
COPY ./sql/*.sql $SQL_FILE_PATH/

#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY ./sql/$INSTALL_DDL_SHELL $AUTO_RUN_DIR/
#EXPOSE 3306

#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DDL_SHELL

install_node_ddl.sh内容如下:

#!/bin/bash
if [ ! -d $SQL_FILE_PATH ]; then
        exit 0
fi
Dir=$(cd `dirname $0`; pwd)
sqlFile_arr=($SQL_FILE_PATH/dms_node_manage.sql)
for sqlFile in ${sqlFile_arr[@]}
do
        mysql -uroot -p$MYSQL_ROOT_PASSWORD < $sqlFile
        if [ $? -ne 0 ]; then
                echo "execute $sqlFile failed,please check file or mysql environment!"
                echo "execute failed,please see the log for details"
                exit
        else
                echo "ececute $sqlFile success !"
        fi
done
if [ $? -eq 0 ]; then
        mv $SQL_FILE_PATH $SQL_FILE_PATH.bak
fi
echo "execute all file compulete"

网站公告

今日签到

点亮在社区的每一天
去签到