zoukankan      html  css  js  c++  java
  • 制作 leanote docker 镜像 并运行

    # 1.制作基础镜像
    leanote 使用 mongodb 存储数据,如果把 mongodb 单独做成一个镜像,初始化数据时比较麻烦,所以最后还是决定把 mongodb 和 leanote 放到同一个镜像里边。
    docker容器启动后,必须有一个进程前台运行,这个前台进程结束时docker容器结束,docker stop 时会给前台进程发信号,所以前台进程可以正常结束,而后台进程不会收到结束信号,前台进程结束时后台进程会被强制结束。
    如果只是简单的启动 mongodb 和 leanote,mongodb 后台运行,leanote前台运行,结束容器的时候,leanote会正常结束,而mongodb则会非法结束,引起mongodb数据不一致。
    其中一个解决办法就是使用supervisor作为前台进程,其他进程作为supervisor的子进程。
     
    ## 1.1.编写Dockerfile文件
    使用easy_install来安装supervisor
    cd /home/zhuyr/leanote [root@dev leanote]# cat Dockerfile FROM centos MAINTAINER zhuyr<304748716@qq.com> # supervisor配置文件路径 ENV SUPERVISORD_CONF=/etc/supervisord.conf # supervisor临时文件路径(日志文件、sock文件、pid文件) ENV SUPERVISORD_TMP_CONF=/tmp/supervisor # supervisor程序块文件路径,即是[program]块 ENV SUPERVISORD_INCLUDE_FILE=/etc/supervisordfile # web管理界面的IP ENV SUPERVISORD_WEB_IP=* # web管理界面的PORT ENV SUPERVISORD_WEB_PORT=9001 # web管理界面的账号 ENV SUPERVISORD_WEB_ACCOUNT=admin # web管理界面的密码 ENV SUPERVISORD_WEB_PASSWORD=adminpass RUN mkdir -p ${SUPERVISORD_TMP_CONF} RUN mkdir -p ${SUPERVISORD_INCLUDE_FILE} RUN yum -y update RUN yum install -y python-setuptools wget telinit RUN wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O |python RUN easy_install supervisor RUN echo -e "[unix_http_server] file=${SUPERVISORD_TMP_CONF}/supervisor.sock [inet_http_server] port=${SUPERVISORD_WEB_IP}:${SUPERVISORD_WEB_PORT} username=${SUPERVISORD_WEB_ACCOUNT} password=${SUPERVISORD_WEB_PASSWORD} [supervisord] logfile=${SUPERVISORD_TMP_CONF}/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=${SUPERVISORD_TMP_CONF}/supervisord.pid nodaemon=false minfds=1024 minprocs=200 [supervisorctl] serverurl=unix://${SUPERVISORD_TMP_CONF}/supervisor.sock [include] files = ${SUPERVISORD_INCLUDE_FILE}/*.ini" > ${SUPERVISORD_CONF} USER root EXPOSE 22 80 9001 RUN /usr/sbin/init & RUN /usr/sbin/telinit &

      

    ## 1.2 生成supervisor基础镜像
    -t 生成的镜像名称
    --rm 生成成功后删除中间镜像
    --no-cache 不使用之前生成后缓存的中间镜像
    注意命令后边跟的.,表示当前目录

    [root@dev leanote]# docker build -t zhuyr/supervisor:1.0 --rm --no-cache .
    
    [root@dev leanote]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    zhuyr/supervisor 1.0 e116f6895b37 About a minute ago 236.6 MB
    ubuntu 14.04 7c09e61e9035 7 days ago 187.9 MB
    

    ## 1.3 下载安装包

    [root@test2 leanote]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz
    [root@test2 leanote]# wget https://static.axboy.cn/leanote/leanote-linux-amd64-v2.6.1.bin.tar.gz
    
    # 2.制作leanote docker镜像
    ## 2.1 编写Dockerfile文件(修改原Dockerfile文件)
    镜像内包含 mongodb 和 leanote。
    使用ADD指令添加*.tar.gz时会自动解压。
    [root@dev leanote]# cat Dockerfile 
    # zhuyr/leanote:2.6.1
    # with mongodb
    
    FROM zhuyr/supervisor:1.0
    MAINTAINER zhuyr<304748716@qq.com>
    
    ADD init.sh /root/init.sh
    #ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    ADD supervisord.conf /etc/supervisord.conf
    COPY leanote-linux-amd64-v2.6.1.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.6.1.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"]
    [root@dev leanote]#
    
    ## 2.2 写supervisor文件
    supervisord.conf里配置启动的进程,mongodb启动时指定数据库文件目录/root/db以后存放mongodb数据,leanote启动时先运行init.sh,再运行run.sh
    [root@dev leanote]#  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目录作为数据卷挂载到了其他地方,这时就从备份文件恢复配置文件。
    [root@dev leanote]#  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 目录内容显示
    [root@dev leanote]# 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.6.1.bin.tar.gz
    -rw-r--r--. 1 root root 39554547 3月 7 20:35 mongodb-linux-x86_64-3.0.1.tgz
    -rw-r--r--. 1 root root 197 3月 7 20:31 supervisord.conf
    [root@dev leanoteDockerFile]#
    
    ## 2.5生成leanote镜像
    [root@dev leanoteDockerFile]# docker build -t zhuyr/leanote:2.6.1 --rm --no-cache .
    
    [root@dev leanoteDockerFile]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    zhuyr/leanote 2.4 60896a4094b8 12 seconds ago 477.4 MB
    zhuyr/supervisor 1.0 e116f6895b37 15 minutes ago 236.6 MB
    ubuntu 14.04 7c09e61e9035 7 days ago 187.9 MB
    [root@dev leanoteDockerFile]#
    
    # 3.运行docker
    第一次启动。
    三个目录,一个存放mongodb数据库文件,一个存放leanote配置文件,一个存放leanote附件。一个端口9000,用于访问leanote。
     
    [root@dev leanote]# docker run --name leanote -d -v /leanote/leanotedb:/root/db -v /leanote/conf/:/root/leanote/conf/ -v /leanote/files:/root/leanote/files -p 9000:9000 zhuyr/leanote:2.6.1

    后台初始帐户密码:admin abc123
     
    ## 3.1 修改mongodb数据库和leanote的配置文件
    [root@test2 leanote]# docker exec -it leanote /bin/bash
    [root@33106c3f0054 bin]# pwd
    /root/mongodb/bin
    [root@33106c3f0054 bin]# ./mongo
    >show dbs;
    leanote 0.078GB
    local 0.078GB
    > use leanote; switched to db leanote > db.createUser({ ... user:'zhuyr', ... pwd:'abc123', ... roles:[{role:'dbOwner',db:'leanote'}] ... }); Successfully added user: { "user" : "zhuyr", "roles" : [ { "role" : "dbOwner", "db" : "leanote" } ] } > db.auth("zhuyr","abc123"); 1 > #查看leanote配置文件 [root@33106c3f0054 leanote]# cd conf/ [root@33106c3f0054 conf]# pwd /root/leanote/conf [root@33106c3f0054 conf]# cat app.conf

    ## 4.问题处理

    如果mongodb里的leanote没导入成功,则进入容器重新执行以下命令:

    /root/mongodb/bin/mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/
     
     登录后,进入后台管理-配置-站点URL,修改成你的实际域名或IP地址如:http://172.16.160.210:9000
  • 相关阅读:
    win10 uwp 获得缩略图
    win10 uwp 获取指定的文件 AQS
    win10 uwp 使用 Geometry resources 在 xaml
    WPF 如何画出1像素的线
    Windows 10 快捷键汇总表格
    要让CLR挂掉的话……
    UWP 分享用那个图标
    UWP 分享用那个图标
    PHP jdtogregorian() 函数
    PHP jdtojewish() 函数
  • 原文地址:https://www.cnblogs.com/amoyzhu/p/10913014.html
Copyright © 2011-2022 走看看