• Docker构建Springboot项目,并发布测试


    把SpringBoot项目打包成Docker镜像有两种方案:

    全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地址,在项目里配置好Dockerfile文件,这样可以直接在idea中打包好后自动上传到镜像仓库,然后去服务器上启动这个镜像就行了。

    半自动化:半自动化又有两种方案,一种是Dockerfile文件放在项目里面,一种是放在项目外面。

    放在项目里面:springboot pom.xml中配置maven插件支持,打包时会使用项目里面的dockerfile,如果没配置插件支持会报错找不到dockerfile文件
    放在项目外面:springboot还是打包成普通的jar,然后把这个jar上传到服务器,同时在服务器创建一个Dockerfile文件,执行docker build命令,把这个jar构建成一个docker镜像,然后通过镜像执行。

    一般来说用半自动化比全自动化用的多,本文用的算是半自动化方式的第二种,总体来说有一下几个步骤:

    创建docoerfile:

    (1)在项目里新建一个名为Dockerfile的文件

    编写Dockerfile:

    1. #基础镜像
    2. FROM openjdk:8-jre
    3. #发布到网上时只会把jar包和Dockerfile发布上去
    4. # 把当前目录下的jar包拷贝进docker镜像里
    5. COPY *.jar /ftdocker.jar
    6. #CMD命令用于指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
    7. #地址映射
    8. CMD ["--server.port=8088"]
    9. #对外暴露端口
    10. EXPOSE 8088
    11. # ENTRYPOINT命令用于指定这个容器启动的时候要运行的命令(可以追加命令)
    12. #执行命令
    13. ENTRYPOINT ["java", "-Xmx512m", "-jar", "/ftdocker.jar"]

    在服务器里的你想存放项目的位置新建文件夹,用于存放Java项目

    把打包好的jar包和Dockerfile文件上传到服务器里

    使用Dockerfile打包出一个docker镜像

    1. #选项及解释

    2. -t的t是tag,表示生成的镜像的名称和版本号

    3. .表示当前构建时上下文的路径为当前目录

    4. docker build -t todocker:0.1 .

    效果图:

    如果指定(FROM java:8),Jenkins构建服务,Dockerfile报错:manifest for java:8-jre not found: manifest unknown: manifest unknown

    1、问题描述
    Jenkins构建服务,控制台报错:

    manifest for java:8-jre not found: manifest unknown: manifest unknown

    1、截图:


    2、解决问题
    这是由于Docker官方已经弃用java8镜像,想使用jdk1.8的话,可以使用openjdk。
    解决办法是,将Dockerfile改为 FROM openjdk:8-jre

    1. FROM openjdk:8-jre
    2. RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    3. && echo "Asia/Shanghai" > /etc/timezone
    4. ARG JAR_FILE
    5. COPY ${JAR_FILE} /app.jar
    6. ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
    7. CMD ["--spring.profiles.active=prod"]

    使用以下命令查看镜像是否构建成功

    docker images

    效果图: 

    使用以下命令利用我们新建的docker镜像来启动docker容器

    #选项及解释
    -d表示容器在后台运行
    -P表示随机指定端口或者-p指定端口
    --name="name"参数用于给容器取名字 ,用来区分容器
     
    docker run -d -p 8012:8012 --name 容器名称 镜像名称:版本

    效果图:

    访问docker容器内的项目

    (1)因为用-P参数随机指定了docker的端口来映射docker容器内的SpringBoot项目的8080端口,导致不知道docker随机指定的是哪个端口,所以使用以下命令查看随机指定的docker端口是什么(如果在启动docker容器时指定了端口可以不用进行这一步操作)

    docker ps
    效果图: 

    (2)使用curl命令来访问docker容器内的SpringBoot项目,出现404的字眼,证明SpringBoot项目启动成功

    curl localhost:docker随机指定的端口
    效果图 

    (3)使用curl命令调用SpringBoot项目的接口,发现能调用成功

    curl localhost:docker随机指定的端口/接口路径
    效果图: 

    其他问题:

    这个错是某个容器已经存在了 可以用下面命令进行停止 并删除 最后启动

    1. docker stop name/image_id
    2. docker rm name/image_id

    通过标签删除镜像

    通过如下两个都可以删除镜像:

    docker rmi [image]
    

    或者:

    docker image rm [image]

    强制删除:

    docker rmi -f image_id

    容器操作命令汇总: 参考链接

    停止容器:
    docker stop hello1
    启动已经停止容器:
    docker start hello1
    进入容器:
    docker exec -it hello1 /bin/bash
    删除容器:
    docker rm -f hello1
    帮助命令:
    docker --help

    参考链接:链接1链接2

  • 相关阅读:
    上海理工大学第二届“联想杯”全国程序设计邀请赛
    使用 KubeSkoop exporter 监测和定位容器网络抖动问题
    net-java-php-python-班级信息管理系统计算机毕业设计程序
    Windows下tomcat与idea控制台乱码问题
    Gulp工具
    亚商投资顾问 早餐FM/1117我国5G应用开始规模复制
    [创业-35]:办公环境 - 选用家用无线AP和企业级无线AP?
    按钮控制LED灯、蜂鸣器、风扇实验
    LeetCode 2347. 最好的扑克手牌
    [SSM框架]—SpringMVC
  • 原文地址:https://blog.csdn.net/chenthe1/article/details/132621107