小工具      在线工具  汉语词典  css  js  c++  java

Docker部署spring boot项目

# docker,docker,spring boot,java 额外说明

收录于:152天前

部署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文件,在容器终端使用命令行启动即可。
在这里插入图片描述
在这里插入图片描述

外部浏览器成功访问web,并且可以部署jar,至此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 [email protected]
# 将主机文件复制到容器目录
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启动容器时,必须配置端口和共享文件夹。

. . .

相关推荐

额外说明

触发JVM执行Full GC的情况及对策

堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最

额外说明

leetcode424(替换后最长重复字符:滑动窗口)

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。 注意:字符串长度 和 k 不会超过 104。 输入:s = “AABABBA”, k = 1 输

额外说明

近两个月整理的保姆级Linux常用命令(详略得当版),耗费近亿根头发

成功不必在我,而功力必不唐捐! 路漫漫其修远兮,吾将上下而求索. 系列文章目录 文章目录 系列文章目录 一、目录及文件处理命令 二.权限管理命令 2.1 基本管理权限 三.文件搜索命令 3.1 find搜索(实时,查询速度慢) 3.2 locate搜索(

额外说明

探究Spring Bean的六种作用域:了解适用场景和使用方式

这里写目录标题 单例(Singleton)作用域: 原型(Prototype)作用域: 请求(Request)作用域: 会话(Session)作用域: 全局(application)作用域: HTTP WebSocket 作⽤域 主要对单例作用域与原型作

额外说明

【数据结构趣味多】Map和Set

 1.概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。 在此之前,我还接触过直接查询O(N)和二分查询O(logN),这两个查询有很多不足之出,直接查询的速率太低,而二分查询在使用时要求序列是有序

额外说明

【C语言】qsort()函数详解

前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行   如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!   如果觉得博主文章还不错的话,希望三连支持! 目录 1、qsort概念介绍 2、qsort()函数实现(

额外说明

JavaScript设计模式(五)——发布订阅模式、桥接模式、组合模式

个人简介 -个人主页: 前端杂货铺 -‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 -个人状态: 研发工程师,现效力于中国工业软件事业 -人生格言: 积跬步至千里,积小流成江海 -推荐学习:-前端面试宝典 -Vue2 -Vue3 -Vue2/3项目实

额外说明

k8s资源管理命令与Namespace使用详解

目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法 3.2 常用控制台管理命

额外说明

《Leaflet 基础知识点》- 绘制点(两种方式)

前言  Leaflet 官方 API,有一个 L.point,但这并不是我们想要的。与 L.circle、L.rectangle 和 L.polygon 不一样。 从下图的 API 目录结构就能看出差异,L.point 在 Basic Types 中。

ads via 小工具