首页 > 编程语言 >Docker Desktop配合WSL和IDEA进行Java服务的打包+镜像构建+容器运行测试

Docker Desktop配合WSL和IDEA进行Java服务的打包+镜像构建+容器运行测试

时间:2023-02-23 13:11:44浏览次数:52  
标签:容器 Java Windows WSL IDEA arg 镜像 Docker

  在Windows10 22H2+的版本可以使用WSL(Windows Subsystem for Linux 或叫 Windows Support Linux)了,即Windows内置的Linux子系统!它对于在Windows下工作的容器化微服务开发人员是非有用的!有了它你就可以直接在本地构建镜像并运行容器进行测试(当然WSL还是配合Docker Desktop来使用)。关于WSL的说明见微软官网(https://learn.microsoft.com/zh-cn/windows/wsl/),关于Docker Desktop的说明见Docker官网(https://docs.docker.com/desktop/install/windows-install/),这里假设你都已经安装好了这两个东东!

  首先,我们先来配置一下Docker Desktop里的Docker Engine:

  国内加速的公有镜像库地址如下(私有的是我自己本地的):

  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://registry.aliyuncs.com",
    "https://registry.docker-cn.com"
  ]

  修改好后,点右下角的 【Apply & restart】,等左下角的【鲸鱼托集装】状态栏重新变成绿色就好了!

  接着我们用IDEA准备一个HelloWork级别的Web后端应用(确保应用运行正常),并用Maven打包一下,然在该应用工程根目录下创建好一个Dockerfile文件:

  以下是完整的Dockerfile文件内容:

#指明制作当前镜像将基于的基础镜像
FROM master1:80/library/alpinejdk:1.8.0_201
#指定所制作镜像的维护者和联系方式
MAINTAINER xurm "[email protected]"
#定义镜像构建过程中的临时变量(build命令完成后该变量会删除,所以不能直接用于镜像构建后执行的命令里,比如容器启动和运行阶段的命令)
#可在构建镜像时用-build-arg传入覆盖(例 docker build --build-arg app_name_arg="myapp" -t master1:80/library/helloworld:0.1)
ARG app_name_arg="apps"
ARG java_opts_arg="-server -Xms512m -Xmx512m"
#定义环境变量(变量会永久保存在镜像里,还会从FROM的基础镜像继承其他环境变量)
ENV APP_NAME=$app_name_arg
ENV JAVA_OPTS=$java_opts_arg
#指定启动当前镜像的容器时分配给容器的存储卷(一般用于存储容器启动后工作过程中产生的需要持久保存的数据,不随容器退出而丢失,比如日志)
VOLUME /data
#指定容器运行时的默认工作目录(没有会自动创建),不指定则会使用FROM基础镜像指定的默认工作目录
WORKDIR /data/$APP_NAME
#设置时区(和普通操作系统一样需要对齐服务器时区,跑在上面的应用拿到的时间才不会乱)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#从镜像构建上下文目录里添加需要的文件到容器镜像的指定目录,添加分ADD和COPY两种,ADD会复制并解压,
#(这里添加的文件将影响镜像的大小,多文件COPY目的目录要以/结尾)第一个是jar包的原始名,第二个是重命令(这对自动化部署脚本的编写有用)
ADD target/*.jar /opt/$APP_NAME/app.jar
#容器将暴露的端口
EXPOSE 8080
#指定容器启动时需要执行的命令
ENTRYPOINT java $JAVA_OPTS -Dfile.encoding=UTF-8 -jar /opt/$APP_NAME/app.jar

  保存Docker Desktop启动正常的情况下(主界面左下角的【鲸鱼托集装】状态栏成绿色),启动Windows上的WSL子系统,例如我的是Oracle Linux 7.9(就像一个普通的Windows应用一样在启动菜单里),启动后如下图所示:

  在WSL子系统里,你可以像在对应版本的Linux上执行同样的Linux命令!这里重点讲一下WSL子系统的文件系统和Windows文件系统目录打通的地方,那就是WSL子系统将所在Windows的盘符目录全部以小写字符的形式挂到了 /mnt 目录下(我们可以直接在WSL和Windows系统的目录之间相互切换):

  因此,我们可以在WSL上利用Docker直接用使用工程目录下的Dockerfile文件和Maven Package出来的jar包直接进行镜像构建,运行和维护镜像等,就像在Linux上一样:

  主要用到的命令如下:

#构建镜像(对应Dockerfile里传了一个参数app_name_arg,最后的点 . 不要漏了!)
docker build --build-arg app_name_arg="myhelloworld" -t master1:80/library/helloworld:0.0.1 .

#使用新构建的镜像以守护进程模式(-d)启动容器,(-p)绑定宿主机80端口,映射容器内8080端口
docker run -d -p 80:8080 master1:80/library/helloworld:0.0.1

  此时我们转到Docker Desktop上看到镜像和容器了,并确容器处理运行状态,还提供了访问入口和其他控制操作:

  我们直接点访问入口:

  以上就是全部内容!

  最后提一点,其实IDEA很早就直接集成了Docker的相关操作,只是少了直接在Window本地运行Linux环境来检验镜像包的能力,见下截图(详细用法就自己去找资料了):

 

标签:容器,Java,Windows,WSL,IDEA,arg,镜像,Docker
From: https://www.cnblogs.com/xuruiming/p/17147483.html

相关文章

  • java 网络编程Socket编程
        Server.javaimportjava.io.*;importjava.net.*;publicclassServer{publicstaticvoidmain(Stringargs[]){String[]answer={......
  • Java培训班多少钱,有没有便宜的
    Java软件开发行业至今的发展趋势是非常不错的,许多专业的Java培训班培养出来的学员都取得了不错的成绩,所以,这也是为什么每年都有同学不断报名培训的原因之一,为此,Java培训也......
  • java单体项目Hutools连接Sqlite
    hutools的官方示例只有连接MySql的用法,没有sqlite用法,但是项目又需要,就自己摸索了一下。参考springboot连接mysql方式做了一个,过程还是比较简单,这里做个记录 1,resourc......
  • java socket网络编程(多线程技术)
    Client.javaimportjava.io.*;importjava.net.*;importjava.util.*;publicclassClient{publicstaticvoidmain(Stringargs[]){Scannerscann......
  • 熟悉JavaScript闭包
    熟悉JavaScript闭包闭包(closure)是一个函数以及其捆绑的周边环境状态(lexicalenvironment,词法环境)的引用的组合。简而言之,闭包让开发者可以从内部函数访问外部函数的作用......
  • JavaScript 中的 apply、call、bind
    在JavaScript中,apply、call、bind是三个与函数调用相关的方法,它们都允许你在调用函数时手动设置函数的上下文(即this指向)。1、apply方法:apply方法允许你调用一个函......
  • java之线程池
    1.线程池的作用  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时......
  • Java后端培训机构哪个比较好?不了解怎么选
    Java后端培训机构哪个比较好?这样的问题,对于机构的评价每个人都有自己的想法和看法,不能一概而论。所以,小编觉得,我们在看别人推荐的时候也要有自己的判断,通过实地考察在与自......
  • 北京Java培训机构哪家比较好
    北京作为一线互联网发展城市,Java行业整体是很不错的,人才的需求量也非常大,就业前景与薪资待遇也很可观,所以,北京的Java培训相对来说是比较多的,到这里来学习的人也不少,大家都......
  • Java哪里培训好,需要考虑几个情况
    Java哪里培训好,事实上,正规的Java培训还是有不少的,并且不同城市的机构教学水平有这很大差距,这就会导致,最终的学习效果与成果也都存在一定的差距,所以,我们在选择Java培训的时......