首页 > 编程知识 正文

docker拉取镜像,制作docker镜像centos

时间:2023-05-06 20:37:58 阅读:155055 作者:622

# 1.创建基本镜像的leanote使用mongodb保存数据。 如果将mongodb单独作为一个镜像,则初始化数据时很麻烦,所以最终决定将mongodb和leanote放在同一个镜像中。 每次启动docker容器时,都会执行进程的前台。 前台进程完成后,docker容器将退出,并在docker stop期间向前台进程发送信号,以便前台进程可以成功完成,但后台进程不会收到退出信号。 前台进程结束后,后台进程将强制结束。 如果只是简单地启动mongodb和leanote,则在mongodb后台运行,在leanote后台运行,在退出容器时,leanote会正常退出,但mongodb会非法退出,mmongodb 一个解决方案是使用supervisor作为前台进程,其他进程作为supervisor的子进程。 # 1.1 .创建docker file文件,然后使用easy_install安装supervisor

CD/home/Zhu yr/leanote [ root @ devleanote ] # catdockerfilefromcentosmaintainerzhuyr 304748716 @ QQ.com # supervisor简介supervisor临时文件路径(日志文件、sock文件、pid文件) envsupervisord _ tmp _ conf=/tmp/supervisor # supervisor程序块文件阻止envsupervisord _ include _ file=/etc/supervisor dfile # web管理界面的IPENV SUPERVISORD_WEB_IP=*# web管理界面中的PEB web管理界面帐户envsupervisord _ web _ account=admin # web管理界面密码envsupervisord _ web _ password run mkdir-p $ { supervisor d _ include _ file } runyum-yupdaterunyuminstall-ypython-setuptoolswgettelinitrunwget---no-check-certificate 3359 bootstrap.pypa.pypa “[ UNIX _ http _ server ] _ nfile=$ { supervisor d _ tmp _ conf }/supervisor d _ tmp } nport=$ { supervisor d _ web n username=$ { supervisor d _ web _ account } nog file=$ { supervisor d _ tmp _ conf }/supervisor d.log nlog file _ nog n pidfile=$ { supervisor d _ tmp _ conf }/supervisor d.PIDn nodaemon=falsenmin FDS=1024 nmin procs=200n n nserver URL=UNIX ://$ { supervisor d _ tmp _ conf }/supervisor.sockn [ include ]nfiles=$ { supervisor d }

# 1.2生成基于supervisor的镜像--t生成的镜像名称- -如果RM生成成功,则删除中间镜像--no-cache不使用前面生成并缓存的中间镜像警告命令,而是将当前目录设置为

[ root @ devleanote ] # docker build-tzhuyr/supervisor :1.0-- RM-- no-cache.[ root @ devleanote ] # dockerimagesgess

6 MBubuntu 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.tsdxwz.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 mongodbFROM zhuyr/supervisor:1.0MAINTAINER zhuyr<304748716@qq.com>ADD init.sh /root/init.sh#ADD supervisord.conf /etc/supervisor/conf.d/supervisord.confADD supervisord.conf /etc/supervisord.confCOPY leanote-linux-amd64-v2.6.1.tsdxwz.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.tsdxwz.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/tsdxwz/run.shEXPOSE 9000CMD ["/usr/tsdxwz/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/tsdxwz/mongod --dbpath /root/db[program:leanote]command=/tsdxwz/bash -c "/root/init.sh && /root/leanote/tsdxwz/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#!/tsdxwz/bash#set -m# 如果数据库未初始化,则初始化数据库if [ ! -f "/root/db/already-init-db" ] ; thentouch /root/db/already-init-db/root/mongodb/tsdxwz/mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/fi# 如果配置文件不存在,则复制配置文件if [ ! -f "/root/leanote/conf/app.conf" ] ; thencp /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.tsdxwz.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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEzhuyr/leanote 2.4 60896a4094b8 12 seconds ago 477.4 MBzhuyr/supervisor 1.0 e116f6895b37 15 minutes ago 236.6 MBubuntu 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 /tsdxwz/bash[root@33106c3f0054 tsdxwz]# pwd/root/mongodb/tsdxwz[root@33106c3f0054 tsdxwz]# ./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/tsdxwz/mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/    登录后,进入后台管理-配置-站点URL,修改成你的实际域名或IP地址如:http://172.16.160.210:9000

转载于:https://www.cnblogs.com/amoyzhu/p/10913014.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。