在本地windows中利用wsl2部署docker应用
洋洋加碳水 2024-07-17 16:07:04 阅读 90
首先想要在本地将自己的应用部署到docker中。我们需要在我们的本地安装docker。为防止污染我们本机的磁盘,docker一般情况下是装在虚拟机中的。例如装在用VMware管理的虚拟机,华为云服务器、阿里云服务器等。为解决docker装在本地会污染我们本地机器的问题。我们在本地装docker之前需要装wsl2。也就是类似于VMware的一种管理虚拟机的软件。
下面简单介绍一下wsl2与VMware的区别:
集成度:WSL2是与Windows操作系统紧密集成的,而VMware是一个独立的软件平台。性能:WSL2由于其轻量级和与Windows的集成,通常提供更好的性能,特别是在文件系统访问方面。VMware虚拟机可能会有更高的性能开销。用途:WSL2主要针对开发者需要在Windows上使用Linux工具的场景,而VMware适用于更广泛的虚拟化需求,包括服务器虚拟化和多操作系统环境。资源消耗:WSL2消耗的资源较少,因为它不需要模拟整个硬件环境。VMware虚拟机可能需要更多的资源,因为它们运行完整的操作系统实例。
简单来说,WSL2适合需要在Windows上运行Linux应用程序的开发者,而VMware适合需要创建多个隔离环境或运行不同操作系统的更广泛用途。
也就是:我在windows本地装docker我不想污染我的window我需要一个类似VMware的一个虚拟化软件管理平台管理他,但是我又不想他和我本地的网络产生隔离。那么这种情况下wsl2就是比较合适的选择了。
以上是对在本地部署docker为什么要用wsl2的简单概述,默认友友们已经在本地安装好了docker和wsl2。下面我们将重点分享如何将我们的应用部署到docker中。
应用介绍及所用依赖:
介绍:基于springboot框架的单体应用。
所用依赖:openjdk17、mysql 8.0.31、redis>=4
首先我们打开我们的cmd或者powshall,运行一下命令打开docker
systemctl start docker
查看本地镜像仓库:
docker images
从docker仓库拉取我们应用需要的镜像mysql和redis:
docker pull mysql:8.0.31
冒号后面是指定我们想要拉取的镜像的版本,如果不写默认为 latest也就是镜像仓库中最新的版本。
docker pull redis
将travel应用打包到本地images:
将application.yml文件中数据库和redis连接地址改为host.docker.internal。
解释:
host.docker.internal
是一个特殊的DNS名称,当使用Docker容器时,这个名称被用来指向运行容器的宿主机。这意味着,当你在Docker容器内部需要访问宿主机时,可以使用这个特殊的DNS名称来代替宿主机的实际IP地址。也就是我们本地的localhost。
将应用程序打包成jar,并编写Dockerfile文件
注意:dockerfile文件一定要和我们打包好的jar包放在同一个文件夹内。一般如下:
Dockerfile:
FROM openjdk:17//应用镜像的基础镜像
LABEL authors="yangyang"//镜像的作者 ---可以不写
WORKDIR /app //在容器中创建app文件
COPY travel-server-0.0.1-SNAPSHOT.jar /app //将打包好的jar包 拷贝到容器中的app文件中
ENTRYPOINT ["java", "-jar","travel-server-0.0.1-SNAPSHOT.jar"]//执行java应用
构建应用的镜像--也就是我们打包好的jar包,我这里给它命名为travel:
进入到docker文件中:
cd docker
执行构建镜像的命令:
docker build -t travel .
travel镜像构建成功!! 下面我们来查看一下确认本地中是否已经存在。
查看本地镜像:
docker images
ok本地镜像仓库中已经存在刚刚构建好的travel镜像和上面我们从远程镜像仓库中拉取的mysqlh和redis的镜像。
下面我们开始运行容器。
在docker容器中运行应用、运行redis、运行mysql
运行redis并为其设置端口映射:
docker run -d --name redis -p 6380:6379 redis
注意:这里的-d代表在后台运行该容器的意思。 --name后面跟的是容器名 -p后面是端口映射。我们知道在docker中每个容器都是相互隔离的。冒号前面的是暴露给宿主机的端口,后面则是容器中的端口。也就是说我们可以localhost:6380访问到我们的容器redis。
检查是否运行成功:
运行成功!!
运行mysql:
docker run -d -e MYSQL_ROOT_PASSWORD=你的数据库密码 --name 容器名称 镜像名称
检查是否运行成功:
将我们应用的数据信息导入到我们刚刚在docker中创建好的mysql中:
导入成功!!!
最后一步运行travel:
docker run --name 容器名称 -p 宿主机端口:容器端口 镜像名称
注意:这里我没有在命令中加 -d 原因是我不想让它在后台运行我想看他的运行状态,从而了解运行情况。
运行成功!!!
下面我们来看一看正在运行的容器:
docker ps
在docker desktop中查看
查看一下我们的应用能否正常访问:
访问应用:
访问截图:
访问成功!!部署成功!!
以上就是将应用部署到docker 简单的分享。欢迎大家讨论。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。