Jonsson Yan' Blog

怕什么真理无穷,进一步有进一步的欢喜。

0%

Docker上部署前后端分离项目

拉取项目

前端项目地址:https://github.com/jonssonyan/authority-ui

后端项目地址: https://github.com/jonssonyan/authority

通过 Git 把前后端源码拉去到本地

打包项目

前端使用npm run build打包,最终打包好的文件夹在 dist 文件夹下,后端可以通过 Maven 打包。

上传文件至服务器

在根目录新建 myDate 文件夹,里面存放上传的文件。

如图,authority.jar 是后端 jar 包,dist 是前端文件

安装 Docker

1
2
3
4
5
yum install -y yum-utils # 安装 yum-utils 软件包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 设置稳定的存储库(使用阿里云镜像)
yum makecache fast # 更新缓存
yum install docker-ce docker-ce-cli containerd.io # 安装最新版本的 Docker Engine 和容器,或转到下一步以安装特定版本
systemctl start docker # 启动 Docker

设置Docker国内镜像

Docker 默认的镜像源于国内而言是有些慢,所以可以配置一下国内的镜像源,提高一下 pull 速度

阿里云镜像服务参考:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

创建文件

1
2
mkdir -p /etc/docker # 创建目录
vi /etc/docker/daemon.json # 创建一个镜像配置文件

配置文件中添加163镜像

1
2
3
{
"registry-mirrors":["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}

重新加载文件并重启 docker

1
2
3
systemctl daemon-reload // 重新加载文件
systemctl restart docker // 重启docker
systemctl enable docker // 开机自启

安装 MySQL

系统使用的是 MySQL 数据库,所以要在 Docker 中安装 MySQL

1
2
docker pull mysql:5.7.31 # 拉取 Mysql 5.7.31 镜像
docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31 # 运行 Mysql 5.7.31

参数解释:

  • -d: 后台运行容器,并返回容器 ID
  • –name: 为容器指定一个名称
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -v: 绑定一个卷,容器的 /var/lib/mysql 映射到 主机的目录 /data/mysql
  • -e MYSQL_ROOT_PASSWORD=123456: 设置环境变量,密码设置为 123456
  • mysql:5.7.31:使用镜像 mysql:5.7.31

打包后端并运行为容器

在 jar 包的同一级文件夹下新建 Dockerfile 文件,文件内容如下

1
2
3
4
5
FROM java:8
VOLUME /tmp
ADD authority.jar authority.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","/authority.jar"]

参数解释

  • from java:8 拉取一个 jdk 为 1.8 的 docker image
  • ADD jar包添加至容器中
  • expose 该容器暴露的端口是多少,就是 jar 在容器中以多少端口运行
  • ENTRYPOINT 容器启动之后执行的命令,java -jar /authority.jar 即启动 jar
1
2
docker build -t authority . # 打包镜像
docker run -d -p 8888:8888 --name authority-8888 authority # 运行容器

打包前端并运行为容器

在前端文件夹 dist 的同一级文件夹下新建 Dockerfile 文件,文件内容如下

1
2
3
FROM nginx:latest
COPY ./dist /usr/share/nginx/html/
EXPOSE 80
1
2
docker build -t authority-ui . # 打包镜像
docker run -d -p 80:80 --name authority-ui-80 authority-ui # 运行容器

最终效果

  • authority-ui–80 是前端容器
  • authority-8888 是后端容器
  • myMysql 是数据库容器

打开浏览器访问服务器 IP 即可