【Docker】Docker部署SpringBoot项目

这篇具有很好参考价值的文章主要介绍了【Docker】Docker部署SpringBoot项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前期准备

1.1 基础环境

名称 版本 说明
Java 8 开发
Maven 3.6.3 打包
Docker 23.0.5 部署

作者以在本地安装并配置好以上基础环境,非Java得小伙伴安装各自语言的环境即可。

1.2 SpringBoot项目

需要准备一个springboot项目,确保项目可以正常启动,并且有可访问的接口,后续用于测试。
demo源码放在仓库了,有需要的小伙伴自行下载。

源码地址:https://gitee.com/wenda_repository/springboot-docker-deploy.git

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
可以看到,我们应用的端口为8081,并且在HelloController中提供了一个Get类型路径为 “/hello” 的接口,并且返回了 “Hello Docker”。

2 构建流程

2.1 编写 Dockerfile

创建一个文本文件,名为 Dockerfile,其中定义了构建镜像所需的指令、依赖项和配置。Dockerfile 中包含了构建镜像所需的基础镜像、安装软件包、复制文件等操作。

2.2 构建镜像

在包含 Dockerfile 的目录中运行以下命令来构建镜像:

docker build -t image_name:tag .
  • docker build: 这是 Docker 命令行工具中用于构建镜像的命令。
  • -t image_name:tagt: 使用 -t 参数来给构建的镜像打标签。在这里,-t image_name 是镜像的名称,tag 是版本号。这样的命名约定通常表示这是该镜像的最新版本。
  • . 表示当前目录,Docker 将会在当前目录中查找 Dockerfile。

2.3 运行容器

使用以下命令来运行基于构建的镜像的容器:

docker run -d --name container_name -p host_port:container_port image_name:tag
  • docker run: 运行 Docker 容器的命令。
  • -d: 表示以“守护进程”模式后台运行容器,这样容器就可以在后台持续运行而不会占用你的终端。
  • –name container_name: 为容器指定一个名称,在这里容器被命名为"container_name"。你可以根据需要自定义容器的名称。
  • -p host_port:container_port: 将主机的端口映射到容器的端口。指定主机上的端口(host_port),当有流量请求到达该端口时,Docker 将把请求转发到容器内部的指定端口(container_port)。可以将多个 -p 参数添加到命令中以进行多个端口的映射。
  • image_name:tag: 指定要运行的镜像名称及标签,Docker 将基于这个镜像来创建并运行容器。在这个例子中,镜像名称为 image_name,标签为 tag。

2.4 部署到远程服务器(可选)

2.4.1 推送镜像

如果需要将镜像部署到远程服务器上,可以使用以下命令将镜像推送到 Docker Hub 或其他镜像仓库:

docker push image_name:tag
  • docker push: 将本地的 Docker 镜像推送到镜像仓库的命令。
  • image_name:tag: 指定要推送的镜像的名称及标签。在这个例子中,镜像名称为 image_name,标签为 tag。

通过执行 docker push image_name:tag 命令,Docker 会上传本地的镜像到配置好的镜像仓库,使其可供他人或其他机器访问和使用。在推送镜像之前,你需要先登录到目标镜像仓库,可以使用 docker login 命令来进行身份验证。
需要注意的是,推送镜像的镜像名称需要包含仓库地址。例如,如果你要推送到 Docker Hub 上的公共仓库,镜像名称应该是类似于 docker.io/username/image_name:tag 的形式。

2.4.2 拉取镜像

在其他服务器上部署:在目标服务器上,使用以下命令从镜像仓库中拉取镜像并运行容器:

docker pull image_name:tag
docker run -d --name container_name -p host_port:container_port image_name:tag
  • docker pull: 从镜像仓库拉取镜像的命令。
  • image_name:tag: 指定要拉取的镜像的名称及标签。在这个例子中,镜像名称为 image_name,标签为 tag。

通过执行 docker pull image_name:tag 命令,Docker 会从配置好的镜像仓库中下载指定标签的镜像到本地。如果未指定标签,默认会拉取 latest 标签的镜像。
这是一个基本的 Docker 构建和部署流程。根据实际需求,可能需要进行更多的配置和管理,例如网络设置、数据卷挂载等。另外,可以使用 Docker Compose 或 Kubernetes 等工具来简化和管理多个容器的部署。

3 开始构建

3.1 编写DockerFile

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
在项目根目录创建DockerFile文件,并将如下命令添加至DockerFile中。

# 当前镜像将以 sgrio/java:jdk_8_alpine 作为基础进行构建
# 可以本地搭建一个镜像库,引用镜像即可
# 这里作者引用的是github上一位作者的镜像
FROM sgrio/java:jdk_8_alpine

