用Docker构建LNMP环境(上)
利用docker搭建lnmp环境(上) 小知识: 1 2 3 docker镜像运行之后变成容器(dockerrun) Registry是Docker镜像的中央存储仓库(pull/push) https: //git.oschina.net/#从这个地方拉取git的仓库 1.源码克隆到自己的linux服务器上 1 2 3 4 5 6 7 8 [root@oldboy~]#gitclonehttps: //git.oschina.net/xxsl/docker-training.git InitializedemptyGitrepository in /root/docker-training/.git/ remote:Countingobjects:2045,done. remote:Compressingobjects:100%(1326/1326),done. remote:Total2045(delta681),reused2045(delta681) Receivingobjects:100%(2045/2045),7.22MiB|386KiB/s,done. Resolvingdeltas:100%(681/681),done. [root@oldboy~]# 2.创建centos7镜像其余的软件全部基于centos7 1 2 3 4 5 6 7 8 9 [root@oldboycentos7]#pwd /root/docker-training/centos7 [root@oldboycentos7]#dockerbuild-tcsphere/centos:7.1./ [root@oldboycentos7]#dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE csphere/centos7.1080063d1c72d6secondsago591.4MB jb/jobs03latestdd40474b2a4c17hoursago1.093MB jobs03latestdd40474b2a4c17hoursago1.093MB [root@oldboycentos7]# 3.解释说明Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@oldboycentos7]#catDockerfile # #MAINTAINERCarson,C.J.Zeong<zcy@nicescale.com> #DOCKER-VERSION1.6.2 # #DockerizingCentOS7:DockerfileforbuildingCentOSimages # FROMcentos:centos7.1.1503 MAINTAINERCarson,C.J.Zeong<zcy@nicescale.com> ENVTZ "Asia/Shanghai" #ENV环境变量以后在docker容器run指令使用,并在容器运行保持 ENVTERMxterm ADDaliyun-mirror.repo/etc/yum.repos.d/CentOS-Base.repo ADDaliyun-epel.repo/etc/yum.repos.d/epel.repo RUNyuminstall-ycurlwgettarbzip2unzipvim-enhancedpasswdsudoyum-utilshostnamenet-toolsrsyncman&&\ yuminstall-ygccgcc-c++gitmakeautomakecmakepatchlogrotatepython-devellibpng-devellibjpeg-devel&&\ yuminstall-y--enablerepo=epelpwgenpython-pip&&\ yumcleanall RUNpipinstallsupervisor#RUN执行的指令 ADDsupervisord.conf/etc/supervisord.conf#将本地的文件上传至/etc/下命名为supervisord.conf RUNmkdir-p/etc/supervisor.conf.d&&\ mkdir-p/ var /log/supervisor EXPOSE22#告诉docker服务端容器暴露的端口 ENTRYPOINT[ "/usr/bin/supervisord" , "-n" , "-c" , "/etc/supervisord.conf" ] 4.docker使用一个镜像运行一个容器 1 2 3 4 dockerrun-d-p2222:22不管此个容器是否停止下次系统还是用2222来映射咱们dockefile中的22端口 dockerrun-d-P2222:22容器重启以后系统会随机的分配一个没有使用的端口 --name容器的名字 -d后台 5.创建centos7.1容器 1 2 3 [root@oldboy~]#dockerrun-d-p2222:22--name base csphere/centos:7.1#通过csphere/centos:7.1创建一个名字为 base 放在后台运行的docker容器 55e9793e58c0f70ec2d358d2eeb11e1a1afebe7987d64339da0a30da995ef340#容器的长id号返回来 [root@oldboy~]# 6.查看创建的容器 1 2 3 [root@oldboy~]#dockerps-a#查看容器 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 55e9793e58c0csphere/centos:7.1"/usr/bin/supervisor2minutesagoUp2minutes0.0.0.0:2222->22/tcp base 7.创建php的容器(以及运行php的容器) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@oldboyphp-fpm]#dockerbuild-tcsphere/php-fpm:5.4. 最后的内容 Removingintermediatecontainera3b57f2eb456 Successfullybuilt38d1572aef94 [root@oldboyphp-fpm]#dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE csphere/php-fpm5.438d1572aef9436secondsago685MB csphere/centos7.1080063d1c72d49minutesago591.4MB [root@oldboyphp-fpm]#dockerrun-d-p8080:80--namewebsitecsphere/php-fpm:5.4 [root@oldboyphp-fpm]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES cf1f2bd73808csphere/php-fpm:5.4"/usr/bin/supervisor8secondsagoUp8seconds22/tcp,443/tcp,0.0.0.0:8080->80/tcpwebsite 55e9793e58c0csphere/centos:7.1"/usr/bin/supervisor33minutesagoUp33minutes0.0.0.0:2222->22/tcp base 测试容器OK 8进入一个docker内部查看 1 2 3 4 5 6 7 8 9 [root@oldboyphp-fpm]#dockerexec-itwebsite/bin/bash [root@cf1f2bd73808/]#supervisor supervisorctlsupervisord [root@cf1f2bd73808/]#supervisor supervisorctlsupervisord [root@cf1f2bd73808/]#supervisorctl nginxRUNNINGpid10,uptime0:07:30 php-fpmRUNNINGpid11,uptime0:07:30 supervisor>exit 9.创建mysql的容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@oldboymysql]#dockerbuild-tcsphere/mysql:5.5./ [root@oldboymysql]#dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE csphere/mysql5.563b2bd2cab9735secondsago725.1MB csphere/php-fpm5.438d1572aef9433minutesago685MB csphere/centos7.1080063d1c72dAboutanhourago591.4MB [root@oldboymysql]#dockerrun-d-p3305:3306--namedbservercsphere/mysql:5.5 36fb44b10702ad1eb38f646e381354ef8b2d832d27b54f8eb3ce5424b6c41e7e [root@oldboymysql]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 36fb44b10702csphere/mysql:5.5 "/scripts/start" 9secondsagoUp8seconds22/tcp,0.0.0.0:3305->3306/tcpdbserver cf1f2bd73808csphere/php-fpm:5.4"/usr/bin/supervisor27minutesagoUp27minutes22/tcp,443/tcp,0.0.0.0:8080->80/tcpwebsite 55e9793e58c0csphere/centos:7.1"/usr/bin/supervisorAboutanhouragoUpAboutanhour0.0.0.0:2222->22/tcp base 进入docker容器内部 [root@oldboy~]#dockerexec-itdbserver/bin/bash#进入容器的命令 10-v参数的使用 可以挂载一个目录到本地,docker投容器mysql这个容器如果被删除了那么还可以恢复数据数据文件还在的 此处的思想就是:先用-v 参数启动一个数据库的docker容器,然后删除容器,再次新建一个数据库的docker容器,,挂载的目录还是原来的目录可以看出数据依然还在 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 dockerrun-d-p3306:3306-v/ var /lib/docker/vfs/dir/mydata:/ var /lib/mysqlcsphere/mysql:5.5 dockerexec-ite5387295506f/bin/bash mysql showdatabases; createdatabasemydb; [root@oldboycentos7]#cd/ var /lib/docker/vfs/dir/mydata/ [root@oldboymydata]#ls aria_log.00000001ibdata1ib_logfile1mysqlperformance_schema aria_log_controlib_logfile0mydbmysql.socktest [root@oldboymydata]# 准备删除docker容器 [root@oldboymydata]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES e5387295506fcsphere/mysql:5.5 "/scripts/start" 36minutesagoUp36minutes22/tcp,0.0.0.0:3306->3306/tcpsuspicious_morse [root@oldboymydata]#dockerrm-fe5387295506f#强制删除一个容器也可以dockerstope5387295506f&&dockerrme5387295506f e5387295506f [root@oldboymydata]#cd/ var /lib/docker/vfs/dir/mydata/#可以看出容器被删除了但是数据还在 [root@oldboymydata]#ls aria_log.00000001ibdata1ib_logfile1mysqlperformance_schema aria_log_controlib_logfile0mydbmysql.socktest [root@oldboymydata]# [root@oldboymydata]#dockerrun-d-p3306:3306--namenewdb-v/ var /lib/docker/vfs/dir/mydata:/ var /lib/mysqlcsphere/mysql:5.5#生成新的数据进行再次挂载 d9dddf959cdfdf7506812b8da258e8ac74e3af5cdf3223bbc26b24fcb2289fee [root@oldboymydata]# [root@oldboymydata]#dockerexec-itnewdb/bin/bash#再次进入 [root@d9dddf959cdf/]#mysql showdatabases;#可以看出以前创建的数据库还在 本文转自 小小三郎1 51CTO博客,原文链接:http://blog.51cto.com/wsxxsl/1834558,如需转载请自行联系原作者