docker-compose部署Springboot
1.环境准备
目录构建
此目录结构用于docker-compose
执行挂载
├── mysql
│ ├── data
│ └── init.sql
├── redis
│ ├── data
│ └── redis.conf
├── nginx
│ ├── config
│ │ ├── default.conf # 默认的配置文件
│ └── app # 存放前端打包后的文件
├── java
│ ├── Dockerfile # 构建java容器
│ └── app.jar
└── LICENSE
default.conf
server {
listen 80;
server_name localhost;
location / {
root /server;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://java-container:8096; # 此处用容器名称代替IP地址
rewrite ^.api/?(.*)$ /$1 break;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
Dockerfile
FROM openjdk:8-jdk
MAINTAINER author
RUN mkdir -p /home/server
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /home/server
# 端口
ENV API_PORT=8096
#启动自行加载
ENV PARAMS="--server.port=${API_PORT} --spring.profiles.active=docker,auth,framework "
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar /home/server/engine-api.jar ${PARAMS}"]
2.docker-compose
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: "you-password"
TZ: "Asia/Shanghai"
# ports:
# - "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql # mysql数据存储目录挂载
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql #初始化mysql容器时sql脚本
command:
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-authentication-plugin=mysql_native_password
networks:
- my-network
redis:
image: redis:3.2
container_name: redis-container
# ports:
# - "6379:6379"
command: redis-server --requirepass 'you-password'
volumes:
- ./redis/data:/data
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf # 映射 Redis 配置文件
networks:
- my-network
nginx:
image: nginx:1.22
container_name: nginx-container
ports:
- "80:80"
volumes:
- ./nginx/config/:/etc/nginx/conf.d
- ./nginx/app:/server
networks:
- my-network
java:
container_name: java-container
build:
context: ./java
dockerfile: Dockerfile
volumes:
- ./java:/home/server
networks:
- my-network
networks:
my-network:
driver: bridge
注意:java配置文件中的mysql、redis连接地址修改为对应容器名称
每次jar包版本更新之后,只需要替换./java
目录下的jar包,然后重启java-container
容器
docker-compose restart java-container
同理nginx
配置文件更新之后,只需要重启nginx-container
容器
docker-compose restart nginx-container
docker-compose常用命令
-
docker-compose up
:启动容器组,根据docker-compose.yml
文件中的配置创建和启动容器。 -
docker-compose down
:停止并移除容器组,包括容器、网络和卷等相关资源。 -
docker-compose ps
:显示当前运行的容器组中的容器状态。 -
docker-compose logs
:显示容器组中的容器日志。 -
docker-compose exec
:在运行的容器中执行命令。 -
docker-compose build
:根据docker-compose.yml
文件中的配置构建镜像。 -
docker-compose images
:列出容器组中使用的镜像。 -
docker-compose pull
:拉取在docker-compose.yml
文件中定义的服务所使用的镜像。 -
docker-compose restart
:重启容器组中的服务。 -
docker-compose stop
:停止容器组中的服务。 -
docker-compose pause
:暂停容器组中的服务。 -
docker-compose unpause
:取消暂停容器组中的服务。 -
docker-compose down -v
:停止并移除容器组,并移除所有相关的卷。 -
docker-compose down --rmi all
会停止容器并删除容器相关资源,还会删除与服务关联的所有镜像。 -
docker-compose config
:验证并显示合并后的 Compose 文件。