用docker部署项目(SpringBoot+Vue+MySQL)

目录

1.docker安装MySQL

2.docker部署SpringBoot项目(*)

>为构建docker镜像做准备

1.打包

2.下载jdk

3.准备Dockerfile文件

 4.上传

>开始创建docker镜像

>启动创建的镜像文件

>注意:

1.连接MySQL数据库,与MySQL容器进行通信

3.docker部署vue项目(*)

>准备构建docker镜像

1. 打包vue项目

2.构建Dockerfile文件

3.上传服务器

4.构建新镜像

5.启动镜像

>注意

1.docker部署vue完成后去访问项目,index.html为空

2.项目部署后, proxy好像失效了


1.docker安装MySQL

打开docker hub官网

docker hub官网网址

在上方的搜索框中搜索mysql,在tags中找到所需要的mysql版本

 回到虚拟机,执行命令来拉去MySQL版本镜像

拉取最新版本

sudo docker pull mysql

拉取指定版本的MySQL

sudo docker pull mysql:8.0

 镜像拉取完成后,根据拉取的镜像去创建MySQL实例

 sudo docker run -d -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name  mysql mysql:8.0

docker各参数的含义
命令参数含义
-d以后台方式运行
-p3306:3306把容器的3306端口映射到宿主机的3306端口上
-v/mydata/mysql/log:/var/log/mysql将容器中的日志文件夹/var/log/mysql挂载到主机对应的/mydata/mysql文件夹中

-v

/mydata/mysql/data:/var/lib/mysql将容器中的数据文件夹/var/lib/mysql挂载到主机对应的/mydata/mysql/data文件夹中
-v/mydata/mysql/conf:/etc/mysql将容器的配置文件夹/etc/mysql挂载到主机对应的/mydata/mysql/conf文件夹中
-eMYSQL_ROOT_PASSWORD=123456设置MySQL初始化root用户密码为123456
--nameMySQL该实例名称为MySQL
mysql8.0以该镜像创建实例

到此MySQL安装完成

2.docker部署SpringBoot项目(*)

>为构建docker镜像做准备

1.打包

使用maven工具,将项目打包成一个jar包

2.下载jdk

        因为下一步创建dockerfile文件的时候,我是以centos为基础镜像进行构建的 ,里面没有java环境,如果以已经存在java环境的镜像(比如:java:8-alpine)作为基础镜像进行构建,可以忽略该步骤

        jdk8下载链接

        新建文件夹,将打包好的jar包和下载的jdk放在 同一文件夹中

3.准备Dockerfile文件

在新建的文件夹内,新建dockerfile文件

dockerfile文件具体内容具体如下

FROM centos:7

ENV JAVA_DIR=/user/local

COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./time-1.0.jar /tmp/time-1.0.jar

RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_361 ./java8

ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

EXPOSE 8080

ENTRYPOINT java -jar /tmp/time-1.0.jar
dockerfile文件详解

FROM centos:7

初始化阶段以centos7作为基础镜像

COPY ./jdk8.tar.gz $JAVA_DIR/

COPY ./time-1.0.jar /tmp/time-1.0.jar

文件拷贝,拷贝当前文件夹下的jdk和打包的jar包到镜像中

RUN cd $JAVA_DIR \

&& tar -xf ./jdk8.tar.gz \

&& mv ./jdk1.8.0_361 ./java8

安装jdk(!!非必要,如果用已经存在java环境的基础镜像进行构建则不需要拷贝,安装jdk)

ENV JAVA_HOME=$JAVA_DIR/java8

ENV PATH=$PATH:$JAVA_HOME/bin

设置java的环境变量

EXPOSE 8080

docker容器在运行的时候监听的端口

ENTRYPOINT java -jar /tmp/time-1.0.jar

容器在启动的时候去启动我们的项目

 4.上传

将新建的文件夹上传至服务器

>开始创建docker镜像

在服务器上进入新上传的文件夹内,执行以下命令

docker build -t <新建镜像的名称> .

注意:命令中最后的   代表从当前文件夹下的dockerfile文件进行构建镜像

 

>启动创建的镜像文件

根据自己项目需求去启动镜像

eg:docker run --name time -d -p 8080:8080 time

 至此,docker部署java项目就完成了

>注意:

1.连接MySQL数据库,与MySQL容器进行通信

        项目部署成功了,但是镜像中并没有数据库,数据库和java项目并不在一个容器中,项目该怎么访问数据库?

        因为项目简单,需要的容器并不多,可以在运行容器时使用 --link 参数,来实现docker容器之间的相互通信(可以参考以下文章)

docker容器之间的项目通信

docker run --name time -d -p 8080:8080 --link mysql:mysql  time

修改 项目中application.yml的mysql连接地址

3.docker部署vue项目(*)

>准备构建docker镜像

1. 打包vue项目

进去项目文件夹,运行如下命令,将项目打包成dist

npm run build

2.构建Dockerfile文件

FROM nginx

COPY dist/  /usr/share/nginx/html/
dockerfile文件详解
FROM nginx以nginx为基础镜像进行构建
COPY dist/  /usr/share/nginx/html/将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面

创建新文件夹,将打包好的dist文件夹和dockerfile文件放入该文件夹中

3.上传服务器

把新建的文件夹上传至服务器,并进入该文件夹 

4.构建新镜像

docker build -t <镜像名称> .

 注意:命令中最后的   代表从当前文件夹下的dockerfile文件进行构建镜像

5.启动镜像

docker run --name timevuetest -d -p 80:7070 timevue1

至此,vue项目制作并运行完成

>注意

1.docker部署vue完成后去访问项目,index.html为空

 解决办法:

        修改config/index.html中build中的assetsPublicPath,改为当前目录    ' ./ ',而不是根目录  ' / '

2.项目部署后, proxy好像失效了

        编译打包后,前端页面成为了单独的静态资源,代理服务器devServer.proxy被抽离出去了。也就是说,devServer.proxy不会一起打包到dist文件夹下,所以相当于我们没有配置代理服务器。

解决办法:

        因为项目打包镜像的时候用的是nginx作为基础镜像,所以只需要修改nginx的配置文件即可。

1.进入vue项目容器

docker exec -it <vue项目容器名称> bash

2.安装vim

apt-get install -y vim

yum install -y vim

3.修改nginx配置文件

location ^~/api/ {
     proxy_pass http://xxx.xxx.xxx.xxx:8889/api/;
 }

        如果在容器中安装vim出现错误,在经历过 换源,apt-get update 等一系列操作之后仍不能正确的安装,可以将nginx配置文件先编写好,在编写Dockerfile文件时,通过COPY指令,对nginx的配置文件进行替换

 COPY nginx.conf /etc/nginx/nginx.conf

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值