环境准备
该 We 项目是自己的一个开源项目,先通过 Docker-Conpose 这个技术,来对该 Web 项目进行一键配置环境及安装部署项目。需要 Docker-Conpose 环境,在此不进行描述。
web 环境要求
- Redis
- RabbitMQ
- Mysql
- Java
目录结构
Mysql 环境配置
通过 DockerFile 来配置我们的 MySQL 环境,并且通过 shell 脚本来自动创建数据库和导入数据等操作。在此参考该该博客的技术知识。
pjqdyd 博客地址
- createDB.sql
编写创建库的SQL脚本和进入数据库
create database `notest` character set utf8mb4 collate utf8mb4_general_ci;
USE `notest`;
- notest.sql
数据库表结构语句及数据。直接通过Navicat导出的SQL数据
- executeSql.sh
编写 shell 脚本
mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF
source $WORK_PATH/$FILE_0;
source $WORK_PATH/$FILE_1;
- Dockerfile
Dockerfile 文件的编写
#指定基础镜像,在其上进行定制
FROM mysql:5.7.29
#维护者信息
MAINTAINER Eternal <1125138343@qq.com>
#定义工作目录变量
ENV WORK_PATH /usr/local/work
#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
#定义要执行的sql文件名
ENV FILE_0 createDB.sql
ENV FILE_1 notest.sql
#定义要执行的shell文件名
ENV CREATE_DATA_SHELL executeSql.sh
#创建工作文件目录
RUN mkdir -p $WORK_PATH
#把sql文件复制到工作目录下
COPY ./$FILE_0 $WORK_PATH/
COPY ./$FILE_1 $WORK_PATH/
#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY ./$CREATE_DATA_SHELL $AUTO_RUN_DIR/
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$CREATE_DATA_SHELL
#RUN mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF && source $WORK_PATH/$FILE_0 && source $WORK_PATH/$FILE_1
Redis 环境配置
- redis.conf
修改 redis.conf 文件,配置 Redis 远程访问和密码
- Dockerfile
Dockerfile 文件的编写
FROM redis:5.0.7
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
web 环境配置
- ROOT.jar
添加 jar 至 docker/web 目录下
- Dockerfile
Dockerfile 文件的编写
#指定基础镜像,在其上进行定制
FROM openjdk:8-jdk-alpine
#维护者信息
MAINTAINER Eternal <1125138343@qq.com>
#这里的 /log 目录就会在运行时自动挂载为匿名卷,任何向 /log 中写入的信息都不会记录进容器存储层
#VOLUME /log
ADD ROOT.jar app.jar
EXPOSE 83
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-jar","/app.jar","--spring.profiles.active=docker","> /log/app.log"]
docker-compose.yml
docker-compose.yml 文件编写
version: '3.7'
services:
mysql:
container_name: notest_mysql
build: ./sql
environment:
MYSQL_ROOT_PASSWORD: "123456"
ports:
- "3306:3306"
volumes:
- mysql:/var/lib/mysql
redis:
container_name: notest_redis
build: ./redis
ports:
- "6379:6379"
volumes:
- redis:/data
rabbitmq:
container_name: notest_rabbitmq
image: rabbitmq:3.7-management
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
restart: always
ports:
- "15672:15672"
- "5672:5672"
volumes:
- rabbitmq:/var/lib/rabbitmq
web:
container_name: notest_web
restart: always
build: ./web
ports:
- "83:83"
links:
- mysql
- redis
- rabbitmq
depends_on:
- mysql
- rabbitmq
- redis
environment:
MYSQLIP: mysql
REDISIP: redis
rabbitmq: rabbitmq
volumes:
mysql:
rabbitmq:
redis:
Linux 环境部署 项目
- 把 docker 目录上传至 Linux 目录下。
如:/home/docker/notest
2. 进入目录
cd /home/docker/notest
[root@localhost notest]# pwd
/home/docker/notest
[root@localhost notest]# ls
docker-compose.yml redis sql web
- 编译 dockercompose 文件
docker-compose up --no-start
- 启动项目
docker-compose start
- 查看web实时日志
docker-compose logs -f web
- 停掉 web 项目
docker-compose stop
- 启动 web 项目
docker-compose start
- 停掉并删除 web 容器和卷数据
docker-compose down -v