制作包含redis和mqtt的Docker镜像-支持多服务
制作这样一个包含基础服务的镜像,有利于下次快速搭建同样的环境。下次直接拉取镜像下来用,效果是直接运行就有了redis和mqtt的一些基础服务。特别在安装mqtt时查阅了不少资料(这里可能与版本有一定关系),也废了一定功夫,希望贴出来能给网友一定借鉴:本文不讲如何安装docker,仅仅介绍利用Dockerfile制作Docker镜像镜像共包含sshd(用于远程登录到容器),sup
制作这样一个包含基础服务的镜像,有利于下次快速搭建同样的环境。下次直接拉取镜像下来用,效果是直接运行就有了redis和mqtt的一些基础服务。
特别在安装mqtt时查阅了不少资料(这里可能与版本有一定关系),也废了一定功夫,希望贴出来能给网友一定借鉴:
本文不讲如何安装docker,仅仅介绍利用Dockerfile制作Docker镜像
镜像共包含sshd(用于远程登录到容器),supervisor(用于容器管理启动多个服务程序),redis和mqtt
一、编写Dockerfile,记得是在哪个目录编写,就在哪个目录build。且在当前目录下创建一个supervisord.conf配置文件,用于拷贝到容器里面控制supervisor的执行。参考网址:http://wiki.jikexueyuan.com/project/docker-technology-and-combat/supervisor.html
创建文件:supervisord.conf
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:redis-server]
command=redis-server
autostart=false
autorestart=false
[program:mosquitto]
command=mosquitto -c /etc/mosquitto/mosquitto.conf
autostart=false
autorestart=false
supervisord.conf 结束-------------------
autostart为true时,容器只要一启动就会自动启动相应服务,autorestart为true时是如果发现退出会立即重启。我这里设置都为false的原因是默认都不自启动。我想要启动的时候自己用sshd连接到容器里面设置。
版本13.04有点老了,后来换成14.04
创建文件:Dockerfile
FROM ubuntu:14.04
MAINTAINER TestDocker Image
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y openssh-server redis-server supervisor
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 22 6379
CMD ["/usr/bin/supervisord"]
Dockerfile 结束-----------------------------
二、执行命令docker build -t="testimages:1.0" .
执行上述命令成功的话就会生成一个镜像,可以用docker imags命令查看镜像列表,会发现REPOSITORY对应的是testimages,,TAG对应的是1.0,注意build命令最后有个"."号。
三、运行images,并修改密码,以方便sshd远程登录
1、执行:docker run -t -i testimages:1.0 /bin/bash
2、回车后会进到容器里,输入passwd,回车提示要你输入密码。
3、exit退出容器
4、用docker ps -l,查看刚才运行的容器,4b546ee9f171 为容器ID,运行docker commit 4b546ee9f171 testimages:1.1
完成保存密码的操作
四、运行testimages:1.1就可以用远程登录容器了,端口号用下面设置的5851,我用的是Xshell工具连接的
docker run -d -p 5851:22 -p 5852:6379 -p 5853:1883 -t -i testimages:1.1 /usr/bin/supervisord
五、进入容器,安装mqtt
按道理是应该在apt-get install 那行加一个mosquitto就会自动一起把4个服务都装上,但我遇到的问题是mosquitto没法设置用户名和密码,必须要有mosquitto_passwd密码管理工具才能进行设置(用户名和密码的设置方法我之前转有一篇)。所以我只能到容器里面去人工安装了,根据上面提到的ubuntu 13.04版本,我直接apt-get install mosquitto还是无法找到mosquitto_passwd。要增加如下步骤:参考http://mosquitto.org/download/
1、sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
2、sudo apt-get update
-----------------------------------------------------
3、如果命令apt-add-repository无法识别,就要安装apt-get install python-software-properties
我执行apt-get install python-software-properties时,又报了一个错:aptsources.distro.NoDistroTemplateException: Error: could not find a distrib
4、将文件/etc/lsb-release的内容修改为如下并保存
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu oneiric"
以上修改好后再重新执行3,1,2
可以手动启动mqtt试试:执行mosquitto -c /etc/mosquitto/mosquitto.conf
(可选)六、设置redis和mqtt自启动
1、设置/etc/supervisor/conf.d/supervisord.conf配置文件
[program:redis-server]
command=redis-server
autostart=true
autorestart=true
[program:mosquitto]
command=mosquitto -c /etc/mosquitto/mosquitto.conf
autostart=true
autorestart=true
2、重启容器docker restart 容器ID
七、再将这个已经有想要服务的容器保存为一个镜像,下次这个镜像就可以重复利用了
docker commit 容器ID testimages:1.2
testimages:1.2版本的镜像就是我想要的了,然后我是提交到阿里去上的个人镜像仓库。
更多推荐
所有评论(0)