Docker 打包部署web项目 [Dockerfile方式]

系统环境

IDE: IDEA 2020.2
Linux: WSL2 Ubuntu 20.04
Docker: 20.10.8

参考资料

1. 配置 SpringBoot 项目

1.1 创建 SpringBoot 项目

使用 Spring Initializr创建Spring Boot项目作为演示。

示例代码: pom.xml


    4.0.0

        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE

    com.bpf
    spring-boot-web
    0.0.1
    spring-boot-web
    Demo project for Spring Boot

        1.8

            org.springframework.boot
            spring-boot-starter-web

            org.springframework.boot
            spring-boot-starter-test
            test

                org.springframework.boot
                spring-boot-maven-plugin

示例代码: HelloController.java

package com.bpf.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {

        return "Hello, Spring Web!";
    }
}

1.2 maven 打包

在与 pom.xml文件同路径下进行打包。打包后生成的jar包会保存在 target目录下。

mvn clean package -DskipTests

-DskipTests表示跳过测试程序。

1.3 docker 打包

  • 创建 docker文件夹
  • mkdir docker
  • cd docker
  • 将jar包复制过来
  • cp ../target/*.jar .
  • 创建 Dockerfile
  • touch spring_dockerfile
spring_dockerfile 内容
FROM openjdk:8u312-slim-buster

COPY *.jar /app.jar

EXPOSE 8080

ENTRYPOINT java -jar /app.jar
  • 创建镜像
  • docker build -f spring_dockerfile -t spring-web .
  • 运行容器
  • docker run -d --name springweb -p 8081:8080 spring-web

Docker 打包部署web项目 [Dockerfile方式]

2. 配置 JavaWeb 项目

2.1 创建 JavaWeb 项目

注意点

Docker打包部署JavaWeb项目时,需要在 pom.xml中通过 webXml标签指定 web.xml的位置;同时需要通过 resources标签告知maven打包时要将xml配置文件包括进去。

示例代码: pom.xml


    4.0.0

    org.bpf
    javaweb
    0.0.1
    war

            org.springframework
            spring-webmvc
            4.0.0.RELEASE

                src/main/resources

                    *.xml

                org.apache.maven.plugins
                maven-war-plugin
                2.2

                    web/WEB-INF/web.xml

示例代码: web.xml


        contextConfigLocation
        classpath:spring.xml

        org.springframework.web.context.ContextLoaderListener

        dispatcherServlet
        org.springframework.web.servlet.DispatcherServlet

            contextConfigLocation
            classpath:springmvc.xml

        1

        dispatcherServlet
        /

示例代码: spring.xml


示例代码: springmvc.xml


示例代码: HelloController.java

package com.bpf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello() {
        System.out.println("访问了 /hello");
        return "Hello, JavaWeb.";
    }
}

2.2 maven 打包

在与 pom.xml文件同路径下进行打包。打包后生成的war包会保存在 target目录下。

mvn clean package -DskipTests

2.3 docker 打包

  • 创建 docker文件夹
  • mkdir docker
  • cd docker
  • 将war包复制过来
  • cp ../target/*.war .
  • 创建 Dockerfile
  • touch javaweb_dockerfile
javaweb_dockerfile 内容
FROM tomcat:8.5-jdk8

ADD *.war /usr/local/tomcat/webapps/javaweb.war

EXPOSE 8080

ENTRYPOINT catalina.sh run
  • 创建镜像
  • docker build -f javaweb_dockerfile -t java-web .
  • 运行容器
  • docker run -d --name javaweb -p 8082:8080 java-web

Docker 打包部署web项目 [Dockerfile方式]

Original: https://www.cnblogs.com/bpf-1024/p/15449741.html
Author: 步平凡
Title: Docker 打包部署web项目 [Dockerfile方式]

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611358/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • QT和Java的跨平台

    大家基本上都知道QT是跨平台的,Java也是跨平台的,那咱们今天就来聊聊他们两个: 相同点:都是跨平台 不同点:Java 的运行是建立在虚拟机上的,在虚拟机上 一次编译到处运行,但…

    Linux 2023年6月13日
    096
  • MySQL——锁和事务管理

    保证数据安全的一种手段。防止数据文件同时被多个用户同时修改,从而造成数据的破坏。 读锁:S锁,例如给一个表加了读锁以后,大家都能读表里面的内容(只能读不能改) 写锁:X锁。加了写锁…

    Linux 2023年6月7日
    079
  • Linux lsof命令的使用示例

    Linux命令中,lsof代表 Li St Open Files,用于查看所有被打开的文件,同时显示打开文件相对应的进程。Linux/Unix把一切都看做文件(pipes,sock…

    Linux 2023年6月13日
    086
  • K8s-小型综合实验(k8s+keeplived+nginx+iptables)

    K8S小型综合实验(k8s+keeplived+nginx+iptables) 实验目的 1.Kubernetes 区域可采用 Kubeadm 方式进行安装。 2.要求在 Kube…

    Linux 2023年6月13日
    0105
  • 事务与事务隔离级别详解

    事务基本概念 一组要么同时执行成功,要么同时执行失败的SQL 语句。是数据库操作的一个执行单元。 事务开始于: 连接到数据库上,并执行一条DML 语句in sert 、update…

    Linux 2023年6月14日
    098
  • Go-interface基本概念

    interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来。 定义一个接口: …

    Linux 2023年6月8日
    0104
  • CentOS7.6下安装Redis5.0.7

    此次安装是在CentOS7下安装Redis5.0.7 这里下载的&am…

    Linux 2023年6月14日
    0105
  • Unity Profiler的使用

    选中Development Build、Autoconnect Profiler和Script Debugging三个选项,如下图所示。 点击Build And Run按钮,将会编…

    Linux 2023年6月7日
    093
  • 《卡死你3000》批量文件复制命令详解

    卡死你3000简介: 名词解释: 批量顺序复制文件:从主控机,到从被控机1,被控机2,复制文件。有卡住问题。 批量并发复制文件:从主控机,到从被控机1,被控机2,复制文件。使用多线…

    Linux 2023年6月13日
    0117
  • djnago-filter用法

    django-filter用法 集成drf 不指定字段的过滤参数,那么该字段就默认为exact,精准匹配自定义filter文件内 from django_filters impor…

    Linux 2023年6月14日
    0122
  • tomcat上部署jenkins

    tomcat上部署jenkins tomcat上部署jenkins 部署tomcat 部署jenkins Jenkins创建流水线任务 主机名称 IP地址 需要的应用服务 工具包 …

    Linux 2023年6月6日
    0108
  • [apue] linux 文件访问权限那些事儿

    说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程。一个进程能不能访问一个文件,其实由三部分内容决定: 下面先简单说明一下这些基本概念,最后再说明它们是如何相…

    Linux 2023年6月6日
    097
  • dotnet诊断工具记录

    CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高) 调试高 CPU 使用率 dotnet tool install –global dotn…

    Linux 2023年6月7日
    0101
  • vue-admin-template组件前端,登录验证成功后,getInfo方法不调用

    先查看request.js中自定义状态码是否为自己的定义的成功状态码 这里的状态码该为自己的成功状态码 Original: https://www.cnblogs.com/antl…

    Linux 2023年6月7日
    0104
  • 有道词典翻译功能数字有时无法翻译出来解决方案

    阅文时长 | 0.03分钟字数统计 | 62.4字符主要内容 | 1、引言&背景 2、解决方案 3、声明与参考资料『有道词典翻译功能数字有时无法翻译出来解决方案』 编写人 …

    Linux 2023年6月14日
    0187
  • 安装一些服务:termux奇门遁甲

    接下来就是开始服务了 作为最基础的ssh,连接肯定是用ssh了,不然总用use线去连接手机吧 首先要给手机一个ip地址,连接wifi的时候,可以的话就固定mac,静态ip地址 方法…

    Linux 2023年6月8日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球