使用Docker compose发布SpringBoot项目

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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

目录
相关文章
|
24天前
|
关系型数据库 MySQL Java
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
这篇文章介绍了在腾讯云服务器上使用Docker安装常见软件的过程,包括安装MySQL、Redis和Tomcat,并提供了解决连接问题的方法。同时,还涉及了服务器中安装JDK 1.8的步骤和如何将项目打包部署到服务器上的指导,包括注意事项和操作提示。
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
|
27天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
27天前
|
Ubuntu Shell 应用服务中间件
在Ubuntu 14.04上安装和使用Docker Compose的方法
在Ubuntu 14.04上安装和使用Docker Compose的方法
30 1
|
10天前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
11天前
|
容器 Java Spring
Spring框架遇上Docker:传统与现代的碰撞,谁将重塑应用部署的未来?
【8月更文挑战第31天】Spring框架凭借其强大的企业级特性和便捷的开发模式,在Java开发中占据重要地位。Docker作为容器化技术的代表,提供了轻量级、可移植的应用部署解决方案。两者结合,尤其在微服务架构中,能显著提升开发效率、部署速度和环境一致性。
28 0
|
17天前
|
Kubernetes Linux Docker
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
|
18天前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
19天前
|
开发工具 git Docker
深入挖掘Docker Compose
【8月更文挑战第24天】
22 0
|
2月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
69 1
|
2月前
|
Java Nacos Docker
使用docker compose 编排微服务发布
使用docker compose 编排微服务发布
41 3