您的位置:首页 > 运维架构 > Docker

制作包含redis和mqtt的Docker镜像-支持多服务

2016-06-26 04:11 671 查看
制作这样一个包含基础服务的镜像,有利于下次快速搭建同样的环境。下次直接拉取镜像下来用,效果是直接运行就有了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版本的镜像就是我想要的了,然后我是提交到阿里去上的个人镜像仓库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: