docker搭建apache+php+mysql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
#use:store
#date:2016-6-4
FROM centos<span style="white-space:pre"> </span>#基础镜像
MAINTAINER niufeiy [email protected]<span style="white-space:pre"> </span>#声明维护者信息
WORKDIR /root/<span style="white-space:pre"> </span>#工作目录
RUN yum -y install wget<span style="white-space:pre"> </span>#centos7默认没有mysql源,需要下载并安装
RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm<span style="white-space:pre"> </span>
RUN rpm -ivh /root/mysql-community-release-el7-5.noarch.rpm
RUN yum -y install mysql-server<span style="white-space:pre"> </span>#安装mysql服务
RUN mysql_install_db --user=mysql<span style="white-space:pre"> </span>#创建数据库
ENV MYSQL_USER test<span style="white-space:pre"> </span>#用户名
ENV MYSQL_PASS password<span style="white-space:pre"> </span>#密码
ENV LC_ALL en_US.UTF-8<span style="white-space:pre"> </span>#中文支持
ADD build_table.sh /root/build_table.sh<span style="white-space:pre"> </span>#利用脚本创建数据库和表
RUN chmod u+x /root/build_table.sh<span style="white-space:pre"> </span>#给执行权限
RUN /root/build_table.sh<span style="white-space:pre"> </span>
EXPOSE 3306<span style="white-space:pre"> </span>#导出3306端口
ADD run.sh /root/run.sh<span style="white-space:pre"> </span>#脚本启动
RUN chmod u+x /root/run.sh
CMD /root/run.sh
2、build_table.sh文件
#!bin/bash
mysqld_safe &
sleep 3
mysql -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASS' WITH GRANT OPTION;"<span style="white-space:pre"> </span>#授权
mysql -e "create database scores"<span style="white-space:pre"> </span>#创建scores数据库<span style="white-space:pre"> </span>
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表格
mysql -e "insert into scores.name_score values ('李明',80),('张军',90),('王小二',95)"
3、run.sh文件
#!/bin/bash
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
#use:store
#date:2016-6-4
FROM centos
MAINTAINER niufeiy [email protected]
WORKDIR /root/
RUN yum -y install httpd php || true<span style="white-space:pre"> </span>#安装apache,php ||true 保证整个命令返回true
RUN yum -y install mysql php-mysqlnd<span style="white-space:pre"> </span>#安装mysql客户端 与 php-mysqlnd
RUN mkdir /var/log/httpd1<span style="white-space:pre"> </span>#创建必要目录
RUN mkdir /var/www1/<span style="white-space:pre"> </span>
RUN mkdir /var/www1/html/
ENV MYSQL_ADDR 172.17.0.36:3306<span style="white-space:pre"> </span>#定义远程mysql地址、用户名和密码 ip为docker ip
ENV MYSQL_USRR test
ENV MYSQL_PASS password
ENV TERM linux
ENV LC_ALL en_US.UTF-8
ADD test.php /var/www/html/test.php<span style="white-space:pre"> </span>#添加测试文件
EXPOSE 80<span style="white-space:pre"> </span>#导出apache 80端口
ADD run.sh /root/run.sh<span style="white-space:pre"> </span>#添加启动脚本
RUN chmod u+x /root/run.sh
CMD /root/run.sh
2、run.sh文件
#!/bin/bash
httpd #启动httpd
while true;do sleep 1000;done<span style="white-space:pre"> </span>#防止脚本结束
3、test.php测试文件
<?php
$con = mysql_connect(getenv("MYSQL_ADDR"),getenv("MYSQL_USER"),getenv("MYSQL_PASS"));
if(!$con)
{
die('失败: '.mysql_error());
}
else
{
mysql_query("SET NAMES utf8");
mysql_select_db("scores",$con);
$result = mysql_query("SELETC * FROM name_score");
while($row = mysql_fetch_array($$result))
{
echo $row['name']." ".$row['score'];
echo "<br />";
}
}
mysql_close($con);
?>
说明: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
以上是关于docker搭建apache+php+mysql的主要内容,如果未能解决你的问题,请参考以下文章
利用docker-compose搭建LAMP+phpmyadmin环境