Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker 部署SpringBoot项目不香吗?

Docker 部署SpringBoot项目不香吗?

作者头像
java进阶架构师
发布于 2020-09-22 07:10:25
发布于 2020-09-22 07:10:25
1.1K00
代码可运行
举报
文章被收录于专栏:Java进阶架构师Java进阶架构师
运行总次数:0
代码可运行

toutiao.com/i6843391272229536267

目录

  • docker介绍
  • 安装docker
    • Ubuntu安装docker
    • CentOS安装docker
    • 通过脚本安装
  • 拉取java环境
  • 创建springboot项目
  • 打包springboot到docker
  • docker查看容器的日志
  • 查看log4j2输出问文件日志

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker的核心思想是通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件级别的“一次性封装,到处运行”。这里的应用组件,可以是一个web应用,也可以是一个环境,更可以是一个数据库等等。

既然docker这么神奇,那我们如何安装docker呢?我们一起来走一下吧。

PS:我把 Dorcker 相关的文章整理好了,关注微信公众号 Java后端,回复 666 下载就可以了。

Ubuntu安装docker

由于本人的系统是CentOS,所以这里就只展示一下CentOS的安装方式,Ubuntu以及其他系统请自行百度。

CentOS安装docker

docker要求CentOS在7.0以后的版本,如果你的系统版本还在7.0以前,请先升级一下版本在进行安装,同时不支持32位的系统,内核版本至少3.10。

请先确保没有安装过docker,否则有可能会导致安装失败,如果之前安装过,可以尝试直接yum isntall -y docker

1.更新软件源第一个命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum update

遇到他输入y,然后回车,看到下面信息表示更新成功:

第二个命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加docker稳定版本的yum软件源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.再次更新yum源,并安装docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum update
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y docker-ce

看到这个页面,标识docker已经安装成功了。

4.安装完成之后启动docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl start docker

5.重启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl restart docker

6.停止

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl stop docker

7.开机自启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable docker

8.查看docker的状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl status docker

通过脚本安装

除了上面的yum安装,还可以采用shell脚本安装,安装流程如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -fsSL https://get.docker.com/ | sh

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget -qO- https://get.docker.com/ | sh

拉取jdk很简单,直接执行一行代码即可,我这里拉取的时java 8的版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull java:8

拉取完成之后执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker images

如果出现下面内容,表示拉取成功

1.新建项目

引入sprint-boot-web的依赖

新建完成之后的项目结构

2.引入docker依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<properties>
       <docker.image.prefix>registry.aliyuncs.com/linhuatest</docker.image.prefix>
    </properties>


 <!-- docker插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!--docker文件所在的目录-->
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

3.新建docker文件在main目录下新建docker目录,然后在docker目录下创建dockerfile文件,不需要后缀名。

创建完成之后的工程目录如下:

4.编辑dockerfile文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM java:8
VOLUME /tmp/tomcat
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar springboot-docker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-docker.jar"]

FROM:指定存在的镜像,java:8是我刚刚拉取的镜像,运行的基础。VOLUME:指向的一个临时文件,用于存储tomcat工作。ADD:复制文件并且重命名文件。ENTRYPOINT:初始化配置或者自定义配置。

5.创建测试接口

TestController内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ymy.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String test(){
        System.out.println("这是控制台日志!");
        log.info("这是输出到文件的日志");
        return   "HELLO-BUG!!!!!!!!!!";
    }
}

在resources目录下创建log4j2.xml文件主要看这两个参数:

这里我使用了log4j2的日志,如何配置log4j2的日志,请参考 springboot整合Log4j2(将日志输出到指定文件)。

6.编写application.yml配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server:
  port: 9999

到这里springboot项目就创建完成了,我们现在启动一下项目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v2.2.5.RELEASE)

15:29:19.386 [main] INFO com.ymy.SpringBootDockerApplication - Starting SpringBootDockerApplication on LAPTOP-3GLHJRE9 with PID 20652 (D:\springboot\spring-boot-docker\target\classes started by admin in D:\springboot)
15:29:19.395 [main] INFO com.ymy.SpringBootDockerApplication - No active profile set, falling back to default profiles: default
15:29:20.183 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9999 (http)
15:29:20.200 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9999"]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.31]
15:29:20.309 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
15:29:20.309 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 881 ms
15:29:20.452 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
15:29:20.568 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9999"]
15:29:20.596 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 9999 (http) with context path ''
15:29:20.599 [main] INFO com.ymy.SpringBootDockerApplication - Started SpringBootDockerApplication in 1.664 seconds (JVM running for 4.04)