# 建了一个目录 /springboot-docker-deploy,用于存放后续的文件和代码
RUN mkdir -p /springboot-docker-deploy

# 指定了在接下来的命令中,工作目录都是 /springboot-docker-deploy
WORKDIR /springboot-docker-deploy

# 定义了构建参数 JAR_FILE,并且给了它一个默认值 target/springboot-docker-deploy-1.0-SNAPSHOT.jar。
# 这个参数可以在构建镜像时被传递,并在后续的命令中使用
ARG JAR_FILE=target/springboot-docker-deploy-1.0-SNAPSHOT.jar

# 这个命令将构建上下文中的 ${JAR_FILE} 路径下的文件复制到镜像中的 
# /springboot-docker-deploy 目录,并且重命名为 app.jar
COPY ${JAR_FILE} app.jar

# 声明容器运行时监听的端口号
EXPOSE 8081

# 设置两个环境变量 TZ 和 JAVA_OPTS
# 分别用于指定时区为亚洲/上海,并设置了 Java 虚拟机的参数
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"

# 运行 java -jar app.jar 命令,并且传入 $JAVA_OPTS 参数
CMD sleep 30; java -jar app.jar $JAVA_OPTS

3.2 项目打包

在项目根目录执行以下命令,使用Maven将项目打为jar包。

mvn clean install -Dmaven.test.skip=true

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
jar包已经放在我们项目中target目录下。
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

3.3 构建镜像

3.3.1 构建镜像

在根目录执行以下命令。

docker build -t docker.mawenda.cn/docekr/springboot-docker-deploy:latest .

命令解释可参考文章中2.2部分
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

3.3.2 查看构建好的镜像

docker images

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
可以看到,已经构建出名为docker.mawenda.cn/docekr/springboot-docker-deploy的镜像。

4 运行容器

执行如下命令。

docker run -d --name springboot-docker-deploy -p 8081:8081 docker.mawenda.cn/docekr/springboot-docker-deploy:latest

命令解释可参考文章中2.3部分。

4.1 查看docker容器的进程

执行如下命令。

docker ps

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
参数解释:

  • CONTAINER ID: 容器的唯一标识符。
  • IMAGE: 容器所使用的镜像。
  • COMMAND: 容器启动时执行的命令。
  • CREATED: 容器的创建时间。
  • STATUS: 容器的状态,例如 “Up” 表示正在运行,“Exited” 表示已停止。
  • PORTS: 容器所映射的端口。
  • NAMES: 容器的名称。

4.2 测试API

在浏览器或API测试工具直接访问我们写好的API。
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

5 构建Nginx

正常项目中不仅有后端应用,还需要一个前端服务与Nginx,那么基于我们现在的结构,简单实现下。

5.1 编写DockerFile

在根目录下创建nginx目录,用于存储nginx.conf与前端静态资源与DockerFile,如下所示。
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
在DockerFile中加入以下内容。

FROM nginx:1.21-alpine as nginx

ADD nginx.conf /etc/nginx/nginx.conf

ADD html/index.html /home/html/index.html

5.2 编写nginx配置文件

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  120s;
    gzip  on;
    gzip_comp_level 1;
    gzip_types text/html text/plain text/css application/x-javascript text/javascript application/xml;
    client_max_body_size 10m;

    server {
        listen   80 default;
        server_name localhost;

        location / {
            root   /home/html;
            index  index.html index.htm;
        }

    }

}

这里不做解释,非本文重点内容,有兴趣小伙伴自行学习。

5.3 开始构建Nginx镜像

在项目根目录中执行以下命令。

docker build -t docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest nginx

这里可以自行通过docker images 查看构建好的镜像,此处不在赘述。

5.4. 运行容器

docker run -d --name springboot-docker-deploy-nginx -p 80:80 docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest

5.4.1 查看正在运行的docker进程

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java
可以看到,两个镜像都在运行中。

5.5 测试

5.5.1 测试静态资源

在浏览器中访问80端口,如下所示。
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

6 使用DockerCompose部署

Docker Compose是一个用于定义和运行多个Docker容器应用程序的工具。通过一个单独的配置文件,用户可以定义一组相关的服务、网络和卷,并使用一个命令启动、停止和管理整个应用程序。
使用Docker Compose,用户可以将多个容器打包在一起,以便它们能够相互通信并协同工作。这对于复杂的应用程序,如Web应用程序、数据库和消息队列等多个组件的情况尤其有用。
Docker Compose的配置文件使用YAML语法,其中包含了服务的定义、容器映像、环境变量、端口映射、数据卷等信息。通过这些配置,用户可以轻松地在不同的环境中部署他们的应用程序,并且能够确保在不同机器上具有相同的运行方式。

