本节开始正式讲如何配置docker文件并进行前后端的部署。全部操作都是在阿里云上面。vue前端和springboot接口项目文末会给出git地址。
- 在usr/local目录下面创建一个docker文件夹
$ cd /usr/local
$ mkdir docker
进入docker文件里面创建一个demo的文件夹,docker-compose的项目及配置文件都会放在这里面。
$ cd docker
$ mkdir demo
- 创建一个Dockerfile的文件,主要是对springboot项目的操作运行配置
$ cd demo
$ vi Dockerfile
vi是一个编辑命令,可以进入编辑页面进行编辑。关于vi的操作,请自行百度。
Dockerfile 内容如下:
# 将当前目录下的jar包复制到docker容器的/目录下
add zhou-0.0.1-SNAPSHOT.jar /demo.jar
# 运行过程中创建一个demo.jar文件
RUN bash -c 'touch /demo.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java","-jar","/demo.jar"]
# 指定维护者的名字
MAINTAINER zhou
Dockerfile的作用是根据一系列命令及springboot项目jar包生成镜像,在后面的运行过程中可以自动运行。zhou-0.0.1-SNAPSHOT.jar是我们后端项目的打包文件,所以这里需要将zhou-0.0.1-SNAPSHOT.jar文件复制到与Dockerfile同目录的位置。
docker-compose.yml
同样用vi docker-compose.yml
进入编辑。内容如下:
version: '3'
services:
demo:
# 指定服务使用的镜像
#image: demo
# 指定服务运行的端口
#container_name: demo
build: .
network_mode: host
depends_on:
- redis
- mysql
ports:
- 5000:8080
# 指定容器中需要挂载的文件
volumes:
- /etc/localtime:/etc/localtime
- /mydata/app/demo/logs:/var/logs
mysql:
hostname: localhost
image: mysql
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8081:8080
redis:
image: redis
container_name: redis
restart: unless-stopped
command: redis-server /etc/redis.conf # 启动redis命令
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
- ./redis/data:/data
- ./redis/redis.conf:/etc/redis.conf
ports:
- 6379:6379
nginxweb:
image: nginx
ports:
- 8082:80
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/logs:/var/log/nginx
restart: always
container_name: nginxweb
从上面可以看出,文件分别配置的springboot项目,mysql,redis,nginx等。adminer是一个数据库管理工具,可有可无。
所以此时demo里面的文件如下:
这个时候我们直接输入:
$ docker-compose up
进行部署,就是这么简单,当然第一次的话,nginxweb提示报错了。主要是nginx的配置问题。
先通过
$ docker-compose down
删除所以运行的容器。查看当前目录,可以看到多了几个文件,这些是根据上面的docker-compose.yml配置挂载的数据卷。找到nginx并进入。
找到conf/nginx.conf,因为docker只能挂载目录,不能挂载具体文件,所以该处的nginx.conf事实上是一个目录,但是我们其实需要的是一个配置文件。将它删除再重新创建成配置文件。
$ cd conf
$ rm -rf nginx.conf
$ vi nginx.conf
nginx.conf内容如下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
从include /etc/nginx/conf.d/*.conf;
可以知道在conf.d目录里面还有其他配置文件。
我们cd 进入conf.d目录,创建default.conf,内容如下:
server {
listen 80;
server_name http://服务器ip;
# rewrite ^(.*)$ https://www.vhxsl.com permanent;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api {
proxy_pass http://服务器ip:8080/api;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
最后将上节打包的前端dist里面的文件复制到nginx/html目录里面。回到demo根目录,重新运行
$ docker-compose up
这时候发现nginx可以正常部署了,但是问题又来了,抛出了数据库连接异常,这很正常,因为我们数据库都没有创建啊。demo.sql已经一起放在git项目文件里面了。用可视化的数据库管理工具连接并运行demo.sql即可以生成数据库。这边就不具体操作了,有问题的小白可以评论问。
倒入数据库后,用docker-compose down
删除容器,再重新部署安装。
特别说明docker-compose up
属于前置安装运行,就是log都会直接在当前显示,那你就没法再操作其他命令的。所以我们可以采用后台安装。
$ docker-compose up -d
好了,前后端的项目算是安装好了。以为停止和启动项目只要docker-compose up
和docker-compose down
,就是这么简单快捷。
我们在浏览器输入地址:http://ip:8082
显示如下:
git前端地址:https://gitee.com/stonezry/Vue-Admin-Demo
git接口地址:https://gitee.com/stonezry/Springboot-Admin-Demo