Docker部署spring boot项目

news/2024/12/2 16:47:42/

在docker部署时首先要保证一般部署能够访问。

docker命令部署spring boot项目

目前主流的java框架为spring,软件包为jar包,只需以jar为基础构建容器环境。打包为jar后只需要jvm就可以运行,因此需要以jdk为镜像构建容器。

  1. 基于命令构建jdk环境

拉取openjdk镜像:docker pull openjdk:8

在这里插入图片描述

在这里插入图片描述

  • 上传web文件,启动容器和web服务

在这里插入图片描述

在这里插入图片描述

sudo docker run -id --name=springboot1 -p 8080:8080 -v /home/master/java:/root/www openjdk:8构建容器命令。

如上图所设计使用构建容器命令,创建了一个伪终端,终端编号是唯一的,新建一个终端使用docker ps查看容器状态。共享文件需要时绝对路径

构建的容器由于映射了共享文件夹,所以容器和主机都会自动同步。

移动文件到共享文件夹

在这里插入图片描述
容器的共享文件夹自动同步了主机共享文件夹的内容,如下图:
在这里插入图片描述

启动的容器目录下存在jar文件,在容器终端使用命令行启动即可。
在这里插入图片描述
在这里插入图片描述

外部浏览器成功访问,到此可部署jar的web因此的docker容器构建成功。

在这里插入图片描述
启动成功后直接断开ssh连接即终端容器也继续在后台运行。

使用sudo docker exec -it [container_name] /bin/bash进入容器内部。/bin/bash时linux的交互式终端。一定要有-it表示创建一个伪终端。

-i表示创建交互式容器
-t表示生成一个伪终端

在这里插入图片描述

由上图可以看到openjdk竟然526mb,这是由于镜像是一个分层的系统,openjdk底层也使用了其他镜像,软件工具包时构建在操作系统上的,因此jdk也需要构建在操作系统上,因此openjdk的镜像分层如下:

在这里插入图片描述

在这里插入图片描述

容器面向操作系统,因此操作系统是容器的最底层,镜像也是由此一层层构建,dockerhub中央仓库提供了很多构建完成的镜像,帮助用户省略了一步步构建的过程。

拉取的opennjdk也包含了底层的镜像,因此变的很大。

dockerfile构建镜像并部署spring boot项目

编写dockerfile文件vim dockerfile-jdk

在这里插入图片描述

# 构建镜像
FROM openjdk:8
# 维护者西信息
MAINTAINER xiaoux@example.com
# 将主机文件复制到容器目录
ADD ./springboottest-0.0.1-SNAPSHOT.jar /root/www/app.jar
# 端口映射
EXPOSE 8080  # 起一个声明作用并不会实际映射,需要docker run -p映射
# 容器内运行命令
CMD java -jar /root/www/app.jar

sudo docker build -f ./dockerfile-jdk8 -t app .命令基于docckerfile构建容器。

-f执行dockerfile位置
-t给镜像起别名
.指定当前目录

在这里插入图片描述

docker minages查看构建的镜像

在这里插入图片描述

docker run命令直接构建并启动容器。dockerfile的cmd命令会直接当前docker run的启动命令执行。

也就是说dockerfile配置的参数直接作为docker run的启动的参数命令。由于在配置文件中配置了映射端口,服务启动的命令和共享文件夹,这里直接docker run 镜像名即可。docker run的参数命令会覆盖配置文件的命令。

通过如下命令启动容器,如图

docker run -it -v $pwd:/root/www -p 8080:8080 app

在这里插入图片描述

使用dockerfile的方便之处:

  1. 没有了拉镜像,配置分层镜像,配置共享文件夹一系列步骤。
  2. 直接基于dockerfile文件通过docker build构建镜像,docker run运行容器非常方便,避免了镜像版本冲突问题。
  3. 提高了复用性,任何开发者通过dockerfile构建的镜像都完全一样。
  4. 省略了docker run后的一堆参数,书写方便。

在这里插入图片描述

通过dockerfile构建镜像启动容器时,端口和共享文件夹是必须要要配置的。


http://www.ppmy.cn/news/58327.html

相关文章

[C++基础]-类和对象(下)

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、深入学…

C++三大特性—继承“名字搜索与默认成员函数”

继承中的类的作用域 每个类定义自己的作用域,在这个作用域中定义自己的成员。当存在继承关系时,派生类的作用域嵌套在基类的作用域之中。如果一个名字在派生类的作用域中无法解析,那么编译器将继续在外层的基类中寻找该名字的定义。 继承关系…

运维——ssh无法登录云服务器

0x00 概述 一般来讲,无法登录ssh的原因挺多,如果无法登录云服务器,则除了要检查ssh端口是否放行,防火墙状态外,还需要检查云服务器web控制台入站规则是否开放了对应端口。如果你前面检查都是正常,那么还需…

你的个人AI助理Pi来了

还记得之前的文章《不要老盯着ChatGPT,这几家公司的产品同样不容小觑》提到的Inflection AI公司吗?通过其官方推文了解到,前期我们关注的个人AI助理有了新的进展,Pi开始对外发布。 Pi是什么 Pi 是一种 AI,一种旨在提供…

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …

项目集的定义及管理

一、什么是项目集 项目集是相互关联且被协调管理的项目、子项目集和项目集活动,以便获得分别管理所无法获 得的效益。 以项目集的形式管理项目、子项目集及项目集活动能确保项目集组件的战略和工作计划根据各组 件的成果做出相应调整,或者按照发起组织的…

Hive3面试基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、基本知识Hive31.表的类型和表的存储格式a)b)c)创建表i)ii) 2.表 二、使用步骤1.引入库2.读入数据 总结 前言 面试准备之Hive 回顾…

postgresdb备份脚本

以下是一个简单的postgresdb备份脚本示例: 复制 #!/bin/bash # 设置备份目录和文件名 BACKUP_DIR/path/to/backup BACKUP_FILEdb_backup_$(date %F_%H-%M-%S).sql # 设置数据库连接参数 DB_HOSTlocalhost DB_PORT5432 DB_NAMEmydatabase DB_USERmyusername DB_PA…