Linux 环境下Docker部署项目(七)

news2024/11/25 6:50:56

文章目录

  • 一、前言
  • 二、项目打包上传
    • 1. 项目打包简单 (故省略)
    • 2. 上传jar包程序到Linux
  • 三、拉取镜像
    • 1. 拉取镜像java:8(jdk1.8)
    • 2. 拉取 java8 出错:
  • 四、创建Dockerfile文件
    • 1. 创建Dockerfile文件
    • 2. 编辑Dockerfile
    • 3. 构建镜像(需要在Dockerfile同级目录下构建)
    • 4. 查看镜像
    • 5. 启动后端项目镜像
      • 5.1 启动成功(正常可直接进入第6步
      • 5.2 启动失败 (正常可略过
      • 5.3 解决方法 (正常可略过
        • (1)查看容器的状态
        • (2)删除容器/修改容器名称(不删数据)
          • ① 删除容器
          • ② 创建同样名称的新容器
          • ③ 删除旧的容器及其所有相关数据
    • 6. 看运行日志
    • 7. 检验启动成功

一、前言

本文是讲述的是怎么样定义Dockerfile,然后在Docker中部署springboot项目。由于只是为了学习docker容器部署。因此本文基于的镜像只是基于单纯的java 8(由于官网弃用了 java 改成了 “operJDK”,镜像是 from xxx,文章中有截图展示)。大家可以根据自身的情况去拉取(添加)不同的镜像,比如MySQL xx版本、Tomcat xx 版本、Nginx xx版本、Redis xx 版本等集成环境。

如果想要集成其它环境,可以参考以下文章:
Java——Linux使用Docker部署若依前后端分离版【保姆级教程】
可参考的文章二
可参考的文章三

二、项目打包上传

1. 项目打包简单 (故省略)

2. 上传jar包程序到Linux

创建一个文件夹用来存放上传的jar包程序(位置随意 名字随意 存放java程序)
在这里我是 cd /usr/local 下,创建了一个 my_docker的文件目录
在这里插入图片描述
下图所示,我是使用的finalshell 进行直接拖动上传的。
3.

三、拉取镜像

1. 拉取镜像java:8(jdk1.8)

docker pull java:8

2. 拉取 java8 出错:

Error response from daemon: manifest for java:8-jdk not found: manifest unknown: manifest unknown

查询java镜像 docker search java

在这里插入图片描述
3. 解决方法

官方明确说了 java镜像已经弃用,请使用 openjdk
Dockerfile 更改为 FROM openjdk 完美解决
java DEPRECATED; use “openjdk” (or other JDK impl

在这里插入图片描述

四、创建Dockerfile文件

Dockerfile文件编写规则:

1、指令大小写不敏感,为了区分习惯上用大写
2、Dockerfile 非注释行第一行必须是 FROM
3、文件名必须是 Dockerfile
4、Dockerfile 指定一个专门的目录为工作空间
5、所有引入映射的文件必须在这个工作空间目录下
6、Dockerfile 工作空间目录下支持隐藏文件(.dockeringore)
7、(.dockeringore)作用是用于存放不需要打包导入镜像的文件,根目录就是工作空间目录
8、每一条指令都会生成一个镜像层,镜像层多了执行效率就慢,能写成一条指定的就写成一条。

1. 创建Dockerfile文件

cd my_docker 进入后my_docker目录下,再执行下面命令创建一个Dockerfile的文件

touch Dockerfile

注意:这里不要使用mkdir创建文件

2. 编辑Dockerfile

vim Dockerfile

添加以下内容

FROM openjdk
MAINTAINER yjw <yjw@163.com>
ADD person-admin.jar my.jar
EXPOSE 8888
CMD java -jar my.jar
  1. 定义父镜像:FROM openjdk ( 注意:如果前面没有pull拉取镜像,那么在执行Dockerfile时也会自己拉取)

  2. 定义作者信息:MAINTAINER yjw < yjw@163.com >

  3. 将jar包添加到容器: ADD person-admin.jar my.jar

  4. 定义容器启动执行的命令:CMD java -jar my.jar

  5. 向外暴露项目端口号:8888

在这里插入图片描述

3. 构建镜像(需要在Dockerfile同级目录下构建)

docker打包 注意最后有个点 user 是打包成的镜像名

docker build -f ./Dockerfile -t my_project .

在这里插入图片描述

4. 查看镜像

docker images

在这里插入图片描述

5. 启动后端项目镜像

5.1 启动成功(正常可直接进入第6步

docker run -d --name my_docker -p 8888:8888 my_project

在这里插入图片描述

注意:如果以上命令能够正常执行启动,没有出现下面的错误异常!!!那么可以跳过后面解决的步骤。

5.2 启动失败 (正常可略过

下面的错误提示:

docker: Error response from daemon: Conflict. The container name “/my_docker” is already in use by container “69734e81d1d0c091c3c63112d93ab2ecd4eb4ef8b5011df9018a0b6bdc530c84”. You have to remove (or rename) that container to be able to reuse that name.
See ‘docker run --help’.

原因:由于我命令执行错误,但是在执行过程中容器已经创建成功,再次(第二次)执行相同命令时提示被占用。( 这里我想过初次是创建,后面执行docker start my_docker启动也没生效。可能是别的原因影响了)
在这里插入图片描述

5.3 解决方法 (正常可略过

(1)查看容器的状态

在这里插入图片描述
在这里插入图片描述

(2)删除容器/修改容器名称(不删数据)

(这个命令将会强制删除名称为 my_docker 的容器,即使容器正在运行)

① 删除容器
docker container rm -f my_docker

在这里插入图片描述

使用docker images 命令,发现镜像my_project没有删除

在这里插入图片描述
如上两个图所示,只是容器被删除了,但是镜像等数据没有被删除。

② 创建同样名称的新容器

然后执行以下命令,这将创建一个新的容器,并将其继续命名为 my_docker

docker run -d --name my_docker -p 8888:8888 my_project

在这里插入图片描述

③ 删除旧的容器及其所有相关数据

请注意,这并不会影响旧的容器,只是重命名了容器。
如果您想删除旧的容器及其所有相关数据
,请使用以下命令:

docker container rm -f my_docker && docker image rm my_project

6. 看运行日志

docker logs -f -t my_docker

PS: -t 后面跟的是自己前面步骤创建的docker容器名称。比如我的是my_docker

在这里插入图片描述

7. 检验启动成功

docker ps -a

在这里插入图片描述

本文参考该文章:
linux 服务器 docker 部署 java SpringBoot SpringCloud 项目 jar



上一篇:
Linux 安装Docker完整教程(六)
下一篇:
Linux 环境下Docker多种环境集成(八)


end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯安全发布“数字安全免疫力”模型框架,建设发展驱动安全新范式

随着数字化进程加快&#xff0c;企业数字化体系的边界在不断拓展&#xff0c;安全风险和挑战不断增加&#xff0c;传统被动防御的安全应对常显疲态&#xff0c;数字安全时代亟待建立全新的安全范式。 6月13日&#xff0c;腾讯安全联合IDC在北京发布“数字安全免疫力”模型框架…

Nucleo-F411RE (STM32F411)LL库体验 1 - 点亮LED

Nucleo-F411RE &#xff08;STM32F411&#xff09;LL库体验 1 - 点亮LED 1、开发环境 一如既往&#xff0c;还是macos gcc pyocd的开发环境。 pyocd pack find stm32f411retx #命令查找支持包 pyocd pack install stm32f411retx #安装支持包 pyocd flash --erase auto --ta…

跨站点脚本(XSS)的介绍

目录 1、概述 2、XSS普遍认可三种形式&#xff1a; ​2.1 反射式 XSS 攻击 2.2 存储的 XSS 攻击 2.3 基于DOM的XSS 攻击 2.3.1 DOM中相关建议&#xff1a; 2.3.2 利用javascript开发时的建议规则&#xff1a; 3、XSS 攻击后果 4、框架安全 5、XSS 防御理念 6、XSS P…

Linux(链接器的意义)

文章目录 前言一、链接器概念介绍二、目标文件三、main函数是第一个被执行的函数吗&#xff1f;四、链接脚本的意义和作用总结 前言 本篇文章我们来讲解链接器的意义。 一、链接器概念介绍 链接器&#xff08;Linker&#xff09;是计算机编译器系统中的一个重要组成部分&…

MongoDB安装、设置密码、操作命令、配置文件说明、备份与还原

目录 一、mongodb概述 二、mongodb安装部署 三、mongodb设置密码 四、MongoDB操作命令与说明 五、配置文件说明 六、备份与还原 一、mongodb概述 MongoDB是一个非关系型数据库管理系统&#xff0c;它使用文档模型存储数据。MongoDB中的文档类似于JSON对象&#xff0c;可以…

总结899

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 今日已做&#xff1a; 1.读了两篇文章&a…

Spring:InvalidDefinitionException: Direct self-reference leading to cycle

一、现象 一个列表接口报错&#xff0c;没有返回信息&#xff0c;异常堆栈如下&#xff1a; 11:52:05.096 [http-nio-8180-exec-36] ERROR c.u.s.f.w.e.GlobalExceptionHandler - [handleRuntimeException,65] - 请求地址XXXXX,发生未知异常. org.springframework.http.conve…

(el-Tree)操作:Element-plus 中Tree 树形控件的样式等的使用

Ⅰ、Element-plus 提供的Tree树形控件组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供Tree组件情况&#xff1a; 其一、Element-ui 自提供的Table代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境&…

06-揭开神秘面纱:Golang method的魅力解析

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;Golang基础 &#x1f4ac;Go&#xff08;又称Golang&#xff09;是由Google开发的开源编程语言。它结合了静态类型的安全性和动态语言的灵活性&#xff0c;拥有高效的并发编程能力和简洁的语法。G…

宝鸡陇县中学弱电系统集成设计方案_kaic

摘 要 随着世界各国教育信息化的推进&#xff0c;我国在教育信息基础设施和资源上也在逐步加快步伐。校园信息化平台的建设关系到校园网站的技术实现、广播系统、视频监控系统的建设&#xff0c;能够使知识获取更便捷、校园文化生活更丰富、校园管理更精准。利用信息交互的特性…

chatgpt赋能python:Python如何排列输出列表的数

Python如何排列输出列表的数 Python是一门广泛应用于数据分析、科学计算等领域的编程语言&#xff0c;其简洁易学、强大的编程特性使得其成为很多领域中的首选语言。在Python中&#xff0c;列表是一种非常常见的数据结构&#xff0c;其可以存储大量相关数据&#xff0c;并且通…

【八大排序(五)】快排进阶篇-挖坑法+前后指针法

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 快排进阶篇 1. 前情回顾2. 思路回顾3. 单…

chatgpt赋能python:Python排列组合:让编程更简单

Python排列组合&#xff1a;让编程更简单 Python是一种现代化的编程语言&#xff0c;同时也是一种强大的工具。在Python中&#xff0c;排列组合是极其重要的一种操作。在本篇文章中&#xff0c;我们将介绍Python中的排列组合&#xff0c;并探讨如何利用Python编程语言进行排列…

十.多线程

1、进程与线程 &#xff08;1&#xff09;操作系统与进程 1.程序&#xff1a;代码。 2.进程&#xff1a;程序的动态执行过程。 &#xff08;2&#xff09;进程与线程 线程&#xff1a;线程&#xff1a;是比进程更小的执行单位&#xff0c;一个进程在其执行过程中&#xff0…

chatgpt赋能python:Python中如何找到编程中的错误

Python中如何找到编程中的错误 Python是一种旨在提高开发者生产力的高级编程语言。由于其简洁性和可读性&#xff0c;它越来越成为开发者们的首选语言。然而&#xff0c;就像其他编程语言一样&#xff0c;Python编程中难免会有错误。本文将介绍一些有用的技巧和工具&#xff0…

STM32速成笔记—概述

文章目录 前言一、专栏简介二、前期准备三、编程规范以及程序架构简介1. 编程规范2. 程序架构 四、STM32F103ZET6简介 前言 本人技术菜鸟一枚&#xff0c;2022年大学毕业&#xff0c;大学加入老师实验室&#xff0c;参加过一些嵌入式相关的比赛&#xff0c;获得过2020年TI杯大学…

【利用AI让知识体系化】简要了解网络七层协议

文章目录 一、前言引言目的和意义 二、网络七层协议简介OSI参考模型七层协议分层结构和各层协议简介 三、物理层 - Layer 1物理层概述物理层的作用物理层标准和协议 四、数据链路层 - Layer 2数据链路层概述常见的协议 五、网络层 - Layer 3网络层概述网络层的作用IP地址的作用…

Nuxt.js:用 Vue.js 打造服务端渲染应用程序

文章目录 I. 简介Nuxt.js是什么Nuxt.js的历史和发展Nuxt.js的特点和优势1. 服务端渲染2. 自动生成路由3. 静态文件服务4. 异步数据加载5. 基于Webpack的构建系统6. 支持模块化的Vue组件7. 可定制的ESLint与StyleLint8. 支持PWA等高级功能 II. Nuxt.js基础Nuxt.js的安装和配置Nu…

ACL2023 | WebCPM:清华发布中文LFQA 数据集,探索搜索引擎和PLM大模型结合新范式

一、概述 title&#xff1a;WEBCPM: Interactive Web Search for Chinese Long-form Question Answering 论文地址&#xff1a;https://arxiv.org/abs/2305.06849 代码&#xff1a;https://github.com/thunlp/WebCPM 1.1 Motivation 开发一个类似于WebGPT一样的中文版本的…

如何保证数据库分布式事务的强一致性

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 针对分布式数据库&#xff0c;如何保证分布式事务的强一致性&#xff0c;是分布式数据库的关键。分布式事务的强一致性方案这里介绍两种&#xff0c;一种是GTM(global transaction manager),另一种是基于XA协议的两阶…