快速发布 docker 应用之神器 - docker Maven

快速发布 docker 应用之神器 - docker Maven

在开发集群应用或微服务架构应用(云原生 cloud native app)时需要启动多个应用服务容器,每次构建新的容器镜像比较麻烦,也不利于调试,使用 docker Maven 镜像就是最佳开发实践之一。本文仅合适开发环境应用,不合适生产部署

准备环境

  • 熟悉 docker 命令: [一张图读懂 docker 命令]
  • 下载 Maven docker 官方方镜像:
sudo docker pull maven
sudo docker images
  • 准备一个 Java Web 项目。例如: Spring 4 官方 MVC demo

demo 地址: http://spring.io/guides/gs/serving-web-content/

下载解压后,进入 pom.xml 所在目录:
mvn spring-boot:run

静待出现 Tomcat started on port(s) 8080 (http)
打开新终端,输入:
curl http://localhost:8080/greeting

出现 Hello World! ,表示准备就绪,ctrl+c 终止运行。

1、在容器中启动 Maven 项目

(1)启动应用

后台运行容器,容器名 demo1

sudo docker run -d --name demo1 -v  "$(pwd)":/usr/src/app \
-v ~/.m2:/usr/share/maven/ref \
-w /usr/src/app \
maven mvn spring-boot:run

其中 -v "$(pwd)":/usr/src/app 表示与本地共享应用文件夹;
-v ~/.m2:/usr/share/maven/ref 表示与本地共享 Maven 的本地库;
-w /usr/src/app 指定项目在容器中的目录位置;
maven mvn spring-boot:run 使用 Maven Image 执行命令 mvn。

(2)检查启动状态与容器地址

sudo docker ps 出现 demo1 容器

sudo docker logs demo1 静待看到 Tomcat started on port(s) 8080 (http)

sudo docker inspect demo1 |grep IPAddress 出现了 IP 地址,例如:172.17.0.4

(3)访问应用服务

curl http://172.17.0.4:8080/greeting?name=your-name

出现 Hello your-name! 。

(4)启动另一个应用

例如,容器名 demo2:

sudo docker run -d --name demo2 -v  "$(pwd)":/usr/src/app \
-v ~/.m2:/usr/share/maven/ref \
-w /usr/src/app \
maven mvn spring-boot:run

重复(1) (2) (3) 步骤。

sudo docker ps

看到两个运行的项目 demo1,demo2

sudo docker rm -f demo1 demo2 关闭并清理项目

2、进一步了解 maven docker

如果你希望了解 Maven 镜像内部结构

sudo docker run -it --rm maven /bin/bash

查看目录及配置文件

cd /usr/share/maven
ls -l
exit

3、小结

本文展示了开发环境使用 Maven 的场景,核心要点是主机与Maven镜像共享本地库与应用目录
在开发环境中,主机是否安装 Maven 呢?个人认为是必须的,毕竟修改 Maven 镜像配置没什么意义阿。

在生产环境中,从 spring-boot, tomcat, jetty 等镜像制作应用有更小的体积和更好的性能。
制作 web 应用镜像可参考 [使用Docker运行Java Web应用]1

【参考】


  1. 使用Docker运行Java Web应用 https://yq.aliyun.com/articles/6894 ↩

你可能感兴趣的:(docker)