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

制作这样一个包含基础服务的镜像,有利于下次快速搭建同样的环境。下次直接拉取镜像下来用,效果是直接运行就有了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版本的镜像就是我想要的了,然后我是提交到阿里去上的个人镜像仓库。











©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值