在本地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 简单的分享。欢迎大家讨论。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。