Docker与Java开发 下篇

「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

在开发过程中使用Docker的承诺是提供一个一致的测试环境,跨开发者机器和使用中的各种环境(如QA和生产)。困难在于,Docker容器引入了一个额外的抽象层,开发人员必须在编码期间进行管理。

Docker使得应用程序代码可以与系统需求定义捆绑在一个跨平台、可运行的包中。这是一个优雅的抽象,解决了部署和管理软件运行时的基本需求,但它引入了一个额外的间接层,当程序员在做他们所做的事情时,必须处理好这个问题:反复修改和测试软件的内部及其依赖关系。

使用Docker Compose

答案是我们将用devtools运行Spring Boot,启用远程调试,并在Docker中公开调试端口。为了以声明的方式(而不是命令行参数)管理这些,我们将使用Docker Compose。Docker Compose是一种表达Docker运行方式的强大方式,它支持多个目标(又称多阶段构建)和外部卷装载。

默认的配置文件是docker-compose.yml,它在Dockerfile中找到的配置之上运行。

首先安装Docker二进制文件。

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
复制代码

然后运行。

sudo chmod +x /usr/local/bin/docker-compose
复制代码

现在你可以跑了。

docker-compose --version
复制代码

提示:如果你需要探索正在运行的容器内部,你可以运行以下命令之一(取决于镜像中的底层操作系统)。

• sudo docker exec -it 646 /bin/sh • sudo docker exec -it 646 /bin/bash • sudo docker exec -it 646 powershell

现在Docker Compose已经可用,让我们为它创建一个配置文件,即docker-compose.yml,如清单3所示。 清单3. docker-compose.yml

version: '3.3'
services:
  idg-java-docker:
    build:
      context: .
    ports:
      - 8000:8000
      - 8080:8080
    environment:
      - SERVER_PORT=8080
    volumes:
      - ./:/app
    command: ./mvnw spring-boot:run -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"
复制代码

这里的第一个关键事实是,8080和8000两个端口都是开放的。8000是传统的Java调试端口,并被命令字符串所引用。docker-compose命令覆盖了Docker文件中的CMD定义。重申一下,docker-compose运行在Dockerfile之上。 输入

sudo docker-compose build --no-cache idg-java-docker
复制代码

来构建镜像。 用sudo docker-compose up启动该应用程序。现在用Ctrl-c杀死它。

现在用sudo docker-compose up -d在后台运行该容器,以获得分离模式。然后你可以用sudo docker-compose down来关闭它。 用

git init
git add . 
git commit -m "initial" 
复制代码

提交你的新应用。 现在访问GitHub.com并创建一个新的仓库。按照指示来推送项目。

git remote add origin https://github.com//.git
git branch -M main
git push -u origin main
复制代码

现在在你的本地系统上打开Visual Studio Code。(或任何支持远程调试的 Java IDE;关于运行 VS Code 和 Java 的更多信息,请点击这里。所有现代 IDE 都会直接从 GitHub 的 repo 克隆地址中克隆一个 repo)。现在就做吧。

现在打开你的IDE的Java调试配置。在VS Code中,这是 launch.json 文件。创建一个类似清单4中的配置项。其他IDE(Eclipse、IntelliJ等)会有类似的启动配置对话框,有相同的条目。

清单4.IDE客户端的调试配置

{
  "type": "java",
  "name": "Attach to Remote Program",
  "request": "attach",
  "hostName": "<The host name or ip address of remote debuggee>",
  "port": 8000
},
复制代码

从你的虚拟机插入IP地址,然后通过进入调试并运行 "Attach to Remote Program"配置来启动该配置。

一旦连接了调试器,你就可以修改DemoApplication.java文件(例如,将问候语改为 "Hello Wrold!")并保存它。 现在点击 "Hot module swap "按钮(闪电图标)。VS Code将更新运行中的程序。 再次在浏览器中浏览该应用程序,你会看到它将反映这一变化。

现在是最后一个技巧。在IDE中双击第13行,设置一个断点。现在再次访问该应用程序。断点将被击中,IDE将出现,并且可以获得完整的调试功能。

还有其他方法来实现开发流程的Docker化,但本文所描述的方式可以让你在相对简单的设置中对本地主机和远程系统进行代码更新和调试。

感谢观看,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!

猜你喜欢

转载自juejin.im/post/7034685672573108255