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

Dockerfile介绍

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

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

Dockerfile的构成

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

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

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

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

 DockerFile的使用

在构建完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

其中docker run中的参数选项较多,docker run的具体参数用法详见Docker的安装&配置阿里云加速与常用指令

在上面的例子中,在/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项目

Dockerfile

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

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

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

使用EXPOSE指令声明开放的端口,Springboot默认启动于8080端口,如果有修改则与SpringBoot项目保持一致即可。

使用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项目

Dockerfile

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 <容器名> <镜像名>

配置文件default.conf

由于本人主要负责开发后端,对于前端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>:<后端端口>/;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值