美文网首页
我是这样使用SpringBoot(docker挂载文件)

我是这样使用SpringBoot(docker挂载文件)

作者: 碧波之心 | 来源:发表于2019-04-13 12:26 被阅读0次

    目录

    根据我是这样使用SpringBoot(静态资源)中讲的,静态资源是需要指向到外部文件的。而docker部署的项目是在docker容器中,配置文件指向的目录也是容器中的目录。静态资源是需要更新到宿主机中的。下面通过文件挂载的方式,通过更新宿主机的某目录来完成静态资源热更新的工作。

    修改项目

    docker容器是linux系统,目录结构同linux的。我是这样使用SpringBoot(静态资源)中,配置spring.resources.static-locations值为windows的目录。用了docker之后,这个配置项可以配置在application.yml文件中了,不需要每个环境配置。因为在docker容器中运行都是相同目录的,多环境配置反而不容易部署。
    编辑application-dev.yml,删除spring.resources.static-locations配置。
    原配置:

    custom:
      name: bhhello-app-dev
    spring:
      resources:
        static-locations: file:F:/test/, classpath:/static/, classpath:/public/, classpath:/resources/, classpath:/META-INF/resources
    

    修改成

    custom:
      name: bhhello-app-dev
    

    编辑application.yml,增加spring.resources.static-locations配置,结果如下:

    server:
      port: 80
    spring:
      profiles:
        active: dev
      resources:
        static-locations: file:/usr/local/bhhello/static, classpath:/static/
    custom:
      name: bhhello-app
    

    修改Dockerfile文件,增加VOLUME项。如下

    # 基础镜像
    FROM openjdk:8-jdk-alpine
    # 对应pom.xml文件中的dockerfile-maven-plugin插件buildArgs配置项JAR_FILE的值
    ARG JAR_FILE
    # 复制打包完成后的jar文件到/opt目录下
    COPY ${JAR_FILE} /opt/app.jar
    # 挂载/usr/local/bhhello目录到主机
    VOLUME /usr/local/bhhello
    # 启动容器时执行
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/opt/app.jar"]
    # 使用端口80
    EXPOSE 80
    

    把上一章中的docker容器与镜像删除。执行命令mvn clean package dockerfile:build打包docker镜像。docker镜像打包上传过程请参考前面几章。我是这样使用SpringBoot(加入Docker)我是这样使用SpringBoot(部署到docker服务器)我是这样使用SpringBoot(nexus3搭建docker本地私服)。根据需求打包成相应的镜像。

    关于挂载的目录

    打开VirtualBox,查看目录关系。(因为这是windows8.1的系统,如果是linux会简单一些)

    目录挂载
    可以看到本机的F:\ebertemp\demo自动挂载到VirtualBox的/Demo目录。这里的关系在我是这样使用SpringBoot(安装docker)有详细说明。
    如果要让项目file:/usr/local/bhhello/static的目录指向本地的一个目录。需要如下挂载:
    1. 本地F:\ebertemp\demo中创建目录挂载到docker宿主机的/Demo目录
    2. 将/Demo中的相应目录挂载到容器的/usr/local/bhhello目录

    项目部署

    本地创建目录F:\ebertemp\demo\bhhello,这个目录对应到docker宿主机的/Demo/bhhello。接下去在创建容器的时候将/Demo/bhhello目录挂载到容器的/usr/local/bhhello目录。这样,服务端查找file:/usr/local/bhhello/static目录就会指向/Demo/bhhello/static,宿主机会指向本地的F:\ebertemp\demo\bhhello\static。
    命令行中执行: docker run --name=bhhello -p 80:80 -v /Demo/bhhello:/usr/local/bhhello --privileged=true -d docker.blueheart.cn/biboheart/bhhello:1.0.0-SNAPSHOT

    运行容器
    容器正在运行
    在F:\ebertemp\demo\bhhello目录中创建文件夹static,放三张图片到F:\ebertemp\demo\bhhello\static目录中。
    静态资源文件
    分别访问http://192.168.99.100/001.jpghttp://192.168.99.100/002.jpghttp://192.168.99.100/003.jpghttp://192.168.99.100/004.jpg。003.jpg哪来?请看我是这样使用SpringBoot(静态资源)。这是就不一一截图了。结果与我是这样使用SpringBoot(静态资源)一致。

    部署到centos服务器

    先push镜像到镜像服务器,这个前面有讲过。push完成后,在centos服务器中pull镜像,创建容器。centos中不像windows那样两层挂载。这里就在centos服务器中创建目录/usr/local/bhhello(与容器目录相同)挂载。
    创建并进入目录/usr/local/bhhello/static,上传资源文件到目录中,这里上传的还是上面的三张图片。结果如下图


    服务器上的资源文件
    资源列表

    执行命令(具体镜像名称与版本号根据自己实际情况): docker pull docker.blueheart.cn/biboheart/bhhello:1.0.0-SNAPSHOT


    image列表
    执行如下命令创建容器,我的服务器中已经使用了80端口,这里映射到9991端口
    docker run --name=bhhello \
    -p 9991:80 \
    -v /usr/local/bhhello:/usr/local/bhhello \
    --privileged=true \
    -d docker.blueheart.cn/biboheart/bhhello:1.0.0-SNAPSHOT
    
    创建容器

    访问服务(我这里的服务器地址是192.168.2.106),访问结果与本地一致,这里不一一截图了。


    访问服务器

    相关文章

      网友评论

          本文标题:我是这样使用SpringBoot(docker挂载文件)

          本文链接:https://www.haomeiwen.com/subject/qvhlwqtx.html