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 .
|
缺陷
由于在Dockerfile 设置了VOLUME,我的主要目的是为了让容器启动时访问配置文件是从宿主机访问,而不是从容器里面访问,但是容器创建的时候是不会将配置文件复制到宿主机上的,所以就需要我们手动从容器里面复制配置文件;
其实都不用手动下载安装包的,直接在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
|
说明:
-v 里面的etc 就是我上述缺陷中提到的
使用命令运行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
|
说明:
- 这里的volumes里面的etc 就是我上述缺陷中提到的怎么去获取etc
验证是否成
你云主机或者虚拟机的 ip+61680 成功就标识你的容器运行成功