通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流,所以我们很多环境和工具都会安装在 Docker 容器中,Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等)管理和部署 Maven 项目时,就需要在自动运维工具运行环境中有 Maven 环境的支持。

如果这些环境都安装在服务器中并没有安装容器中其实都很好办。但是一旦这些环境都安装在 Docker 容器中时,每当我们安装这些项目依赖工具时往往会遇到一些奇奇葩葩的问题,所以今天对 Docker 中安装 Maven 环境做个简单的记录。

在这安装过程中我使用的是 Docker Compose,所以在此之前需要安装好 Compose。

编写一个更简单的 docker-compose.yml 文件,它只需启动一个 Maven 容器,并暴露 Maven 的一些基本配置。

version: '3'
services:
  maven:
    image: maven:latest
    container_name: maven
    volumes:
      - ~/.m2:/root/.m2 # 主机上 Maven 的本地仓库目录(~/.m2)挂载到容器中的 /root/.m2 目录,这样可以实现 Maven 的缓存持久化,避免每次启动容器都重新下载依赖
      - /path/to/your/settings.xml:/usr/share/maven/conf/settings.xml # 主机上的 settings.xml 文件挂载到容器中的 /usr/share/maven/conf/settings.xml 路径下。这样 Maven 将使用您自定义的 settings.xml 文件
    working_dir: /usr/src/app # 容器的工作目录为 /usr/src/app,以便您可以在容器中执行 Maven 构建命令
    command: sleep infinity # 使用了 sleep infinity 命令来替换默认的 Maven 构建命令。这个命令会让容器永远休眠,从而避免执行任何构建命令

就是这么简单,编写完 yml 文件后直接使用 docker-compose up 启动 Maven 容器就可以了。

如果您希望在宿主机中使用容器中的 Maven 环境,您可以在宿主机上执行 Maven 命令时使用 Docker 执行命令。以下是一个示例:

docker exec maven mvn clean install
# 或
docker-compose exec maven mvn clean install

这个命令将会在 Maven 容器中执行 mvn clean install 命令。这样您就可以在宿主机上使用容器中的 Maven 环境进行构建操作了。

您也可以将这个命令设置为一个别名,以便更方便地在宿主机中使用。例如,您可以在 ~/.bashrc 文件中添加以下行:

alias mvn='docker exec maven mvn'
# 或
alias mvn='docker-compose exec maven mvn'

这样,您只需在终端中执行 mvn 命令,就相当于在 Maven 容器中执行 Maven 命令,从而可以在宿主机中使用容器中的 Maven 环境了。

这么简单也要记录这个安装过程是因为我开始安装时安装官方例子和网上一些教程来进行安装一直失败,所以就做个简单的记录。在官方和网上的一些例子例子中大家对 command 要么没有配置(默认会执行 mvn 命令)要么配置了 clean 和 install,这样的话在启动容器时会去工作目录下找需要编译的项目,如果找不到就会报以下这些错误。

[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/). Please verify you invoked Maven from the correct directory. -> [Help 1]
 

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy.

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值