docker搭建apache+php+mysql

说明,本实验在centos7——64位下搭建,两个容器,用Dockerfie实现

容器1:mysql       包括文件Dockerfile, build_table.sh, run.sh

容器2:php+apache   包括文件Dockerfile, run.sh

测试文件:test.php

本文参考书籍《Docker开发实践》作者:曾金龙 肖新华 刘清


一、mysql镜像创建及上传

1、Dockerfile文件

#name:Mydql<span style="white-space:pre"> </span>  

  1. #use:store  

  2. #date:2016-6-4  

  3.   

  4. FROM centos<span style="white-space:pre">     </span>#基础镜像  

  5. MAINTAINER niufeiy [email protected]<span style="white-space:pre">        </span>#声明维护者信息  

  6. WORKDIR /root/<span style="white-space:pre">          </span>#工作目录  

  7. RUN yum -y install wget<span style="white-space:pre">             </span>#centos7默认没有mysql源,需要下载并安装  

  8. RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm<span style="white-space:pre">     </span>  

  9. RUN rpm -ivh /root/mysql-community-release-el7-5.noarch.rpm  

  10. RUN yum -y install mysql-server<span style="white-space:pre">         </span>#安装mysql服务  

  11. RUN mysql_install_db --user=mysql<span style="white-space:pre">       </span>#创建数据库  

  12. ENV MYSQL_USER test<span style="white-space:pre">         </span>#用户名  

  13. ENV MYSQL_PASS password<span style="white-space:pre">         </span>#密码  

  14. ENV LC_ALL en_US.UTF-8<span style="white-space:pre">      </span>#中文支持  

  15. ADD build_table.sh /root/build_table.sh<span style="white-space:pre">     </span>#利用脚本创建数据库和表  

  16. RUN chmod u+x /root/build_table.sh<span style="white-space:pre">  </span>#给执行权限  

  17. RUN /root/build_table.sh<span style="white-space:pre">    </span>  

  18. EXPOSE 3306<span style="white-space:pre">         </span>#导出3306端口  

  19. ADD run.sh /root/run.sh<span style="white-space:pre">     </span>#脚本启动  

  20. RUN chmod u+x /root/run.sh  

  21. CMD /root/run.sh  

2、build_table.sh文件

#!bin/bash  

  1. mysqld_safe &  

  2. sleep 3  

  3. mysql -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASS' WITH GRANT OPTION;"<span style="white-space:pre">      </span>#授权  

  4. mysql -e "create database scores"<span style="white-space:pre">   </span>#创建scores数据库<span style="white-space:pre">   </span>  

  5. mysql -e "create table scores.name_score(name char(20) not null,score int not null)DEFAULT CHARSET=utf8"<span style="white-space:pre">    </span>#创建name_score表格  

  6. mysql -e "insert into scores.name_score values ('李明',80),('张军',90),('王小二',95)"  


3、run.sh文件

#!/bin/bash  

  1. mysqld_safe  


3、创建上传镜像到docker hub

3个文件都准备好了,开始创建

创建镜像,其中niufeiy是我docker hub账户名称

# docker build -t niufeiy/centos-mysql:v1 ./       #成功会返回Successfully built 230ssn5d15d 字样  


通过docker push上传

# docker push niufeiy/centos-mysql:v1  

第一次需要提示输入账号和密码,如果没有账号,请自行注册

现在mysql镜像就注册好了



二、php+apache镜像创建及上传

与mysql类似

1、Dockerfile文件

#name:PHP + APACHE  

  1. #use:store  

  2. #date:2016-6-4  

  3.   

  4. FROM centos  

  5. MAINTAINER niufeiy [email protected]  

  6. WORKDIR /root/  

  7. RUN yum -y install httpd php || true<span style="white-space:pre">        </span>#安装apache,php  ||true 保证整个命令返回true  

  8. RUN yum -y install mysql php-mysqlnd<span style="white-space:pre">        </span>#安装mysql客户端 与 php-mysqlnd  

  9. RUN mkdir /var/log/httpd1<span style="white-space:pre">           </span>#创建必要目录  

  10. RUN mkdir /var/www1/<span style="white-space:pre">    </span>  

  11. RUN mkdir /var/www1/html/  

  12. ENV MYSQL_ADDR 172.17.0.36:3306<span style="white-space:pre">     </span>#定义远程mysql地址、用户名和密码 ip为docker ip  

  13. ENV MYSQL_USRR test  

  14. ENV MYSQL_PASS password  

  15. ENV TERM linux  

  16. ENV LC_ALL en_US.UTF-8  

  17. ADD test.php /var/www/html/test.php<span style="white-space:pre"> </span>#添加测试文件  

  18. EXPOSE 80<span style="white-space:pre">               </span>#导出apache 80端口  

  19. ADD run.sh /root/run.sh<span style="white-space:pre">     </span>#添加启动脚本  

  20. RUN chmod u+x /root/run.sh  

  21. CMD /root/run.sh  


2、run.sh文件

#!/bin/bash  

  1. httpd   #启动httpd  

  2. while true;do sleep 1000;done<span style="white-space:pre">   </span>#防止脚本结束  


3、test.php测试文件

<?php 

  1.     $con = mysql_connect(getenv("MYSQL_ADDR"),getenv("MYSQL_USER"),getenv("MYSQL_PASS"));  

  2.     if(!$con)  

  3.     {  

  4.         die('失败: '.mysql_error());  

  5.     }  

  6.     else  

  7.     {  

  8.         mysql_query("SET NAMES utf8");  

  9.         mysql_select_db("scores",$con);  

  10.         $result = mysql_query("SELETC * FROM name_score");  

  11.         while($row = mysql_fetch_array($$result))  

  12.         {  

  13.             echo $row['name']." ".$row['score'];  

  14.             echo "<br />";  

  15.         }  

  16.     }  

  17.     mysql_close($con);  

  18. ?>  

说明:test.php所做的工作就是链接到指定mysql服务器,查询scores.name_score表,并按每条一行显示

4、创建上传镜像到docker hub

docker build -t niufeiy/centos-apache-php:v1 ./<pre name="code" class="html"># docker push niufeiy/centos-apache-php:v1   




三、启动容器

启动mysql容器

docker run -d --name test_mysql -P niufeiy/centos-mysql:v1  

docker port 634d9b48e9ae 3306 <span style="white-space:pre">    </span>#查看本机映射到3306的端口(49171)  


启动apache-php容器

docker run -d --name test_apache-php -P -e MYSQL_ADDR=192.168.75.158:49171  niufeiy/centos-apache-php:v1  

说明:192.168.75.158为宿主机ip,49171端口为映射到mysql的都主机端口

查看apache对应的宿主机端口

#docker port 458c5ae86cc 80   #对应宿主机49172端口  

四、测试


接下来就可以通过浏览器访问该web服务了

http;//192.168.75:19172/test.php


猜你喜欢

转载自blog.51cto.com/sf1314/2103884