docker搭建apache+php+mysql
容器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