首页 > 数据库 > 数据库开发技术 > 将springboot项目构建为docker镜像
主要看下配置文件
server:port: 8765shutdown: GRACEFULeureka:datacenter: cloudenvironment: devinstance:appname: eureka-serverlease-renewal-interval-in-seconds: 5lease-expiration-duration-in-seconds: 5instance-id: ${spring.cloud.client.ip-address}:${server.port}prefer-ip-address: truehostname: 127.0.0.1client:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://127.0.0.1:${server.port}/eureka/server:eviction-interval-timer-in-ms: 10000enable-self-preservation: false
具体查看:https://github.com/yxkong/ddd-framework/tree/main/ddd-parent/eureka-server
参考了nacos
在根目录下创建Dockerfile
FROM centos:7.5.1804MAINTAINER pader "5ycode@sina.com"# set environmentENV BASE_DIR="/home/appuser" \CLASSPATH=".:/home/appuser/conf:$CLASSPATH" \JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk" \USER="appuser" \JAVA="/usr/lib/jvm/java-1.8.0-openjdk/bin/java" \JVM_XMS="256m" \JVM_XMX="256m" \JVM_XMN="78m" \JVM_MS="128m" \JVM_MMS="256m" \REMOTE_DEBUG="n" \TOMCAT_ACCESSLOG_ENABLED="false" \APPNAME="eureka-server" \PORT=8765 \TIME_ZONE="Asia/Shanghai"ARG EUREKA_VERSION=0.1ARG HOT_FIX_FLAG=""WORKDIR $BASE_DIRRUN set -x \# && yum update -y \&& yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel# libcurl nc iputils wget vim# RUN wget https://maven.aliyun.com/nexus/content/groups/public/com/yxkong/eureka-server/${EUREKA_VERSION}/eureka-server-${EUREKA_VERSION}.jar -P /home/appuser# 修改远程下载为本地下载ADD target/eureka-server.jar /home/appuser/# RUN yum autoremove -y wget \RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \&& yum clean allADD bin/docker-startup.sh bin/docker-startup.sh# set startup log dirRUN mkdir -p logs \&& cd logs \&& touch start.out \&& ln -sf /dev/stdout start.out \&& ln -sf /dev/stderr start.outRUN chmod +x bin/docker-startup.shEXPOSE 8848ENTRYPOINT ["bin/docker-startup.sh"]
在根目录下创建bin/docker-startup.sh
set -xexport CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/#===========================================================================================# JVM Configuration#===========================================================================================JAVA_OPT="${JAVA_OPT} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}"if [[ "${REMOTE_DEBUG}" == "y" ]]; thenJAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"fiJAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"#===========================================================================================# Setting system properties,覆盖配置文件的中的系统属性#===========================================================================================if [[ ! -z "${APPNAME}" ]]; thenJAVA_OPT="${JAVA_OPT} -Deureka.instance.appname=${APPNAME}"fiif [[ ! -z "${PORT}" ]]; thenJAVA_OPT="${JAVA_OPT} -Dserver.port=${PORT}"fiJAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]; thenJAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"elseJAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"fiJAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/eureka-server.jar"# 自定义配置文件,从外面加载配置文件#JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}"JAVA_OPT="${JAVA_OPT} --spring.config.name=${CUSTOM_SEARCH_NAMES}"JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"echo "eureka is starting, you can docker logs your container"exec $JAVA ${JAVA_OPT}
# 构建docker build -t 5ycode/eureka:0.1 .# 运行容器docker run -d --name eureka-server -p 8765:8765 5ycode/eureka:0.1添加到docker-compose中:image: 5ycode/eureka:0.1container_name: eureka-server_devrestart: alwaysenvironment: # 可以配置自定义的变量"/etc/localtime:/etc/localtime"JVM_XMS=312mJVM_XMX=312mREMOTE_DEBUG=yports:"8765:8765"volumes:./logs/eureka-server:/logs
&& 符号连接命令,执行结束只会创建一层镜像,否则一个RUN一层
FROM 定制的镜像是基于from的镜像
RUN 执行后面跟着的命令
COPY 复制指令,从上下文目录中复制文件或目录到容器里指定位置
ADD 和copy类似
优点:在copy为 tar、gzip、bip2、xz的情况下会自动复制并解压到目标领
缺点:无法复制tar压缩文件
CMD 类似于RUN指令,用于运行程序
CMD在 docker run时运行
RUN在docker build时运行
ENV 定义环境变量,在后续可以用这些环境变量 ${变量名}
ARG 与ENV作用一致,ARG 仅对Dockerfile内有效
VOLUME 定义匿名数据券,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷
EXPOSE 声明端口
WORKDIR 指定工作目录
USER 用于指定执行后续命令的用户和用户组(用户和用户组必须提前存在)
HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD 用于延迟构建命令的执行
LABEL 用于给镜像添加一些元数据
参考 https://www.runoob.com/docker/docker-dockerfile.html
原文作者:5ycode;如有侵权,请联系管理员删除。