使用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、构建并运行

相关推荐
天远API33 分钟前
零信任架构实战:基于天远运营商三要素详版V即时版构建自动化消费电子大促电商平台高价值权益秒杀与优惠券防羊毛高并发实名核验网关
运维·人工智能·架构·自动化
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_default_get_encode_buffer调用流程与实战(二十八)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频
乐维_lwops2 小时前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
番茄啊3 小时前
linux 开启xftp连接
linux·运维·服务器
IT利刃出鞘4 小时前
Docker Compose--解决修改配置后不生效的问题
运维·docker·容器
java_logo4 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
Lsetea4 小时前
Docker更新SSL证书后容器仍读旧文件:单文件挂载与目录挂载排查
运维·nginx·docker·https·ssl证书
Julien20045 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
十碗饭吃不饱5 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
好用斋5 小时前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器