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
[*] #use:store
[*] #date:2016-6-4
[*]
[*] FROM centos #基础镜像
[*] MAINTAINER niufeiy niufeiy@gmail.com #声明维护者信息
[*] WORKDIR /root/ #工作目录
[*] RUN yum -y install wget #centos7默认没有mysql源,需要下载并安装
[*] RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[*] RUN rpm -ivh /root/mysql-community-release-el7-5.noarch.rpm
[*] RUN yum -y install mysql-server #安装mysql服务
[*] RUN mysql_install_db --user=mysql #创建数据库
[*] ENV MYSQL_USER test #用户名
[*] ENV MYSQL_PASS password #密码
[*] ENV LC_ALL en_US.UTF-8 #中文支持
[*] ADD build_table.sh /root/build_table.sh #利用脚本创建数据库和表
[*] RUN chmod u+x /root/build_table.sh#给执行权限
[*] RUN /root/build_table.sh
[*] EXPOSE 3306 #导出3306端口
[*] ADD run.sh /root/run.sh #脚本启动
[*] 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;" #授权
[*] mysql -e "create database scores" #创建scores数据库
[*] mysql -e "create table scores.name_score(name char(20) not null,score int not null)DEFAULT CHARSET=utf8" #创建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 niufeiy@gmail.com
[*] WORKDIR /root/
[*] RUN yum -y install httpd php || true #安装apache,php||true 保证整个命令返回true
[*] RUN yum -y install mysql php-mysqlnd #安装mysql客户端 与 php-mysqlnd
[*] RUN mkdir /var/log/httpd1 #创建必要目录
[*] RUN mkdir /var/www1/
[*] RUN mkdir /var/www1/html/
[*] ENV MYSQL_ADDR 172.17.0.36:3306 #定义远程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 #添加测试文件
[*] EXPOSE 80 #导出apache 80端口
[*] ADD run.sh /root/run.sh #添加启动脚本
[*] RUN chmod u+x /root/run.sh
[*] CMD /root/run.sh
2、run.sh文件
#!/bin/bash
[*] httpd #启动httpd
[*] while true;do sleep 1000;done #防止脚本结束
3、test.php测试文件
说明:test.php所做的工作就是链接到指定mysql服务器,查询scores.name_score表,并按每条一行显示
4、创建上传镜像到docker hub
docker build -t niufeiy/centos-apache-php:v1 ./# docker push niufeiy/centos-apache-php:v1
三、启动容器
启动mysql容器
docker run -d --name test_mysql -P niufeiy/centos-mysql:v1
docker port 634d9b48e9ae 3306 #查看本机映射到3306的端口(49171)
启动apache-php容器
docker run -d --name test_apache-php -P -e MYSQL_ADDR=192.168.75.158:49171niufeiy/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
页:
[1]