使用我们的 Docker 镜像是开始使用 ActiveMQ Artemis 最简单的方法之一。

1. 官方镜像

官方 Docker 镜像 可在 dockerhub 上获取。镜像与每个版本的其他发行版构件一起推送。使用此命令是最快、最简单的方法,它将创建并启动一个名为 mycontainer 的分离容器,公开主要消息端口(即 61616)和 HTTP 端口(即 8161),并在其终止时将其删除

$ docker run --detach --name mycontainer -p 61616:61616 -p 8161:8161 --rm apache/activemq-artemis:latest-alpine

代理启动后,您可以在 web 管理控制台 上打开 https://127.0.0.1:8161,并使用默认用户名和密码 artemis 登录。

您还可以使用 shell 命令使用默认用户名和密码 artemis 与正在运行的代理进行交互,例如:

$ docker exec -it mycontainer /var/lib/artemis-instance/bin/artemis shell --user artemis --password artemis

使用 shell 命令,您可以执行基本的任务,例如创建和删除地址和队列、发送和浏览消息、查看队列统计信息等。有关更多详细信息,请参阅 命令行界面 章。

您可以使用以下方法查看容器的日志:

$ docker logs -f mycontainer

使用以下方法停止容器:

$ docker stop mycontainer

官方 Docker 镜像使用 这些脚本 构建,您也可以使用这些脚本构建自己的镜像。继续阅读以了解更多详细信息。

2. 构建您自己的镜像

为了构建镜像,您需要一个 ActiveMQ Artemis 二进制发行版。这可以从本地(在这种情况下,您需要先构建项目)或远程基于官方 Apache 版本中获取。

2.1. 使用本地版本

如果您要使用本地二进制发行版,请从 ActiveMQ 源代码树的根目录构建它,例如:

$ mvn -Prelease package -DskipTests

构建完成后,发行版文件将位于您的本地发行版目录中。这里 <version> 是您构建的发行版版本。

artemis-distribution/target/apache-artemis-<version>-bin/apache-artemis-<version>

然后切换到 artemis-docker 目录,并使用 prepare-docker.sh 脚本以及适当的参数将 Docker 文件复制到您的本地二进制发行版中,例如:

$ cd artemis-docker
$ ./prepare-docker.sh --from-local-dist --local-dist-path ../artemis-distribution/target/apache-artemis-<version>-bin/apache-artemis-<version>/

这将复制构建任何预配置 Docker 镜像所需的所有文件,并为您提供其他说明。按照这些说明完成构建您想要的基于提供的 Docker 文件之一或您自己的文件的镜像。

2.2. 使用官方 Apache 版本

如果您希望在您的镜像中使用官方 Apache 版本而不是本地版本,请从 artemis-docker 目录运行以下命令,其中 <version> 是您想要使用的版本(例如 2.30.0

$ ./prepare-docker.sh --from-release --artemis-version <version>

这将复制构建任何预配置 Docker 镜像所需的所有文件,并为您提供其他说明。按照这些说明完成构建您想要的基于提供的 Docker 文件之一或您自己的文件的镜像。

2.3. 自定义镜像

2.3.1. 环境变量

环境变量决定运行 docker build 时用于 artemis create 命令的配置选项。可用的选项是

ARTEMIS_USER

管理员用户名。默认为 artemis

ARTEMIS_PASSWORD

管理员密码。默认为 artemis

ANONYMOUS_LOGIN

设置为 true 以允许匿名登录。默认为 false

EXTRA_ARGS

发送到 artemis create 命令的附加参数。默认为 --http-host 0.0.0.0 --relax-jolokia。设置此值将覆盖默认值。有关可用选项,请参阅 artemis create 的文档。

上述环境变量的组合会导致 docker-run.sh 脚本调用以下命令以在 Docker 容器第一次运行时创建代理实例

${ARTEMIS_HOME}/bin/artemis create --user ${ARTEMIS_USER} --password ${ARTEMIS_PASSWORD} --silent ${LOGIN_OPTION} ${EXTRA_ARGS}

注意:LOGIN_OPTION 根据 ANONYMOUS_LOGIN 的值,可以是 --allow-anonymous--require-login

这些变量可以在相关 Dockerfile 中设置,例如,在命令行上设置,例如:

$ docker run -e ARTEMIS_USER=myUser -e ARTEMIS_PASSWORD=myPass --name mycontainer -it -p 61616:61616 -p 8161:8161 apache/activemq-artemis:latest-alpine

2.3.2. 映射点

该镜像将使用 /var/lib/artemis-instance 目录来保存正在运行的代理的配置和数据。当您希望将配置和数据持久化容器之外时,您可以将其映射到主机上的文件夹,例如:

docker run -it -p 61616:61616 -p 8161:8161 -v <broker folder on host>:/var/lib/artemis-instance apache/activemq-artemis:latest-alpine

在这种情况下,<broker folder on host> 是一个目录,代理实例应该保存在其中,并在每次运行时重新使用。

2.3.3. 覆盖 etc 文件夹中的文件

您可以使用自定义配置来配置 ActiveMQ Artemis 实例,方法是将驻留在 etc 文件夹中的文件替换为自定义文件,例如 broker.xmlartemis.profile。将替换文件放在一个文件夹中,并将其作为卷映射到

/var/lib/artemis-instance/etc-override

etc-override 文件夹的内容将在实例创建后复制到 etc 文件夹,以便代理始终使用用户提供的配置启动。

如果您将整个 var/lib/artemis-instance 映射到外部文件夹以进行持久化,那么您可以在映射的文件夹中放置一个 etc-override 文件夹。它的内容将再次在创建实例后复制到 etc 文件夹中。