在开发中,频繁部署项目是日常。是不是已经厌倦了各种服务环境的配置?这里将使用 Docker 容器技术一键部署整个项目,只需编写 docker-compose.yml 和 Dockerfile 即可。Docker 你值得拥有!以下是博主自己编写的配置文件,可作参考。
1、已经打包成 jar 包的 SpringBoot 项目(假设是一个智慧校园APP的后端API服务)
2、一台装有docker的Linux服务器 (建议使用 Linux)
这里通过编写 webapi-Dockerfile 文件 (不要添加后缀名) 对 SpringBoot 项目构建一个镜像
#-------------- 构建一个 运行 后端API服务 的镜像 --------------
# 镜像仓库拉取一个基于 java8 的镜像
FROM daocloud.io/library/java:8
# 维护作者
LABEL maintainer = "specif1c"
# 创建工作目录
RUN mkdir -p /usr/local/campus
# 拷贝需要运行的jar包到镜像工作目录中
ADD ./campus-0.0.1-SNAPSHOT.jar /usr/local/campus/campus-0.0.1-SNAPSHOT.jar
# 指定程序在容器中的工作环境 (springboot 项目将在容器中的指定目录下启动)
WORKDIR /usr/local/campus
# 需要暴露的端口
EXPOSE 2022
# 执行 shell 命令
ENTRYPOINT ["java","-jar","campus-0.0.1-SNAPSHOT.jar"]
镜像仓库推荐:https://hub.daocloud.io/
文件名就叫 docker-compose.yml 无需更改。
以下为 Compose 文件的版本信息所对应的 Docker 版本
# 描述 compose 文件版本信息
version: '3'
# 定义服务
services:
xxxx: (比如以下的 webapi, ngnix等服务,哪个需要用到就写在这里)
# Java 后端API服务配置
webapi:
# 基于 webapi-Dockerfile 构建镜像
build:
context: .
dockerfile: webapi-Dockerfile
# 容器名称
container_name: campus-webapi-master
# webapi-Dockerfile 构建的镜像 (这里的镜像路径可以自定义)
image: xxx.io/campus-webapi:1.0.0
# 端口映射
ports:
- 2022:2022
# 目录挂载
volumes:
- ./docker_webapi/:/usr/local/campus/
# 环境变量
environment:
# 堆内存初始值
- JAVA_OPTS=-Xmx256M
# 生产环境运行(SpringBoot项目里面没有区分开发环境和生产环境,这里可以不写)
- spring.profiles.active=pro
# 设置服务器的默认时区
- TZ=Asia/Shanghai
# docker 启动时,服务自启
restart: always
# 容器依赖, 配置先启动选项 (填需要依赖的 services 的名字)
depends_on:
- nginx
- mysql
- redis
- rabbitmq
# nginx 服务配置
nginx:
container_name: campus-nginx-master
# 这里的镜像路径不能自定义,必须是 hub.daocloud 仓库的镜像路径 (下面镜像同理)
image: daocloud.io/library/nginx:latest
# docker 启动时,服务自启
restart: always
# 映射端口
ports:
- 80:80
# 目录挂载
volumes:
- ./docker_nginx/conf.d:/etc/nginx/conf.d
- /tmp/logs:/var/log/nginx
注意此版本 ngnix 的 conf.d 文件夹下没有 default.conf, 所有访问 80 显示不了 Welcome to nginx!, 需要自己在挂载目录
./docker_nginx/conf.d 加一个 default.conf, 可以到我这篇博客中去复制粘贴:https://blog.csdn.net/haduwi/article/details/115273263
# MySQL 服务配置
mysql:
container_name: campus-mysql-master
image: daocloud.io/library/mysql:5.7
# 环境变量
environment:
# 数据库名
MYSQL_DATABASE: campus
# 数据库密码
MYSQL_ROOT_PASSWORD: xxxx
TZ: Asia/Shanghai
# 覆盖容器启动后默认执行的命令
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
# 同步本地时间/
- /etc/localtime:/etc/localtime:ro
- ./docker_mysql/conf:/etc/mysql/conf.d
- ./docker_mysql/data:/var/lib/mysql
# 将 ./init 映射到 mysql 容器的 /docker-entrypoint-initdb.d/ 目录,./init 里的sql脚本就会被自动执行了。
- ./init:/docker-entrypoint-initdb.d/
restart: always
# redis 服务配置
redis:
container_name: campus-redis-master
image: daocloud.io/library/redis:2.8.9
restart: always
ports:
- 6379:6379
volumes:
- ./docker_redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
- ./docker_redis/data:/data:rw
# 初始化设置密码, 开启AOF持久化
command: redis-server --requirepass xxxx --appendonly yes
# rabbitmq 服务配置
rabbitmq:
image: daocloud.io/library/rabbitmq:3.8-management
ports:
- 5672:5672
- 15672:15672
container_name: campus-rabbitmq-master
environment:
TZ: Asia/Shanghai
# rabbitmq的初始用户名
RABBITMQ_DEFAULT_USER: xxxxx
# rabbitmq的初始密码
RABBITMQ_DEFAULT_PASS: xxxxx
volumes:
- ./docker_rabbit/data:/var/lib/rabbitmq
- ./docker_rabbit/log:/var/log/rabbitmq/log
注意:springboot 项目打包之前,记得把 yml 配置文件里面连接中间件的host需要改成容器名, 比如连接 redis 如下:
campus-docker.zip 上传至 Linux 服务器根目录下即可:
解压命令:unzip campus-docker.zip
, cd 进入解压后的目录:cd campus-docker
, 确保文件没有少。
① 构建并启动服务命令
docker-compose up -d # 之前没使用过docker,由于需要联网下载对应镜像,构建过程会稍微慢一点,耐心等待~
docker ps