docker项目部署的教程(Vue+Spingboot)
作者:我自飞扬临天下
这篇文章主要介绍了docker项目部署的教程(Vue+Spingboot),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
1.docker安装(Ubuntu)
卸载原有的docker引擎和旧版本软件包(第一次使用跳过)
# 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包: sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras # 主机上的映像、容器、卷或自定义配置文件 不会自动删除。要删除所有镜像、容器和卷,请执行以下操作: sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd # 删除源列表和密钥环 sudo rm /etc/apt/sources.list.d/docker.list sudo rm /etc/apt/keyrings/docker.asc # 卸载旧版本 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
使用存储库安装apt
#1.设置 Docker 的存储库(一行一行执行) sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # 2.安装 Docker 软件包 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 3.启动docker systemctl start docker # 4.查看是否运行,该命令为查看镜像 docker images
2.安装nginx并运行
# 拉取nginx镜像 docker pull nginx # 创建nginx容器并且运行, # -p 做宿主机与容器端口的映射 # -v 做数据挂载 # 注意(-v)后面(:)前面的html目录和nginx.conf文件需要自己创建 # (:)后面是固定的docker nginx容器目录 docker run -d\ --name nginxR\ -p 18080:18080\ -p 18081:18081\ -v /root/nginx/html:/usr/share/nginx/html\ -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf\ nginx
注:
nginx.conf配置文件指定的前端目录所在位置要与容器内的位置相对于,不要直接写相对于宿主机的位置,否则服务器访问不到
3.安装Mysql
# 拉取mysql镜像 docker pull mysql # 创建mysql容器并且运行,这里同样也要做数据挂载 # -v 做数据目录、初始化脚本(自己在该目录放置sql)、和配置文件(字符格式等配置)的挂载, # 同样也要自己创建文件目录 docker run -d\ --name mysql1.0\ -p 3306:3306\ -e TZ=Asia/Shanghai\ -e MYSQL_ROOT_PASSWORD=root1234\ -v /root/mysql/data:/var/lib/mysql\ -v /root/mysql/init:/docker-entrypoint-initdb.d\ -v /root/mysql/conf:/etc/mysql/conf.d\ mysql
之所以做数据挂载就是防止容器出现问题挂掉,那么数据也随之消失,挂载到宿主机,即使容器挂掉,在创建新容器也能保持原有的数据
注意:实际开发环境中3306端口不对外暴露,容器内自定义网络互相访问
4.构建jdk镜像
准备条件(3样东西)
- 一份 jdk.tar.gz 包
- 一份自己的 java项目jar 包
- 一份编写好的 Dockerfile 文件
拉取ubuntu镜像
docker pull ubuntu:24.04
Dockerfile
# 指定基础镜像 FROM ubuntu:24.04 #配置环境变量指定到容器内的目录(通过通过这个环境变量来引用/usr/local这个路径) ENV JAVA_URL=/usr/local # 拷贝jdk到容器内 COPY ./jdk17.tar.gz $JAVA_URL #拷贝自己的项目的jar包到容器内 COPY musicservice-0.0.1-SNAPSHOT.jar /app.jar #进入到下载了jdk的目录把他解压缩重命名java17 RUN cd $JAVA_URL && tar -zxf ./jdk17.tar.gz #配置jdk环境变量,何在本地配置环境变量是一致的 ENV JAVA_HOME=$JAVA_URL/jdk17 #添加到系统搜索路径 ENV PATH=$PATH:$JAVA_HOME/bin # 入口,java项目的启动命令 ENTRYPOINT ["java","-jar","/app.jar"]
注意:
16行的jdk17一定要与jdk17.tar.gz解压出来的文件名一致
不然报错:
executable file not found in $PATH: unknown.
Dockerfile简洁版
ubuntu、jdk、jar 三者构成springboot基本运行环境
FROM ubuntu:24.04 COPY jdk17.tar.gz /usr/local COPY my.jar /app.jar RUN cd /usr/local && tar -xf jdk17.tar.gz && rm jdk17.tar.gz && apt-get update && apt-get install -y iputils-ping ENV PATH=/usr/local/jdk-17.0.12/bin:$PATH ENTRYPOINT ["java","-jar","/app.jar"]
这里RUN多加了一个ping工具
构建java镜像
# 构建java镜像 docker build -t javajar . # 注意:末尾的点不要忽略了,javajar是自定义镜像名
创建并运行java容器
docker run -d --name javajar1.0 -p 8888:8888 javajar
5.网络配置
docker容器都是相互隔离的,要将三部分加入同一个网络,就能互相访问了
自定义网络
docker network create mynet
加入网络
docker network connect mynet nginx1.0 docker network connect mynet mysql1.0 docker network connect mynet javajar1.0
ping命令
# 如果需要进入到容器内部检查连通性,就需要ping docker exec -it javajar1.0 bash # docker中是没有ping命令的,需要自己安装 apt-get update apt-get install iputils-ping
6.注意事项
由于通过自定义网络后就可以通过容器名访问
我们springboot后端访问数据库直接用容器名访问即可
**解决:**
为了解决mysql容器ip发生变化而访问不了的问题,javajar是容器名。
nginx代理访问后端也用容器名访问即可
示例:
proxy_pass http://javajar:8888
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。