如果看到这个页面表示springboot项目没有问题,现在我们将项目拷贝到服务器中。

我现在已经将项目拷贝到服务器中,我们现在需要将它打包到docker中,借助maven实现打包,如果还没有安装maven的,请先安装maven,切换到项目的根目录

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn clean package docker:build

执行完之后将会看到

表示打包成功。

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker images

我们发现docker的镜像中多了一个springboot/spring-boot-docker,没错,这个就是我们的springboot项目,既然镜像已经生成,那么如何使用这个镜像呢?

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name springbooot-docker -p 9999:9999 -d 4a2

run:运行的意思–name:指定镜像启动的之后的名称-p:容器和外部的端口映射 第一个端口:外部 第二个端口:内部-d:后台运行 -t:实时运行,窗口关闭,程序结束。4a2:表示镜像的id(IMAGE ID)前3位,这里的id并不需要输入全称,只需要输入前几个就行,有一个前提:当有很多镜像的时候,前面几个字符就有可能会相同,这个时候就需要多输入几位,直到不相同位置。

启动了镜像之后我怎么知道有没有成功呢?这个时候我们就需要一个命令来查看已经启动的任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps

我们发现这里已经出现了我们之前启动的镜像,所以这基本上代表启动成功了,为了验证是否启动成功,我们在浏览器输入测试的接口:ip:9999/test

这说明我们已经springboot项目已经启动成功了,到这里docker部署springboot项目差不就结束了,但是你可能还有一个疑问,如果我想看控制台的日志怎么办呢?像我们一般使用java -jar的时候都会生成一个控制台的日志文件,那docker容器中怎么查看控制台日志呢?其实很简单,只需要一行命令即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps

找到容器的id

然后执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker logs -f

这个时候我们就能看到控制台的日志了,如何我们想看log4j2输出的文件日志呢?

还记得我们在log4j2中配置了日志的输出目录了吗?

没错,就是这个, 我们切换到这个目下

发现这里生成了三个文件,我们打开info.log

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tail -100f info.log

我们发现并没有输入我们打印的:“这是输出到文件的日志”,难道是我们配置错了问题?不是的,是因为我们找错了位置,真正的文件日志在容器内部,所以我们需要先进入容器内部

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it ca2cd59fff9b /bin/bash

ca2cd59fff9b:容器id

然后再切换到我们日志的输出路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd work/spring-boot-docker

这里也找到了三个日志文件,我们打印info.log

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tail -100f info.log

这就是我们log4j2输出到文件的日志,到这里docker整合springboot项目就差不多结束了,如果想要退出docker容器可以使用

