使用Docker compose发布SpringBoot项目

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 使用Docker Compose部署SpringBoot项目

我们使用Docker的时候,定义Dockerfile文件,然后使用docker builddocker run等命令操作容器,对Docker不熟悉的可以前往查看中文文档:Docker文档。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率就有点低了。Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。

compose

本文将给大家介绍如何通过Compose发布SpringBoot项目,以及Compose得一些常用知识

一、Compose概念

  • Docker Compose 将所管理的容器分为三层,分别是工程(project)服务(service)容器(container).
  • Docker Compose运行目录下的所有文件docker-compose.yml组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

二、Compose常用命令

以下命令中出现得[]里得参数都是可选的

1、ps命令

列出所有运行容器
docker-compose ps

2、logs命令

查看容器日志输出,-f表示查看实时日志,容器名表示启动后的容器名,不指定则查看所有启动的容器
docker-compose logs [-f] [容器名]

3、port命令

打印绑定的公共端口,下面命令可以输出demo1服务8080端口所绑定的公共端口
docker-compose port demo1 8080

4、build命令

构建或者重新构建服务
docker-compose build

5、start命令

启动指定停止的容器, 如下实例中demo1为一个容器,如果不指定,则启动所有已存在的
docker-compose start [demo1]

6、stop命令

停止已运行的容器,不指定则停止所有的
docker-compose stop [demo1]

7、rm命令

删除指定容器,必须为已停止的,如果不指定容器名,则删除所有
docker-compose rm [demo1]

8、up命令

构建和启动容器,-d为后台运行
docker-compose up [-d]

9、kill命令

通过发送SIGKILL信号来停止容器,不指定容器名则停止所有启动中的容器
docker-compose kill [demo1]

三、Docker Compose配置文件属性

1、version

指定docker-compose.yml文件的写法格式

version:"3"

2、services

多个容器集合

services:
  demo1:
  demo2:

3、build

配置构建时,Compose会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定Dockerfile, .表示Dockerfile所在目录的镜像

services:
  demo1:
    build: .

4、command

覆盖容器启动后默认执行的命令

command: bundle exec thin -p 3000

5、dns

配置 dns 服务器,可以是一个值或列表

dns:
    - 8.8.8.8

6、dns_search

配置DNS搜索域,可以是一个值或列表

dns_search:
    - www.example.com

7、environment

环境变量配置,可以用数组或字典两种方式

environment:
    - DEBUG=1

8、env_file

从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于environment指定的环境变量

env_file: .env

9、expose

暴露端口,只将端口暴露给连接的服务,而不暴露给主机

services:
  demo1:
    expose:
      - 8080

10、image

指定服务所使用的镜像

image: mysql

11、network_mode

设置网络模式

network_mode: "bridge"

12、ports

对外暴露的端口定义,和expose对应

# 暴露端口信息  - "宿主机端口:容器暴露端口"
ports:
  - "8763:8763"
  - "8763:8763"

13、links

将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况

services:
  demo1:
    # 服务名:别名
    links:
      - demo2:test

14、volumes

卷挂载路径

volumes:
  #  宿主机:容器
  - /srv

更多命令或者配置属性,可以参考DockerCompose官方文档:Compose command

四、发布SpringBoot项目

1、导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>cn.gjing</groupId>
    <artifactId>tools-starter-swagger</artifactId>
    <version>1.0.9</version>
</dependency>

2、编写Dockerfile

FROM hub.c.163.com/library/java:8-alpine
WORKDIR /demo
COPY target/demo1-0.0.1-SNAPSHOT.jar demo1.jar
#设置镜像的时区,避免出现8小时的误差
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
EXPOSE 8080
ENTRYPOINT ["java","-Xms256m","-Xmx512m","-jar","demo1.jar"]

3、编写docker-compose.yml文件

version: "3"
services:
  demo2:
    # 指定启动后的容器名
    container_name: demo2
    build: ./demo2/ .
    ports:
      - "8081:8081"

4、编写一个接口,用于启动后测试

/**
 * @author Gjing
 **/
@RestController
public class DemoController {

    @PostMapping("/test")
    public String test() {
        return "ok";
    }
}

5、启动类使用@EnableSwagger注解

6、配置文件

server:
  port: 8081
spring:
  application:
    name: demo2
swagger:
  base-package: com.gj.web.api

7、将项目打包后,命令行使用docker-compose up进行构建并运行镜像,最终效果如下:

1

8、浏览器访问swagger

2

本文到此就结束啦,文章中只简单的描述了如何发布一个SpringBoot服务,更多用法大家可以前往官网进行学习,本项目Demo代码地址:Docker-Demo

目录
相关文章
|
17天前
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
如何在SpringBoot项目中使用过滤器和拦截器
|
11天前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
20天前
|
XML 前端开发 Java
还不会SpringBoot项目模块分层?来这手把手教你
本文详细介绍了如何为SpringBoot项目创建模块并进行合理的分层设计。通过逐步演示,从创建项目到构建各功能模块,再到具体代码实现,手把手教你实现整洁的代码分层。主要内容包括:创建依赖层、主启动层、模块层及其子模块(如共通层、控制器层、数据持久层等),并通过实例演示了从前端请求到后台服务调用的实际流程。适合SpringBoot初学者及有一定经验但需优化项目结构的开发者参考。
63 2
还不会SpringBoot项目模块分层?来这手把手教你
|
20天前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
44 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
30天前
|
JavaScript 前端开发 Java
SpringBoot + Vue 前端后分离项目精进版本
这篇文章详细介绍了一个基于SpringBoot + Vue的前后端分离项目的搭建过程,包括前端Vue项目的初始化、依赖安装、页面创建和路由配置,以及后端SpringBoot项目的依赖添加、配置文件修改、代码实现和跨域问题的解决,最后展示了项目运行效果。
SpringBoot + Vue 前端后分离项目精进版本
|
20天前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
44 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
20天前
|
JavaScript 前端开发 小程序
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
这是一个基于 SpringBoot+MybatisPlus+Vue+Iview 技术栈构建的个人极简博客系统,适合初学者实战练习。项目包含文章分类、撰写文章、标签管理和用户管理等功能,代码简洁并配有详细注释,易于上手。此外,该项目也可作为毕业设计的基础进行二次开发。
71 0
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
|
28天前
|
安全 Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+jsp实现的健身房管理系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术实现的健身房管理系统。随着健康生活观念的普及,健身房成为日常锻炼的重要场所,高效管理会员信息、课程安排等变得尤为重要。该系统旨在通过简洁的操作界面帮助管理者轻松处理日常运营挑战。技术栈包括:JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Shiro、Spring Boot 2.0等。系统功能覆盖登录、会员管理(如会员列表、充值管理)、教练管理、课程管理、器材管理、物品遗失管理、商品管理及信息统计等多方面。
|
26天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
|
18天前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD