1. 程式人生 > >docker搭建apache+php+mysql

docker搭建apache+php+mysql

docker搭建apache+php+m

說明,本實驗在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. FROM centos<span style="white-space:pre"> </span>#基礎鏡像

  4. MAINTAINER niufeiy [email protected]<span style="white-space:pre"> </span>#聲明維護者信息

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

  6. RUN yum -y install wget<span style="white-space:pre"> </span>#centos7默認沒有mysql源,需要下載並安裝

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

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

  9. RUN yum -y install mysql-server<span style="white-space:pre"> </span>#安裝mysql服務

  10. RUN mysql_install_db --user=mysql<span style="white-space:pre"> </span>#創建數據庫

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

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

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

  14. ADD build_table.sh /root/build_table.sh<span style="white-space:pre"> </span>#利用腳本創建數據庫和表

  15. RUN chmod u+x /root/build_table.sh<span style="white-space:pre"> </span>#給執行權限

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

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

  18. ADD run.sh /root/run.sh<span style="white-space:pre"> </span>#腳本啟動

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

  20. 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. FROM centos

  4. MAINTAINER niufeiy [email protected]

  5. WORKDIR /root/

  6. RUN yum -y install httpd php || true<span style="white-space:pre"> </span>#安裝apache,php ||true 保證整個命令返回true

  7. RUN yum -y install mysql php-mysqlnd<span style="white-space:pre"> </span>#安裝mysql客戶端 與 php-mysqlnd

  8. RUN mkdir /var/log/httpd1<span style="white-space:pre"> </span>#創建必要目錄

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

  10. RUN mkdir /var/www1/html/

  11. ENV MYSQL_ADDR 172.17.0.36:3306<span style="white-space:pre"> </span>#定義遠程mysql地址、用戶名和密碼 ip為docker ip

  12. ENV MYSQL_USRR test

  13. ENV MYSQL_PASS password

  14. ENV TERM linux

  15. ENV LC_ALL en_US.UTF-8

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

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

  18. ADD run.sh /root/run.sh<span style="white-space:pre"> </span>#添加啟動腳本

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

  20. 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


docker搭建apache+php+mysql