6.1 环境准备

除了安装Docker,还需要安装一下Docker Compose,这里不展示安装细节,自行学习。
【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

6.2 编写docker-compose.yml文件

在根目录创建docker-compose.yml文件,将如下内容添加至文件中。

version: '3'
services:
  springboot-docker-deploy-nginx:
    image: docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest
    build: ./nginx
    restart: always
    ports:
      - 80:80
  	volumes:
      - /data/tmp:/data/tmp

  # 构建名为springboot-docker-deploy-nginx的服务
  springboot-docker-deploy:
    # 镜像地址
    image: docker.mawenda.cn/docekr/springboot-docker-deploy:latest
    # Dockerfile所在目录
    build: ./
    # 容器停止后重新启动
    restart: always
    # 对外暴露端口与容器内部端口
    ports:
      - 8081:8081
    # 容器内部访问代理IP
    hostname: api-server
    # 声明/data/tmp的卷,并将主机上的/data/tmp目录与容器内的/data/tmp目录进行了绑定
    volumes:
      - /data/tmp:/data/tmp

6.3 修改nginx配置

因为我们在docker-compose.yml中配置了springboot-docker-deploy服务的hostname,我们可以在nginx中将请求代理到这个hostname上边。
修改nginx.conf配置如下,添加了 location /api/的配置。

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  120s;
    gzip  on;
    gzip_comp_level 1;
    gzip_types text/html text/plain text/css application/x-javascript text/javascript application/xml;
    client_max_body_size 10m;

    server {
        listen   80 default;
        server_name localhost;

        location / {
            root   /home/html;
            index  index.html index.htm;
        }

        location /api/ {
            proxy_pass http://api-server:8081/;
            proxy_connect_timeout 75;
            proxy_send_timeout  600;
            proxy_read_timeout  600;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

}

6.4 项目打包

mvn clean install -Dmaven.test.skip=true

6.5 构建镜像

docker-compose build

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

6.6 运行容器

此处先使用docker stop [CONTAINER ID] 命令,将刚才启动的服务停止。
执行如下命令。

# 首次建议执行以下命令,可以看日志,报错信息
docker-compose up 
# 后台启动
docker-compose up -d 

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

6.7 测试

6.7.1 静态资源

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

6.7.2 访问后端接口

【Docker】Docker部署SpringBoot项目,Docker,运维,docker,spring boot,java

7 Docker常用命令

docker docker-compose up

docker-compose up: 使用 Docker Compose 启动服务。

  • 示例:docker-compose up -d

docker docker-compose down

docker-compose down: 使用 Docker Compose 停止并移除服务。

  • 示例:docker-compose down

docker run

docker run: 运行一个容器。可以指定要使用的镜像、容器名称、端口映射、环境变量等信息。

  • 示例:docker run -d --name mycontainer -p 8080:80 nginx

docker ps

docker ps: 列出正在运行的容器。

  • 示例:docker ps

docker stop

docker stop: 停止一个正在运行的容器。

  • 示例:docker stop mycontainer

docker start

docker start: 启动一个已停止的容器。

  • 示例:docker start mycontainer

docker restart

docker restart: 重启一个正在运行的容器。

  • 示例:docker restart mycontainer

docker rm

docker rm: 删除一个停止的容器。

  • 示例:docker rm mycontainer

docker images

docker images: 列出所有本地的镜像。

  • 示例:docker images

docker pull

docker pull: 下载一个镜像到本地。

  • 示例:docker pull nginx

docker rmi

docker rmi: 删除一个本地的镜像。

  • 示例:docker rmi nginx

docker exec

docker exec: 在一个正在运行的容器中执行命令。

  • 示例:docker exec -it mycontainer bash

docker logs

docker logs: 查看容器的日志输出。

  • 示例:docker logs mycontainer

docker docker system prune

docker system prune: 清理不再使用的资源,如停止的容器、未被使用的卷和网络等。

  • 示例:docker system prune

docker inspect

docker inspect: 显示有关容器或镜像的详细信息,包括配置、网络设置等。

  • 示例:docker inspect mycontainer

docker build

docker build: 根据 Dockerfile 构建一个镜像。

  • 示例:docker build -t myimage:1.0 .

docker network ls

docker network ls: 列出所有网络。

  • 示例:docker network ls

docker network create

docker network create: 创建一个新的网络。

  • 示例:docker network create mynetwork

docker volume ls

docker volume ls: 列出所有卷。

  • 示例:docker volume ls

docker volume create

docker volume create: 创建一个新的卷。文章来源地址https://www.toymoban.com/news/detail-781093.html

  • 示例:docker volume create myvolume

到了这里,关于【Docker】Docker部署SpringBoot项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker和Kubernetes部署Spring Boot项目:如何灵活修改配置文件?

      大家好,我是G探险者,今天我们来聊一下通过容器化部署的springboot项目,如何灵活的修改配置文件。 有同事问我,我们的springboot项目是容器化部署,使用的是K8S容器编排平台,部署上去后,修改项目里面的配置不太方便,还需要进入到容器内部进行修改,太麻烦了,怎么

    2024年02月10日
    浏览(43)
  • 使用Spring Boot和Docker快速部署Java应用程序

    随着微服务的兴起,容器化技术已成为现代应用程序开发和部署的关键部分。Docker作为一种流行的容器化解决方案,广泛应用于企业和开发者社区。与此同时,Spring Boot作为一种优秀的Java开发框架,大大简化了基于Spring的应用程序开发。在本文中,我们将探讨如何将Spring Bo

    2024年02月01日
    浏览(62)
  • Jenkins + Docker 一键自动化部署 Spring Boot 项目,步骤齐全,少走坑路!

    本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。 环境 :centos7+git(gitee) 简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。 推荐一个开源免费的 Spring Boot 实战项目: https://git

    2024年02月08日
    浏览(69)
  • 基于 Docker 的 Spring Boot 项目部署演示,其中使用了 Redis、MySQL 和 RabbitMQ 中间件

    这是一个基于 Docker 的 Spring Boot 项目部署演示,其中使用了 Redis、MySQL 和 RabbitMQ 中间件。 拉取 MySQL 镜像: 创建 MySQL 容器: 将 密码 、 数据库名 、 用户名 和 密码 替换为您自己的值。 拉取 Redis 镜像: 创建 Redis 容器: 拉取 RabbitMQ 镜像: 创建 RabbitMQ 容器: 构建和运行

    2024年02月06日
    浏览(58)
  • 手动将Java SpringBoot项目部署到云服务器上(使用docker)

    本文记录一下我作为一个小白如何通过docker手动将java springboot项目部署到云服务器上(以腾讯云的轻量应用服务器为例)。 但是我个人还是推荐安装一个宝塔面板部署 ,真的全程自动化,非常方便,网上有很多相关的教程可以搜搜看。所以我写这个教程其实只想记录一下我

    2024年04月25日
    浏览(43)
  • [AIGC] Spring Boot Docker 部署指南

    近年来,容器化部署成为了越来越流行的部署方式。Docker 是目前最受欢迎的容器化平台之一,它提供了一种将应用程序与其依赖项打包在一起,并以容器的形式运行的方法。Spring Boot 是一种用于快速开发和微服务架构的框架,它与 Docker 结合使用可以简化应用的部署和管理过

    2024年01月17日
    浏览(59)
  • 【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解

    本文将为您详细介绍如何在Docker容器中部署Spring Boot服务。 首先,您需要为您的Spring Boot应用程序创建一个 Docker镜像 。然后将镜像在Docker容器中运行起来即可 提示:以下是本篇文章正文内容,下面案例可供参考 这个Dockerfile文件使用alpine Linux操作系统和OpenJDK 8图像作为基础映

    2024年02月16日
    浏览(48)
  • IDEA 集成 Docker 插件一键部署 Spring Boot 应用

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! 随着容器化技术的崛起,Docker成为了现代软件开发的关键工具。在Java开发中,Spring Boot是一款备受

    2024年02月05日
    浏览(46)
  • 【Docker】Docker部署SpringBoot项目

    名称 版本 说明 Java 8 开发 Maven 3.6.3 打包 Docker 23.0.5 部署 作者以在本地安装并配置好以上基础环境,非Java得小伙伴安装各自语言的环境即可。 需要准备一个springboot项目,确保项目可以正常启动,并且有可访问的接口,后续用于测试。 demo源码放在仓库了,有需要的小伙伴自

    2024年02月02日
    浏览(38)
  • Spring Boot与Docker的完美融合:从开发到部署的实战

    一、Spring Boot与Docker简介 Spring Boot框架特点与优势概述 Spring Boot 是一个由Pivotal团队开发的用于简化新Spring应用初始搭建以及开发过程的框架。它的核心特点和优势包括: 简化配置 :Spring Boot采用约定优于配置的方式,减少了大量的XML配置工作,通过自动配置功能极大地加速

    2024年04月26日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包