说明,本实验在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   

  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 wget             #centos7默认没有mysql源,需要下载并安装  

  8. RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm       

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

  10. RUN yum -y install mysql-server         #安装mysql服务  

  11. RUN mysql_install_db --user=mysql       #创建数据库  

  12. ENV MYSQL_USER test         #用户名  

  13. ENV MYSQL_PASS password         #密码  

  14. ENV LC_ALL en_US.UTF-8      #中文支持  

  15. ADD build_table.sh /root/build_table.sh     #利用脚本创建数据库和表  

  16. RUN chmod u+x /root/build_table.sh  #给执行权限  

  17. RUN /root/build_table.sh      

  18. EXPOSE 3306         #导出3306端口  

  19. ADD run.sh /root/run.sh     #脚本启动  

  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        #安装apache,php  ||true 保证整个命令返回true  

  8. RUN yum -y install mysql php-mysqlnd        #安装mysql客户端 与 php-mysqlnd  

  9. RUN mkdir /var/log/httpd1           #创建必要目录  

  10. RUN mkdir /var/www1/      

  11. RUN mkdir /var/www1/html/  

  12. ENV MYSQL_ADDR 172.17.0.36:3306     #定义远程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 #添加测试文件  

  18. EXPOSE 80               #导出apache 80端口  

  19. ADD run.sh /root/run.sh     #添加启动脚本  

  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测试文件

 

  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 "";  

  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