在Docker部署SpringBoot + VUE

记录一次实训项目的部署,需要在Docker上运行SpringBoot项目。

这是需要用到的其他镜像

  • MySQl
  • Redis
  • RabbitMQ
  • Java8

如果对数据库、中间键版本没有要求,直接pull最新的就行了

JDK不用先自己pull,当把jar包做成镜像的时候会自动帮我们拉取。

 

  • MySQL

1.拉取mysql

docker pull mysql
# 查看版本
docker image inspect mysql:latest | grep -i version

2.验证

docker images

3.运行

docker run --name mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql

--name mysql给容器取个名字叫mysql

-p 3306:3306 容器的3306端口绑定到主机的3306端口

第一个数字是宿主机的端口,第二个是容器的端口

eg -p 8080:80 将容器的80端口映射到宿主机的8080端口,外部访问用的是8080

-e MYSQL\_ROOT\_PASSWORD=123456 设置root的密码为123456

-d 后台运行

最后那个mysql指的是镜像的名称

4.查看

docker ps

 

  • Redis

docker pull redis
docker run -p 6379:6379 -d redis:latest redis-server

 

  • RabbitMQ

docker pull rabbitmq:management

如果不加":management"是无法通过网页去访问的

docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management

 

查看正在运行的镜像

docker ps

查看安装好了的镜像(两个都行)

docker images
docker image ls

删除一个镜像(docker images可获取IMAGE ID)

docker rmi [IMAGE ID]

进入一个镜像(docker ps可获取CONTAINER ID)

docker exec -it [CONTAINER ID] /bin/bash
  • -i 交互操作
  • -t 终端

如果用docker attach进入容器,退出时容器也会停止运行。

使用docker ps -a获得停止运行容器的ID,然后docker start CONTAINER ID 即可

 

 

  • 制作jar的镜像

先在IDEA把SpringBoot工程打成jar包,因为我本地没有Docker,Docker在远程服务器且是Ubuntu。

所有先把jar传上去,可以利用ssh

scp /path/filename username@servername:/path

/path/filename是你本地的路径,也是你要上传的文件路径

/path是你远程服务器的文件路径,会把你上传的文件放到这里

servername可以填ip

username角色

eg

scp /home/springboot.jar root@8.8.8.8:/home

然后在jar文件同级目录下新键一个叫Dockerfile的文件,最好新建一个文件夹,把jar包和Dockerfile放在一起。

Dockerfile的内容:

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER lin <lin@gmail.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
# demo-0.0.1-SNAPSHOT.jar这里需要改成你jar包的名字
ADD demo-0.0.1-SNAPSHOT.jar app.jar 
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

进入文件夹执行(最后面有个"."点!)

docker build -t springbootdemo4docker .

-t 可以设置镜像名

 

这个时候java8也自动帮你拉取到docker了

 

最后就是运行镜像了

docker run -d -p 8080:8080 springbootdemo4docker

 

VUE的部署

  1. 先下载nginx
    docker pull nginx

     

  2. 打包vue,生成dist文件夹
     

    npm install
    npm run build

     

  3. 新建一个叫 default.conf的文件

    server {
        listen       8000;
        server_name  localhost; # 修改为docker服务宿主机的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;
        }
    }

     

  4. 新建一个叫Dockerfile的文件

    
    FROM nginx
    
    # 作者名
    MAINTAINER lin
    
    # 删除容器里的default.conf文件
    RUN rm /etc/nginx/conf.d/default.conf
    
    # 把我们刚刚新建的default.conf放入容器中
    ADD default.conf /etc/nginx/conf.d/
    
    # 把打包好的Vue放入指定文件夹
    COPY dist/ /usr/share/nginx/html/

     

  5. 把dist/、default.conf、Dockerfile放在同一文件夹下面,执行

    docker build -t vue-image .
    # 因为我把dist文件夹压缩成dist.tar.xz上传到远端的,然后在远端做成镜像。
    # 所以需要解压。
    # tar  Jxvf  ***.tar.xz
    # eg: tar  Jxvf  dist.tar.xz

    注意最后面有个点
    -t 指定生成镜像的名字


  6. 运行

    docker run -d -p 80:8000 --name mms vue-image

 

 

如果服务器是阿里云,域名在腾讯云买的。

https://blog.csdn.net/Edviv/article/details/106315051

 

更新一个踩到的坑

如果配置文件写的是localhost,启动springboot项目是会出错的,因为localhost并不是指宿主机,而是指容器。

所以采用host的网络方式将容器与宿主机共用一个Network Namespace,这样容器内localhost就是宿主机的localhost

#执行运行命令前,若springboot项目需要连接数据库,请确保数据库容器已经在运行
docker run --net=host -p 8080:8080 -di springboot

#以 --net=host 方式启动的项目 端口号必须一致,因为docker会自动给每个容器分配ip,但是项目里配置的mysql地址是localhost,在容器内连接localhost是连接容器本身而不是宿主机的localhost,所以一直找不到mysql。所以采用host的网络方式将容器与宿主机共用一个Network Namespace,这样容器内localhost就是宿主机的localhost

 

# 导出容器
# springboot.img 导出镜像的名字 自己定
# 容器ID
docker export -o springboot.img 7ea04cde7d54
# 把远程导出的文件下载到本地
scp -r username@172.xx.xx.xx:/Dailybuild/remote_dir(远程目录) /var/www/local_dir(本地目录)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值