目录
1.docker部署vue完成后去访问项目,index.html为空
1.docker安装MySQL
打开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
命令 | 参数 | 含义 |
-d | 以后台方式运行 | |
-p | 3306: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文件夹中 |
-e | MYSQL_ROOT_PASSWORD=123456 | 设置MySQL初始化root用户密码为123456 |
--name | MySQL | 该实例名称为MySQL |
mysql8.0 | 以该镜像创建实例 |
到此MySQL安装完成
2.docker部署SpringBoot项目(*)
>为构建docker镜像做准备
1.打包
使用maven工具,将项目打包成一个jar包
2.下载jdk
因为下一步创建dockerfile文件的时候,我是以centos为基础镜像进行构建的 ,里面没有java环境,如果以已经存在java环境的镜像(比如:java:8-alpine)作为基础镜像进行构建,可以忽略该步骤
新建文件夹,将打包好的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
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 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/
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