怎么使用dockercompose搭建nginx+mysql+redis+springboot项目

请提前安装docker和docker-compose并自行配置镜像加速。

A.docker-compose.yml文件

version: "
3"

services:
nginx: # 服务名称,用户自定义
image: nginx:latest # 镜像版本
ports:
- 80:80 # 暴露端口
volumes: # 挂载
- /root/nginx/html:/usr/share/nginx/html
- /root/nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true # 这个必须要,解决nginx的文件调用的权限问题
mysql:
image: mysql:5.7.27
ports:
- 3306:3306
environment: # 指定用户root的密码
- MYSQL_ROOT_PASSWORD=
redis:
ports:
- 6379:6379
image: redis:latest
vueblog:
image: vueblog:latest
build: . # 表示以当前目录下的Dockerfile开始构建镜像
ports:
- 81:81
depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
- mysql
- redis


nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:latest
volumes:
# 需要添加mysql8的插件
#- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/
# 把日志文件映射出来
- /root/nacos1:/home/nacos/logs
# 把配置文件映射出来
- /root/nacos1/custom.properties:/home/nacos/init.d/custom.properties

environment: # 设置环境变量,相当于docker run命令中的-e
- JVM_XMS=512m
- JVM_XMX=512m
- JVM_XMN=128m
#- MODE=standalone #单机版
ports:
- "
8848:8848"

env_file:
# 集群配置文件
- /root/nacos1/nacos-hostname.env
restart: always
depends_on:
- mysql

B.springboot配置(自己的项目)

配置中的mysql和redis配置都是用的服务名而不是ip地址

server:
port: 81


spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
profiles:
active: dev
# mysql 配置
datasource:
url: jdbc:mysql://mysql:3306/blog4?serverTimezone=GMT%2B8&
useUnicode=true&
characterEncoding=UTF-8
username:
password:
# schema: classpath:springbootsecurityauth.sql
sql-script-encoding: utf-8
initialization-mode: always
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
initialSize: 1
minIdle: 3
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
validationQuery: select '
x'

testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'
wall'
用于防火墙 ,slf4j
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;
druid.stat.slowSqlMillis=5000

redis:
database: 6
host: redis
port: 6379
timeout: 5000s # 连接超时时长(毫秒)
jedis:
pool:
max-active: 20 #连接池最大连接数(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
max-wait: -1s #连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 #连接池中的最小空闲连接
password: #rootroot

C.Dockerfile文件

FROM java:8

使用DockerCompose快速搭建Nginx+MySQL+Redis+SpringBoot项目,一键构建高效开发环境


EXPOSE 81
ADD vueblog.jar app.jar
RUN bash -c '
touch /app.jar'

ENTRYPOINT ["
java"
, "
-jar"
, "
/app.jar"
]

D.打包springboot项目并命名为配置中的服务名

E.在对应目录下创建文件夹或文件

- /root/nginx/html - /root/nginx/nginx.conf

#user root;

worker_processes 1;

events {
worker_connections 1024;

}
http {
include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;


#这里配置nacos的ip:端口,因为nginx和nacos在同一个网络下,这里可以用服务名访问
upstream nacos {
server nacos1:8848 weight=1 max_fails=2 fail_timeout=10s;

#server nacos2:8848 weight=1 max_fails=2 fail_timeout=10s;

#server nacos3:8848 weight=1 max_fails=2 fail_timeout=10s;

}

server {
listen 80;

server_name localhost;


location / {
root /usr/share/nginx/html/front;

try_files $uri $uri/ /index.html last;
# 别忘了这个哈
index index.html index.htm;

}

location /admin {
alias /usr/share/nginx/html/admin;

expires 1d;

index index.html;

autoindex on;

}

location /nacos {
proxy_pass http://nacos;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

add_header X-Cache $upstream_cache_status;

add_header Cache-Control no-cache;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {
root html;

}
}
}

- /root/nacos1 # 把配置文件映射出来 - /root/nacos1/custom.properties

#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*

# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true

- /root/nacos1/nacos-hostname.env

配置nacos的数据库信息

#nacos dev env
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=
MYSQL_SERVICE_PASSWORD=
JVM_XMS=512m
JVM_XMX=512m
JVM_XMN=256m
JVM_MS=64m
JVM_MMS=128m

最后的目录结构

先把mysql实例运行起来(千万不要直接docker-compose up -d把所有的实例都运行起来)docker-compose up -d mysql

F. 由于我的nacos是后期添加的,所以可以提前在mysql容器中添加好nacos数据库再启动(如果你没有数据库请提前添加)

启动

docker-compose up

停止

docker-compose down

一、DockerCompose简介
DockerCompose是Docker官方推出的一个容器编排工具,可以快速定义、运行多个容器。使用DockerCompose可以极大地简化容器编排流程,帮助开发者快速搭建开发环境。
二、安装DockerCompose
在使用DockerCompose前,需要先安装Docker和DockerCompose。安装DockerCompose可以通过以下命令:
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
三、搭建MySQL容器
定义一个mysql服务,在docker-compose.yaml中添加一下内容:
version: '3.1'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- 3306:3306
volumes:
- /data/mysql:/var/lib/mysql
四、搭建Redis容器
定义一个redis服务,在docker-compose.yaml中添加以下内容:
version: '3.1'
services:
redis:
image: redis:3.2
ports:
- 6379:6379
volumes:
- /data/redis:/data
五、搭建Nginx容器
定义一个Nginx服务,在docker-compose.yaml文件中添加以下内容:
version: '3.1'
services:
nginx:
image: nginx:1.19-alpine
ports:
- 80:80
- 443:443
volumes:
- /data/nginx/nginx.conf:/etc/nginx/nginx.conf
- /data/nginx/log:/var/log/nginx
- /data/nginx/www:/var/www
六、搭建Spring Boot容器
定义一个Spring Boot服务,在docker-compose.yaml文件中添加以下内容:
version: '3.1'
services:
app:
build: .
image: springboot-app:latest
ports:
- 8080:8080
volumes:
- .:/app
七、启动DockerCompose
在完成以上的配置后,我们可以使用以下命令启动DockerCompose:
docker-compose up
文章结尾
使用DockerCompose快速搭建Nginx+MySQL+Redis+SpringBoot项目,搭建起高效的开发环境,可以极大地提高开发效率和质量。希望本文能够帮助大家理解DockerCompose的使用,更加高效地搭建容器编排环境。