设为首页 收藏本站
查看: 1188|回复: 0

[经验分享] 制作 leanote docker 镜像

[复制链接]

尚未签到

发表于 2017-12-6 21:00:18 | 显示全部楼层 |阅读模式
  #1.制作基础镜像
leanote 使用 mongodb 存储数据,如果把 mongodb 单独做成一个镜像,初始化数据时比较麻烦,所以最后还是决定把 mongodb 和 leanote 放到同一个镜像里边。
docker容器启动后,必须有一个进程前台运行,这个前台进程结束时docker容器结束,docker stop 时会给前台进程发信号,所以前台进程可以正常结束,而后台进程不会收到结束信号,前台进程结束时后台进程会被强制结束。
如果只是简单的启动 mongodb 和 leanote,mongodb 后台运行,leanote前台运行,结束容器的时候,leanote会正常结束,而mongodb则会非法结束,引起mongodb数据不一致。
其中一个解决办法就是使用supervisor作为前台进程,其他进程作为supervisor的子进程。
##1.1阿里云镜像源
其中sources.list使用国内源。
[iyunv@k8smaster home]# cd /home/home/leanoteDockerFile/sources

[iyunv@dev sources]# vi sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse

  ##1.2编写Dockerfile文件
  
[iyunv@k8smaster home]# cat Dockerfile
FROM ubuntu:14.04
MAINTAINER home<3xxxxxxx6@qq.com>
  ADD sources.list /etc/apt/
  RUN apt-get update && \
apt-get install -y supervisor
  CMD [ "/bin/bash" ]
  
##1.3生成supervisor基础镜像
-t 生成的镜像名称
--rm 生成成功后删除中间镜像
--no-cache 不使用之前生成后缓存的中间镜像
注意命令后边跟的.,表示当前目录
[iyunv@dev sources]# docker build -t home/supervisor:1.0 --rm --no-cache .

[iyunv@dev sources]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
home/supervisor 1.0 e116f6895b37 About a minute ago 236.6 MB
ubuntu 14.04 7c09e61e9035 7 days ago 187.9 MB

[iyunv@dev sources]#

[iyunv@dev sources]# cd ..

[iyunv@dev leanoteDockerFile]# pwd
/home/home/leanoteDockerFile

  #2.制作leanote docker镜像
##2.1编写Dockerfile文件
镜像内包含 mongodb 和 leanote。
使用ADD指令添加*.tar.gz时会自动解压。
[iyunv@dev leanoteDockerFile]# cat Dockerfile
# home/leanote:2.4
# with mongodb

  FROM home/supervisor:1.0
MAINTAINER home<3xxxxxxx6@qq.com>
  ADD init.sh /root/init.sh
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY leanote-linux-amd64-v2.4.bin.tar.gz /root/
COPY mongodb-linux-x86_64-3.0.1.tgz /root/
  RUN mkdir -p /root/db && \
cd /root && \
tar -xvf /root/mongodb-linux-x86_64-3.0.1.tgz && \
tar -xvf /root/leanote-linux-amd64-v2.4.bin.tar.gz && \
mv /root/mongodb-linux-x86_64-3.0.1 /root/mongodb && \
mkdir -p /root/conf_bak && \
cp /root/leanote/conf/* /root/conf_bak && \
chmod a+x /root/init.sh && \
chmod a+x /root/leanote/bin/run.sh
  EXPOSE 9000
  CMD ["/usr/bin/supervisord"]
[iyunv@dev leanoteDockerFile]#
  ##2.2写supervisor文件
supervisord.conf里配置启动的进程,mongodb启动时指定数据库文件目录/root/db以后存放mongodb数据,leanote启动时先运行init.sh,再运行run.sh
[iyunv@dev leanoteDockerFile]# cat supervisord.conf
[supervisord]
nodaemon=true

[program:mongodb]
command=/root/mongodb/bin/mongod --dbpath /root/db

[program:leanote]
command=/bin/bash -c "/root/init.sh && /root/leanote/bin/run.sh"

  ##2.3初始化数据库或添加配置文件
init.sh初始化数据库。通过判断是否存在文件/root/db/already-init-db来确定是否需要初始化数据库。数据库初始化时创建该文件。leanote的初始数据存放于/root/leanote/mongodb_backup/leanote_install_data/目录下
  生成镜像时对conf目录进行了备份,如果文件/root/leanote/conf/app.conf不存在,则说明容器启动时将conf目录作为数据卷挂载到了其他地方,这时就从备份文件恢复配置文件。
[iyunv@dev leanoteDockerFile]# cat init.sh
#!/bin/bash
#set -m

  # 如果数据库未初始化,则初始化数据库
if [ ! -f "/root/db/already-init-db" ] ; then
touch /root/db/already-init-db
/root/mongodb/bin/mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/
fi
  # 如果配置文件不存在,则复制配置文件
if [ ! -f "/root/leanote/conf/app.conf" ] ; then
cp /root/conf_bak/* /root/leanote/conf/
fi
##2.4目录内容显示
[iyunv@dev leanoteDockerFile]# ll
总用量 58876
-rw-r--r--. 1 root root 675 3月 7 20:33 Dockerfile
-rw-r--r--. 1 root root 428 3月 7 20:32 init.sh
-rw-r--r--. 1 root root 20717785 3月 7 20:35 leanote-linux-amd64-v2.4.bin.tar.gz
-rw-r--r--. 1 root root 39554547 3月 7 20:35 mongodb-linux-x86_64-3.0.1.tgz
drwxr-xr-x. 2 root root 59 3月 7 20:21 sources
-rw-r--r--. 1 root root 197 3月 7 20:31 supervisord.conf
[iyunv@dev leanoteDockerFile]#
##2.5生成leanote镜像

[iyunv@dev leanoteDockerFile]# docker build -t home/leanote:2.4 --rm --no-cache .

[iyunv@dev leanoteDockerFile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
home/leanote 2.4 60896a4094b8 12 seconds ago 477.4 MB
home/supervisor 1.0 e116f6895b37 15 minutes ago 236.6 MB
ubuntu 14.04 7c09e61e9035 7 days ago 187.9 MB
[iyunv@dev leanoteDockerFile]#

  第一次启动。
三个目录,一个存放mongodb数据库文件,一个存放leanote配置文件,一个存放leanote附件。一个端口9000,用于访问leanote。
[iyunv@dev leanoteDockerFile]# docker run --name leanote -d -v /home/maks/leanote/leanotedb:/root/db -v /home/maks/leanote/conf/:/root/leanote/conf/ -v /home/maks/leanote/files:/root/leanote/files -p 9000:9000 home/leanote:2.4

  后台初始帐户密码:admin abc123

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421469-1-1.html 上篇帖子: Docker Daemon 参数最佳实践 下篇帖子: [原]Docker部署SuperMap8.1.1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表