apache-apollo Dockfile 镜像制作

apache-apollo

Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, Openwire, SSL, WebSockets 等多种协议。

apache-apollo-Dockerfile 详解

如果你对Dockerfile还不是很了解的话可以参考下面的文章

参考文章

Docker Dockerfile 定制镜像

Dockerfile详解

1. 下载apache-apollo

apache-apollo-1.7-Downloads

2. 上传到服务器目录
(我文件路径如下所示)

我的apache-apollo安装包是改过名字的,所以Dockerfile里面的目录名称有点不太一样,所以一切请根据自己的文件目

3 .编辑Dockerfile内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#我们的镜像基于jdk8,因为apollo是采用java开发的
FROM openjdk:8-jdk
#署名
MAINTAINER lengff lengff@qq.com
#指定工作目录
WORKDIR /data/server
#拷贝apollo安卓包到容器里面
COPY ./apollo-1.7.tar.gz .
#暴露需要用到的端口,这里的端口是根据你配置的apollo.xml配置文件中的端口
EXPOSE 61680 61681 61613 61614 61623 61624
#解压安装包
RUN tar zxvf apollo-1.7.tar.gz\
&& cd /data/server/apache-apollo-1.7/bin\
&& chmod a+x apollo\
#新建一个broker
&& ./apollo create MqttBroker\
&& cd /data/server/apache-apollo-1.7/bin/MqttBroker/bin\
&& chmod a+x apollo-broker
#挂载配置文件目录
VOLUME /data/server/apache-apollo-1.7/bin/MqttBroker/etc
#重新指定工作目录
WORKDIR /data/server/apache-apollo-1.7/bin/MqttBroker/bin/
#镜像启动命令
CMD ./apollo-broker run

4 .构建镜像

命令:

1
docker build -t apollo .

缺陷

  1. 由于在Dockerfile 设置了VOLUME,我的主要目的是为了让容器启动时访问配置文件是从宿主机访问,而不是从容器里面访问,但是容器创建的时候是不会将配置文件复制到宿主机上的,所以就需要我们手动从容器里面复制配置文件;

  2. 其实都不用手动下载安装包的,直接在Dockerfile 的RUN里面执行就可以了,但是网络不稳定,总是下载失败,所以推挤手动下载

命令:

1
docker cp apollo:/data/server/apache-apollo-1.7/bin/MqttBroker/etc/ .

说明:

后面的. 可以我们指定目录的, .代表当前目录

docker 启动apollo镜像

命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker run \
#映射端口
-p 61680:61680 \
-p 61623:61623 \
-p 61624:61624 \
-p 61613:61613 \
-p 61614:61614 \
#指定容器名称
--name apollo \
#挂载配置文件
-v /usr/local/docker/apollo/etc:/data/server/apache-apollo-1.7/bin/MqttBroker/etc \
#守护态运行成功(后台运行)
-d \
#镜像名称
apollo

说明:

  1. -v 里面的etc 就是我上述缺陷中提到的

  2. 使用命令运行docker 还是不怎么方便看懂意思的,所以推荐使用docker-compose运行docker容器

docker-compose 启动Apollo镜像

我的docker-compose.yml内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3"
services:
apollo:
restart: always
container_name: apollo
image: apollo
ports:
- 61680:61680
- 61623:61623
- 61624:61624
- 61613:61613
- 61614:61614
volumes:
- /usr/local/docker/apollo/etc:/data/server/apache-apollo-1.7/bin/MqttBroker/etc

说明:

  1. 这里的volumes里面的etc 就是我上述缺陷中提到的怎么去获取etc

验证是否成

你云主机或者虚拟机的 ip+61680 成功就标识你的容器运行成功