ibaobei 发表于 2018-10-1 12:41:04

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]
查看完整版本: docker搭建apache+php+mysql