使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Compose通过简化多容器应用的部署和管理,使得开发人员能够更专注于应用程序的开发和测试。

部署SpringBoot

现在我们有一个springboot项目,需要依赖Redis、mysql5.7、nginx。

如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的Docker compose实现容器编排技术。

1、在服务器上创建工作目录

工作目录是用于存放部署所需要的文件等(Dockerfile、jar包、配置文件、静态资源),我这里是在根目录下创建app文件夹,里面内容如下

2、打包SpringBoot项目并上传到服务器

注意,在SpringBoot项目中的yml文件中,也需要一些小小的改动,如下:

3、编辑需要的Dockerfile文件

本项目一共需要3个,分别是springboot的、nginx、以及mysql,分别如下

3.1、Dockerfile-springboot

复制代码
#镜像、容器的基础环境,这里是JDK8
FROM kdvolder/jdk8
MAINTAINER zhangb

#设置工作目录
WORKDIR /app

# 将jar包复制到容器内,注意在dockerfile中,路径都是相对路径,而不是绝对路径 
COPY /projects/SmartCommunities-0.0.1-SNAPSHOT.jar /app/SmartCommunities-0.0.1-SNAPSHOT.jar 

# 向外暴露端口  
EXPOSE 8383

# 定义容器启动时执行的命令  
ENTRYPOINT ["java","-jar","/app/SmartCommunities-0.0.1-SNAPSHOT.jar"]

3.2、Dockerfile-nginx

复制代码
# 使用官方Nginx镜像作为基础  
FROM nginx:latest
MAINTAINER zhangb

# 复制自定义的Nginx配置文件  
COPY /usr/local/nginx/conf/nginx.conf nginx.conf

# 复制你的静态文件或其他资源(如果有的话)  
COPY /usr/local/nginx/html /usr/share/nginx/html

对应的nginx配置文件

复制代码
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #access_log  logs/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       81;
        server_name  localhost;

        charset utf-8;


        location / {
            root   html;
            index  index.html index.htm;
        }	
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    #项目的静态资源以及后端代理
    server {
	listen 80;
	server_name smartcommunity;
	
	location /{
		root /usr/share/nginx/html;
		index index.html;
	}
	location /prod-api/{
		proxy_pass http://192.168.235.138:8383/;
	}
   }


}

nginx所需要的静态资源

存放在app下的html中

3.3、Dockerfile-mysql

复制代码
MAINTAINER zhangb

#/docker-entrypoint-initdb.d/目录下的所有.sh、.sql、.sql.gz文件(取决于具体的数据库镜像)将在数据库初始化时被执行或导入。
#这意味着community-linux.sql中的SQL命令将在数据库容器首次启动时被执行,从而初始化数据库
ADD ./db/communiyu01.sql /docker-entrypoint-initdb.d

4、核心docker-compose.yml文件

注意,yml中的缩进全部都是空格来完成的,如果有tab,会报错

复制代码
#Docker-compose的版本
version: '3.0'  
  
#编排的服务、容器有哪些
services:  

  #mysql服务
  db:
    #定义容器名称,这里就是之前springboot的yml配置文件中的
    container_name: db  
    #所使用的mysql镜像
    image: mysql:8.0
    #通过dockerfile-mysql来构建
    build:
      context: ./
      dockerfile: Dockerfile-mysql
    #解决外部与内部连接的问题
    command: --default-authentication-plugin=mysql_native_password
    #数据库的环境
    environment:
      #初始化mysql的密码
      MYSQL_ROOT_PASSWORD: 111111  
      MYSQL_DATABASE: 'community01'
      MYSQL_PASSWORD: 111111
    ports:  
        - "3306:3306"  
    #使用的网络,注意,docker中容器的通信需要在同一网络下才能进行通信
    networks:
      - community
  
  redis:  
    image: redis:7.0
    container_name: redis  
    ports:  
        - "6379:6379"  
    networks:
      - community
  
  app:  
    build:  
      context: .  
      dockerfile: Dockerfile-springboot  
    ports:  
        - "8383:8383"  
    depends_on:  
      - db  
    networks:
      - community  

  nginx:  
    build:  
      context: .  
      dockerfile: Dockerfile-nginx  
    ports:  
        - "83:80"  
    depends_on:  
      - app
    networks:
      - community

#定义该项目下的容器所使用的网络
networks:  
  #定义的网络名称
  community:  
      #网络类型,桥接模式
      driver: bridge

同时,关于docker中的容器通信,详看Docker容器间通信详解

5、构建并运行

相关推荐
Java陈序员1 天前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
爱吃橘子橙子柚子2 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield3 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield3 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽3 天前
win10下运行Start Broker and Proxy报错解决
docker
舒一笑4 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData4 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256604 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h4 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔4 天前
通过 Docker 创建开发环境
docker·开发环境