代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java进阶架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。
DencyCheng
2019/07/03
8380
使用 Docker 部署 Spring Boot
Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。 首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。 一个简单 Spring Boot 项目 在 pom.xml 中 ,使用 Spring Boot 2.0 相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin
纯洁的微笑
2018/04/18
1.6K0
使用Docker部署SpringBoot项目
创建一个 DockerController,在其中有一个index()方法,访问时返回:Hello Docker!
Ant丶
2023/08/16
2.4K0
基于win10+Docker+idea的SpringBoot项目容器化部署
软件安装这个就不多说了,大家可以参考这个帖子 :链接如下:https://blog.csdn.net/hunan961/article/details/79484098 主要注意两点就行了: 1.允许版本:64位Windows 10 Pro,专业版、企业版和教育版 2.开启虚拟化。
JAVA葵花宝典
2019/05/24
1.4K0
框架 | SpringBoot项目发布到自动化容器Docker步骤
如何发布Sping Boot项目? 新建好SpringBoot项目之后,SIT测试如果没问题,则下一步肯定要进行UAT测试。 那么如何将SpringBoot项目进行发布部署,这和我们之前的普通web项目不太一样,之前的项目直接部署到tomcat的webapps中,然后启动tomcat即可访问。 但是SpringBoot项目内嵌tomcat,这如何发布部署访问呢? 目前比较常用的方式有三种:发布JAR包、发布WAR包、部署到自动化容器中,以下具体讲解发布部署过程。 1 技术选型 JDK1.7、MYSQL57、
码神联盟
2018/06/04
2.2K0
Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
在之前的文章里面介绍了如何基于docker容器部署一些常见的基础环境,例如MySQL、Redis这些,那么这篇文章里面我会介绍一些关于SpringBoot如何打包运行到docker容器中。
乔戈里
2020/02/21
7560
Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
提升10倍生产力:IDEA远程一键部署SpringBoot到Docker
IDEA是Java开发利器,springboot是Java生态中最流行的微服务框架,docker是时下最火的容器技术,那么它们结合在一起会产生什么化学反应呢?
Java团长
2019/08/05
6290
提升10倍生产力:IDEA远程一键部署SpringBoot到Docker
使用 Docker 部署 Spring Boot 项目,带劲!!
Docker 一次构建、处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程。
Java技术栈
2020/12/08
2.1K0
使用 Docker 部署 Spring Boot 项目,带劲!!
如何在kubernete集群上部署springboot应用
在之前的文章中,我讲了使用kubeadm从0到1搭建kubernete集群,今天我们来聊一下如何在这套k8s集群上部署springboot应用。首先说明一下,我们这次集群的网络使用flannel网络,master节点启动命令如下:
jinjunzhu
2020/08/20
7000
SpringBoot 系列-日志详解
默认情况下,如果使用 “starters”,则使用 Logback 进行日志记录。还包括适当的 Logback 路由,以确保使用 Java Util 日志记录、Commons 日志记录、Log4J 或 SLF4J 的依赖库都能正常工作。
安徽开发者圈
2020/03/02
1.8K0
【docker系列】docker之部署springboot项目
本篇主题主要实战如何使用Docker部署springboot项目,那么首先保证服务器上已经安装完docker容器,如果尚未安装请移步《详解阿里云服务器安装docker》文章完成docker安装操作;以下直接搭建springboot项目;以下也是springboot项目中最基本的依赖项;因为我们想测试接口访问,故搭建的是一个web项目,那么我们提供一个controller层
沁溪源
2022/05/06
3.1K0
【docker系列】docker之部署springboot项目
重学SpringBoot3-日志Logging
日志记录是任何应用程序开发过程中的一个重要部分,它帮助开发人员了解应用程序的运行状态、诊断问题并进行有效的错误跟踪。SpringBoot3 提供了一个强大的日志管理系统,支持各种日志框架,并提供了简单的配置方法。本教程将介绍 SpringBoot3 中的日志系统,包括默认配置、如何自定义日志设置以及如何使用不同的日志框架。
CoderJia
2024/10/18
2790
重学SpringBoot3-日志Logging
SpringBoot 整合 docker
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
jwangkun
2021/12/23
4120
SpringBoot 整合 docker
Spring Boot 应用容器化之 Docker、Gradle
Docker 是一个 Linux 容器管理工具包,具备“社交”方面,允许用户发布容器的 image (镜像),并使用别人发布的 image。Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序。
JAVA葵花宝典
2019/05/24
8700
十一、springboot 配置log4j2以及打包成zip文件
其实我们前面已经配置了日志,但是最近总感觉日志日志格式看的不舒服,并且每次打包都是一个jar 文件,lib都包含在jar 中,每次做很小的修改都需要重新替换jar文件,jar文件会比较大,传输起来比较慢。所以做一些改进。
程序员爱酸奶
2020/02/29
1.2K0
使用腾讯云CVM搭建 K8s + Docker + Harbor :部署SpringBoot应用与配置指南
在现代云原生应用的开发和部署过程中,容器化技术已经成为主流,而 Kubernetes(K8s)则是容器编排的绝对领导者。为了高效地管理和分发容器镜像,拥有一个可靠的私有镜像仓库是每个开发者和运维工程师不可或缺的工具。Docker 和 Harbor 作为业内广泛使用的容器技术和私有镜像仓库解决方案,为 K8s 环境中的镜像管理提供了强大的支持。
不惑
2024/11/25
4790
使用腾讯云CVM搭建 K8s + Docker + Harbor :部署SpringBoot应用与配置指南
SpringBoot 多模块项目打包部署保姆级教程
docker pull mysql:8.0.16 ==> docker pull 镜像名称:镜像版本
木字楠
2022/11/15
2.2K0
SpringBoot 多模块项目打包部署保姆级教程
SpringBoot-Mysql应用Docker打包部署
直接安装 docker desktop for windows即可,其中还会包含了docker compose。可通过 docker-compose version来验证结果,一般会输出如下信息:
技术路漫漫
2020/06/21
2.3K0
SpringBoot-Mysql应用Docker打包部署
基于Docker构建安装Git/GitLab,以及制作springboot工程镜像
本地离线存储:绝大多数操作都只需要访问本地文件和资源,不用连网,在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。
艾编程
2020/06/10
4.5K0
相关推荐
使用 Docker 部署 Spring Boot
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验