使用Dockefile+自动部署脚本快速部署开发环境(MySQL+SpringBoot+Vue)

Dockerfile介绍

DockerFile是Docker用于支持快速构建自定义镜像的一种文本文件,使用一种自带的语法规范。DockerFile的详细规范详见DockerFile最佳实践官方文档

构建Dockerfile时,需要新建名为Dockerfile的文本类型文件(无后缀),Docker默认仅能支持识别名为Dockerfile的文件,一个目录下只能有一个Dockerfile文件。

以下为后续部署时会用到的常用命令:

  • FROM:定制镜像的基础镜像。一般来说,定制镜像会基于某种官方镜像进行修改,比如以Nginx镜像为基础,定制用于部署前端项目的镜像。
  • RUN:构建镜像时执行的命令。
  • COPY:将主机上的某个文件复制到镜像中。用法为COPY <SRC> <DST>,前后分别指源路径与目标路径。
  • ENTRYPOINT:配置容器启动后执行的命令。
  • EXPOSE:声明端口。

以下为Dockerfile支持的其他命令用法:

  • ADD:与COPY用法类似,会自动解压。
  • CMD:在运行时执行命令。
  • ENV:定义环境变量。
  • ARG:定义只在构建时有效的环境变量。
  • VOLUME:定义匿名数据卷。
  • WORKDIR:指定工作目录。
  • USER:用于指定执行命令的用户和用户组。
  • HELTHCHECK:用于指定某个程序或指令来监控容器的运行状态。
  • ONBUILD:用于延迟构建命令的执行,即仅在镜像被引用(FROM)时才会被执行。

在构建完Dockerfile后,使用如下命令构建镜像:

# -t用于指定构建镜像的名字 # 最后的 . 为上下文路径 docker build -t <IMAGE NAME> .

使用指令时需注意:

指令最后的小数点为上下文路径,Docker构建时需要指定目录,将目录下的文件一起打包给docker引擎使用,小数点即为指定Dockerfile所在目录。“."不能省略

指令build执行时所在路径必须与Dockerfile在同一路径下。

Dockerfile的同目录下最好不要有和该镜像无关的文件。

使用Docker部署MySQL

MySQL的部署相对比较简单,官方提供了完整的MySQL镜像,因此无需使用Dockerfile进行编辑,因此只需要执行如下指令即可:

docker pull mysql docker run -d -p <主机启动mysql端口号>:3306 -v <主机中数据存放路径>:/var/lib/mysql -v <mysql配置文件路径>:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=<密码> --name <容器名> mysql

在上面的例子中,在/root目录下创建了mysql文件夹,并在该文件夹中分别创建了/root/mysql/data文件夹用于存放数据,/root/mysql/conf文件作为mysql的配置文件。

首先拉取官方提供的mysql镜像。

-d指定进程将在后台运行。

-p指定mysql服务所对应的主机端口,在容器中,mysql默认启动于3306端口,如果主机3306端口被占用或者想将mysql部署于其他端口,则直接在run指令中修改映射的主机端口即可。

-v将容器路径与主机路径进行映射,mysql作为持久化数据库,需要将数据存放在主机中。如果不建立映射的话,如果mysql容器异常终止,则数据也会丢失。因此建立映射后,重启服务后数据也不会随容器终止而消失。

同理,通过-v建立映射也可以将本地的mysql配置文件映射到容器中。

-e用于指定mysql服务的管理员密码。该步骤不可省略,运行mysql容器必须在run指令中设置密码,否则容器无法正常启动。

进行以上步骤后,mysql服务则通过docker正常启动了。后续为了避免重复输入指定,可以编写脚本,便于重启mysql服务。

#!/bin/bash docker kill mysqlContainer docker rm mysqlContainer docker run -d -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysqlContainer mysql

使用Dockerfile部署SpringBoot项目

FROM openjdk:11 COPY *.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]

构建SpringBoot所需镜像,首先需要依赖于java环境。在Docker中,推荐使用openjdk作为java环境镜像,通过tag指定jdk版本。

使用COPY指令将当前目录下打包好的jar包复制到容器中的根目录下。

使用ENTRYPOINT指令声明在容器启动后需要执行的指令。在本镜像中设置启动后自动运行打包好的jar包。

docker build -t <镜像名> . docker run -d -p <主机端口号>:<容器中项目运行的端口号> -v <主机路径>:<容器中路径> --name <容器名> <镜像名>

注意:需将项目jar包与Dockerfile放在同目录下,并在该目录下执行指令。

通过-p可以修改SpringBoot项目所启动的端口号。通过这种方式可以避免在项目开发时修改启动端口,可以在部署时再进行分配,更为灵活。

如果需要的话,可以通过-v指令建立映射,例如项目中包含上传并保存文件到服务器的需求,此时可以将主机的目录与容器中目录建立映射,防止容器终止后数据丢失。

可以添加"-e TZ="Asia/Shanghai"指定设置容器内时区。如果项目中有定时运行的功能则需要将时区与当前地区设置一致。

#!/bin/bash docker kill <容器名> docker rm <容器名> docker rmi <镜像名> docker build -t <镜像名> . docker run -d -p <主机端口号>:<容器中项目运行的端口号> -v <主机路径>:<容器中路径> --name <容器名> <镜像名>

在项目开发中,需要随时部署最新版本,因此可以使用如上脚本保存指令,通过脚本随时部署新项目。只需要将jar包更新为新版本,然后运行脚本即可。

使用Dockerfile部署Vue项目

FROM nginx COPY <本地nginx配置文件> /etc/nginx/conf.d/default.conf COPY dist/ /usr/share/nginx/html/

注意:需将vue项目打包的dist文件夹与当前Dockerfile放在同一目录下,如有配置文件则也需要放到该目录下。

#!/bin/bash docker kill <容器名> docker rm <容器名> docker rmi <镜像名> docker build -t <镜像名> . docker run -d -p <主机端口>:8080 --name <容器名> <镜像名>

由于本人主要负责开发后端,对于前端vue项目仅仅为入门水平,对于nginx配置不太了解,这里只放上曾经项目中的配置文件,仅供参考。

server { listen <项目启动端口>; server_name <服务器公网ip>; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /api{ proxy_pass http://<服务器公网ip>:<后端端口>/; } }

原文链接:https://blog.csdn.net/hhh078/article/details/119734773

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享