# docker-build-test **Repository Path**: SoulBGM/docker-build-test ## Basic Information - **Project Name**: docker-build-test - **Description**: 使用Dockerfile构建镜像来进行部署SpringBoot服务 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-02 - **Last Updated**: 2023-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: Docker, buiildl ## README # docker-build-test ## 介绍 使用Dockerfile构建镜像来进行部署SpringBoot服务 ## 安装教程 1. 使用maven进行打包 ```shell mvn clean package ``` 2. 将target目录下的docker-build-test拷贝到要部署的服务器上 3. 准备jdk的压缩包并将压缩包放入/home/dockerfile-jdk目录下 ```shell [root@node ~]# mkdir /home/dockerfile-jdk [root@node ~]# cd /home/dockerfile-jdk [root@node dockerfile-jdk]# rz ``` 4. 创建soulbgm/centos7-jdk8:1.0镜像 ```shell [root@node dockerfile-jdk]# echo "FROM centos:7 MAINTAINER SoulBGM RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ADD jdk-8u321-linux-x64.tar.gz /usr/local/ ENV JAVA_HOME /usr/local/jdk1.8.0_321 ENV JRE_HOME /usr/local/jdk1.8.0_321/jre ENV CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JRE_HOME/lib ENV PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin" > Dockerfile [root@node dockerfile-jdk]# docker build -t soulbgm/centos7-jdk8:1.0 . ... Successfully built ef7daec6af15 Successfully tagged soulbgm/centos7-jdk8:1.0 [root@node dockerfile-centos-ssh]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE soulbgm/centos7-jdk8 1.0 ef7daec6af15 15 seconds ago 569MB centos 7 eeb6ee3f44bd 13 months ago 204MB [root@node dockerfile-jdk]# docker run -it --rm soulbgm/centos7-jdk8:1.0 /bin/bash [root@dcb5645d0ae9 /]# java -version java version "1.8.0_321" Java(TM) SE Runtime Environment (build 1.8.0_321-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode) [root@dcb5645d0ae9 /]# exit ``` ## 使用说明 1. 在docker-build-test目录下执行下面的命令给脚本赋予可执行权限 ```shell chmode +x *.sh ``` 2. 进行构建镜像 ```shell ./build.sh 或 ./sug.sh build ``` 3. 运行容器 ```shell ./run.sh 或 ./sug.sh run ``` 4. 测试 ```shell curl curl 127.0.0.1:2207/hello 出现如下内容代表运行成功 ... hello now beijing time ... ``` ## 如何在自己的项目中使用 1. 改造项目中的pom.xml文件添加如下内容 ```xml org.springframework.boot spring-boot-maven-plugin git.soulbgm.Application ZIP nothing nothing ${project.build.directory}/${project.artifactId}/ repackage org.apache.maven.plugins maven-dependency-plugin copy-dependencies prepare-package copy-dependencies ${project.build.directory}/${project.artifactId}/lib false false true maven-resources-plugin copy-resources package copy-resources src/main/resources config/*.properties true bin true / Dockerfile docker-compose.yml true ${project.build.directory}/${project.artifactId}/ org.apache.maven.plugins maven-surefire-plugin true ``` 2. 将项目中使用的配置文件放到src/main/resources/config下 3. 在项目根目录下新建Dockerfile文件 **主要更改** - MAINTAINER 的镜像的作者 - WORKDIR 的工作目录 - EXPOSE 的端口 - ENTRYPOINT 最后的jar名称 **示例:** ```dockerfile FROM soulbgm/centos7-jdk8:1.0 MAINTAINER SoulBGM WORKDIR /home/docker-build-test COPY *.jar . COPY config config COPY lib lib #VOLUME ["/home/docker-build-test/config", "/home/docker-build-test/logs"] EXPOSE 8080 ENTRYPOINT ["java", "-Dloader.path=lib", "-jar", "-Duser.timezone=GMT+8", "docker-build-test-1.0.jar"] ``` 4. 在项目根目录下新建bin目录并添加sug.sh脚本 **主要更改** - 容器名称 - 镜像名称 - 镜像TAG - 容器内工作目录 **sug.sh脚本内容如下** ```shell #!/bin/bash source /etc/profile path=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) cd $path # 容器名称 CONTAINER_NAME=sbb # 镜像名称 IMAGE_NAME=dbt # 镜像TAG IMAGE_TAG=1.0 # 容器内工作目录 CONTAINER_WORKDIR=/home/docker-build-test hint="命令如下:\n help\t\t查看帮助\n build\t\t构建项目\n run\t\t运行项目\n debug\t\tdebug项目\n start\t\t启动项目,前提已run过\n stop\t\t停止项目\n status\t\t查看状态\n show\t\t查看日志\n exec\t\t进入容器中\n rm\t\t删除容器,强制的不管容器是否运行在都删\n rm-all\t\t删除容器和镜像,rm基础上强制删除镜像(一般重新构建使用)" if [ $# -eq 0 ]; then echo -e $hint exit fi case $1 in "help") echo -e $hint ;; "build") docker build -t $IMAGE_NAME:$IMAGE_TAG . ;; "run") docker run -dp 8080:8080 --net mynet --name $CONTAINER_NAME -v $path/config:$CONTAINER_WORKDIR/config -v $path/logs:$CONTAINER_WORKDIR/logs $IMAGE_NAME:$IMAGE_TAG --spring.profiles.active=prod --logging.config=classpath:logback-prod.xml ;; "debug") docker run -it -p 8080:8080 --net mynet --name $CONTAINER_NAME -v $path/config:$CONTAINER_WORKDIR/config -v $path/logs:$CONTAINER_WORKDIR/logs $IMAGE_NAME:$IMAGE_TAG /bin/bash ;; "start") docker start $CONTAINER_NAME ;; "stop") docker stop $CONTAINER_NAME ;; "status") docker ps -f "name=$CONTAINER_NAME" ;; "show") time=$(date "+%Y-%m-%d") hour=$(date "+%H") tail -f logs/$time/$hour/* ;; "exec") docker exec -it $CONTAINER_NAME /bin/bash ;; "rm") docker rm -f $CONTAINER_NAME ;; "rm-all") docker rm -f $CONTAINER_NAME docker rmi -f $IMAGE_NAME:$IMAGE_TAG ;; *) echo "参数有误" echo -e $hint ;; esac ``` 5. 在src/main/resources下添加logback-prod.xml的Logback的配置文件 **logback-prod.xml内容如下** ```xml logs ${log.pattern} utf-8 ${log.path}%d{yyyy-MM-dd,aux}/%d{HH,aux}/debug-%d{yyyy-MM-dd-HH}-%i.log 100MB 1008 true ${log.pattern} utf-8 DEBUG ACCEPT DENY ${log.path}%d{yyyy-MM-dd,aux}/%d{HH,aux}/info-%d{yyyy-MM-dd-HH}-%i.log 100MB 1008 true ${log.pattern} utf-8 INFO ACCEPT DENY ${log.path}%d{yyyy-MM-dd,aux}/%d{HH,aux}/warn-%d{yyyy-MM-dd-HH}-%i.log 100MB 1008 true ${log.pattern} utf-8 WARN ACCEPT DENY ${log.path}%d{yyyy-MM-dd,aux}/%d{HH,aux}/error-%d{yyyy-MM-dd-HH}-%i.log 100MB 1008 true ${log.pattern} utf-8 ERROR ACCEPT DENY ``` 6. 进行打包 ```shell mvn clean package ``` 7. 拷贝target/自己项目的名称 的目录到服务器上 8. 检查自己是否有soulbgm/centos7-jdk8:1.0的镜像如果没有执行安装教程的第4步进行创建 9. 给sug.sh脚本赋予可执行权限 ```shell chmode +x *.sh ``` 10. 构建项目镜像 ```shell ./sug.sh build ``` 11. 运行项目容器 ```shell ./sug.sh run ``` 12. 进行测试