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

相关推荐
qq_312920116 分钟前
从零搭建企业级DevOps流水线
运维·devops
川石课堂软件测试27 分钟前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
一枚正在学习的小白34 分钟前
PG数据文件位置迁移
linux·运维·服务器·数据库
有谁看见我的剑了?2 小时前
k8s storageclasses nfs-provisioner 部署
docker·容器·kubernetes
忧郁的橙子.2 小时前
安装插件遇到报错时间错误导致签证失败 Errors during downloading metadata for repository ‘baseos‘:
docker
1白天的黑夜12 小时前
Linux (5)| 入门进阶:Linux 权限管理的基础规则与实践
linux·运维·服务器·centos
超龄超能程序猿3 小时前
Docker 镜像的导出和还原操作
运维·docker·容器
维尔切3 小时前
Docker 监控平台部署
运维·docker·容器·grafana·prometheus
温柔一只鬼.3 小时前
Docker快速入门——第三章Docker环境安装
运维·docker·容器