• DOCKER 学习笔记3 使用Docker部署SpringBoot


    前言

    Springboot 可谓是当代Web项目当中的一股清流。不管是控制反转、依赖注入、切面编程。使用起来非常的得心应手,SpringBoot 最大的特点就是约定大于配置减少繁琐的配置。能自动化加载需要的配置项,大大减少程序员的配置功能。不再在繁琐的XML里面配置一大堆东西。也非常难受。

    Docker 与Springboot项目结合起来,最好的使用容器的方法就是:

    • 各尽其责,一个容器负责一个功能
    • 减少容器镜像大小。容器里面除去应用的依赖以外不需要其他冗余。
    • 容器轻量化

    Docker-Springboot

    还是按照构建Springboot 的方式。访问 https://start.spring.io/
    选择自己的JAVA版本以及Springboot 版本下载即可。

    解压导入。就手写一个简单的控制器,访问 http://localhost:8080/ 就返回一段话即可。

    @RestController
    @RequestMapping
    public class DockerController {
    
        @GetMapping("/")
        public String index() {
            return "Hello Docker-spring";
        }
    
    }
    
    

    POM 文件加入Docker 支持

    在POM 插件中引入maven对于Docker 的支持插件。并设置Dockerfile文件所在的文件夹(上下文文件夹)以及设置镜像的镜像名称

    
    <properties>
    	<docker.image.prefix>springboot</docker.image.prefix>
    </properties>
    
    <plugin>
    	<groupId>com.spotify</groupId>
    	<artifactId>docker-maven-plugin</artifactId>
    	<version>1.0.0</version>
    	<configuration>
    		<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
    		<dockerDirectory>src/main/docker</dockerDirectory>
    		<resources>
    			<resource>
    				<targetPath>/</targetPath>
    				<directory>${project.build.directory}</directory>
    				<include>${project.build.finalName}.jar</include>
    			</resource>
    		</resources>
    	</configuration>
    </plugin>
    

    创建 Dockerfile

    在配置文件中我们设置的是src/main/docker
    因此在main文件夹下创建一个docker 文件夹。并新建一个Dockerfile文件

    
    ## 基础镜像
    FROM openjdk:8-jdk-alpine
    
    ## 设置挂载点
    VOLUME /tmp
    
    ## 复制并修改重命名
    ADD docker-springboot-1.0.jar app.jar
    
    ## 设置启动参数
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    

    简单说下:

    • FROM 用于指定基础镜像,当然运行Springboot 肯定需要java运行环境 openjdk:8-jdk-alpine
    • VOLUME 用于挂载
    • ADD 用于复制,将上下文内的 docker-springboot-1.0.jar 复制到镜像内,并改名为app.jar
    • ENTRYPOINT 详见下方

    VOLUME 命令

    用于定义匿名卷,用于创建挂载点,比如 VOLUME /tmp 就会向容器内挂载一个 /tmp 目录,为什么需要这个目录,因为springboot 内置的tomcat 使用的是 /tmp 作为工作目录。使用这个命令后。产生的效果是:在宿主主机docker 的工作目录Docker Root Dir: /var/lib/docker 创建一个临时文件,将这个文件链接到容器的 /tmp 下。

    ADD 命令

    ADD 命令用于在构建镜像时,复制上下文中的文件到镜像内。
    格式:

    ADD <源路径>... <目标路径>
    ADD ["<源路径>",... "<目标路径>"]
    

    ENTRYPOINT 命令

    ENTRYPOINT 命令用于给容器配置一个可执行的程序。也可理解为容器的默认程序,就好比这个容器运行着,它里面肯定需要跑一个东西吧。和CMD 命令有相似之处。

    不同点

    • CMD 命令可以被覆盖,若执行 docker run <image> <command> 后面跟的命令<command>则会覆盖CMD 命令的内容。
    • ENTRYPOINT 只允许在Dockerfile 当中出现一次。多指定则会覆盖。

    可以通过 docker run --entrypoint 重写容器入口点

    Docker 部署环境

    windows 构建特别吃力。所以选择将源程序上传Linux 服务器进行构建镜像。
    我这里上传码云 需要的小伙伴可以直接下载构建:

    https://gitee.com/mrc1999/springboot-docker

    安装JDK

    yum install java-1.8.0-openjdk
    
    ## 检查安装情况
    java -version
    

    安装GIT

    yum install git
    
    git version
    

    安装maven

    yum install maven
    
    mvn -v
    

    通过以上的操作,我们已经安装了基本的构建环境,当然docker 我就不说了,之前的文章已经教大家配置加速以及安装了。maven 在安装后,也需要配置阿里云的中央仓库,这样下载依赖会快很多!!

    部署docker

    ## 拉取远程代码
    git clone https://gitee.com/mrc1999/springboot-docker.git
    
    cd springboot-docker
    
    ## 通过maven 进行构建jar文件
    mvn package
    
    ## 启动jar 文件进行测试 是否启动有误
    java -jar target/docker-springboot-1.0.jar
    
    
    ## 构建镜像
    mvn package docker:build
    
    
    [INFO] Building image springboot/docker-springboot
    Step 1/4 : FROM openjdk:8-jdk-alpine
     ---> a3562aa0b991
    Step 2/4 : VOLUME /tmp
     ---> Using cache
     ---> f4498cadadb0
    Step 3/4 : ADD docker-springboot-1.0.jar app.jar
     ---> d15f2d616127
    Removing intermediate container f29f59469095
    Step 4/4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
     ---> Running in 8afde38ee3e4
     ---> 1d5ac55f0a92
    Removing intermediate container 8afde38ee3e4
    Successfully built 1d5ac55f0a92
    [INFO] Built springboot/docker-springboot
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 20.931s
    [INFO] Finished at: Sat Feb 08 14:43:28 CST 2020
    [INFO] Final Memory: 29M/88M
    [INFO] ------------------------------------------------------------------------
    
    

    查看镜像

    ## 查看是否已经构建成功
    docker images
    
    ## 尝试运行
    docker run -d -p 8080:8080 springboot/docker-springboot
    
    
    ## 查看运行情况
    docker ps
    
    

    image.png

    image.png

    参考

    https://www.cnblogs.com/ityouknow/p/8599093.html

    码云示例

    https://gitee.com/mrc1999/springboot-docker

  • 相关阅读:
    python操作mysql数据库
    Turtle绘制带颜色和字体的图形(Python3)
    Windows单机最大TCP连接数的问题
    This network connection does not exist
    python3 条件判断,循环,三元表达式
    基于SolidWorks设计算例的柴油机飞轮平衡孔的研究
    VOC2007数据集转换成CSV格式[
    xml -> csv
    目标检测 – 解析VOC和COCO格式并制作自己的数据集
    什么是电磁阀,电磁阀常见故障与解决方法
  • 原文地址:https://www.cnblogs.com/ChromeT/p/12283482.html
Copyright © 2020-2023  润新知