Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402107
  • 博文数量: 112
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-29 13:41
文章分类

全部博文(112)

文章存档

2020年(1)

2018年(10)

2017年(27)

2016年(18)

2015年(31)

2014年(25)

分类: 虚拟化

2017-11-29 17:33:31

基于CentOS Linux release 7.4.1708 (Core)镜像的基础上,搭建一个基于apache、php和mysql的web应用。
本案例容器的部署架构包括两个容器:web容器和mysql数据库容器。
1、构建mysql镜像:
1.1、构建mysql镜像的Dockerfile:

点击(此处)折叠或打开

  1. #名称:mysql容器
  2. #用途:后端数据库持久化服务
  3. #创建时间:2017.11.28
  4. #应用centos基础镜像
  5. FROM centos
  6. #作者信息
  7. MAINTAINER hyunmin email
  8. #工作目录
  9. WORKDIR /root/
  10. #运行的命令,centos7默认不包含mysql源,需要安装wget在下载mysql源并安装。
  11. RUN yum -y install wget
  12. RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  13. RUN rpm -ivh /root/mysql-community-release-el7-5.noarch.rpm
  14. #用yum安装mysql服务,使用mysql_install_db创建一个数据库,--user指定使用数据库的用户名;
  15. RUN yum -y install mysql-server
  16. RUN mysql_install_db --user=mysql
  17. #通过环境变量指定mysql使用的用户名和密码。
  18. ENV MYSQL_USER test
  19. ENV MYSQL_PASS 123456
  20. ENV LC_ALL en_US.UTF-8
  21. #ADD 将宿主机指定的文件复制到容器中
  22. ADD build.sh /root/build.sh
  23. RUN chmod u+x /root/build.sh
  24. RUN /root/build.sh
  25. #导出3306端口,以便外部访问;
  26. EXPOSE 3306
  27. ADD run.sh /root/run.sh
  28. RUN chmod u+x /root/run.sh
  29. #执行的脚本
  30. CMD /root/run.sh
build.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. mysqld_safe &
  3. sleep 3
  4. mysql -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASS' WITH GRANT OPTION;"
  5. mysql -e "create database scores"
  6. mysql -e "create table scores.name_score(name char(20) not null,score int not null)DEFAULT CHARSET=utf8"
  7. mysql -e "insert into scores.name_score values('song',100),('hyunmin',99)"
run.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. mysqld_safe
1.2、构建和上传镜像

点击(此处)折叠或打开

  1. #-t 为新镜像做标记
  2. [root@centos mysql_dockerfile]# docker build -t sxm5211258/centos-mysql:v1 ./
  3. ...
  4. Successfully built d488d02b2a17
  5. #上传构建好的镜像,可以先登录到官方的docker hub,也可以直接执行docker push后在登录。
  6. [root@centos mysql_dockerfile]# docker login
  7. #上传
  8. [root@centos mysql_dockerfile]# docker push sxm5211258/centos-mysql:v1
  9. ...
  10. Pushing tag for rev [d488d02b2a17] on

2、构建apache+php镜像

2.1、Dockerfile:

点击(此处)折叠或打开

  1. #名称:Apache+PHP容器
  2. #用途:web前端服务
  3. #创建时间:2017.11.28
  4. #基础镜像centos
  5. FROM centos
  6. #作者信息
  7. MAINTAINER hyunmin songxm1986@126.com
  8. #工作目录
  9. WORKDIR /root/
  10. #安装httpd和php,要注意安装过程中可能出现错误导致命令运行失败而终端build镜像,可以忽略错误,继续执行,所以使用||true来保证build的顺利进行。
  11. RUN yum -y install httpd php || true
  12. #安装mysql客户端(用来和远程mysql服务端通信)和php-mysqlnd(用于php和mysql的沟通驱动);
  13. RUN yum -y install mysql php-mysqlnd
  14. #创建目录,apache需要
  15. RUN mkdir /var/log/httpd
  16. RUN mkdir /var/www/
  17. RUN mkdir /var/www/html/
  18. #定义环境变量,下面的ip地址就是刚才创建mysql容器的ip地址,可以通过docker exec 725 ifconfig查到ip信息;也可以在启动容器的时候通过-e来指定环境变量:docker run --name test_apache-php -d -P -e MYSQL_ADDR=172.17.0.65 -e MYSQL_USER=test -e MYSQL_PASS='123456' sxm5211258/centos-apache-php:v1
  19. ENV MYSQL_ADDR 172.17.0.65:3306
  20. ENV MYSQL_USER test
  21. ENV MYSQL_PASS 123456
  22. #定义启动服务必需的环境变量TERM,并定义支持中文;
  23. ENV TERM linux
  24. ENV LC_ALL en_US.UTF-8
  25. #自定义了一个php页面。
  26. ADD test.php /var/www/html/test.php
  27. #导出apache的服务端口80
  28. EXPOSE 80
  29. #添加启动脚本
  30. ADD run.sh /root/run.sh
  31. RUN chmod u+x /root/run.sh
  32. CMD /root/run.sh

test.php

点击(此处)折叠或打开

  1. #连接到指定的mysql服务端,查询scores.name_score表,并按每条一行方式输出查询结果。
  2. <?php
  3.     $con = mysql_connect(getenv("MYSQL_ADDR"),getenv("MYSQL_USER"),getenv("MYSQL_PASS"));
  4.     if (!$con)
  5.     {
  6.         die('Fail:' . mysql_error());
  7.     }
  8.     else
  9.     {
  10.         mysql_query("SET NAMES utf8");
  11.         mysql_select_db("scores", $con);
  12.         $result = mysql_query("SELECT * FROM name_score");
  13.         while($row = mysql_fetch_array($result))
  14.         {
  15.             echo $row['name'] . " " . $row['score'];
  16.             echo "
    "
    ;
  17.         }
  18.     }
  19.     mysql_close($con);
  20. ?>
run.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. httpd
  3. #防止脚本结束
  4. while true;do sleep 1000;done

2.2、构建和上传镜像

点击(此处)折叠或打开

  1. [root@centos web_dockerfile]# docker build -t sxm5211258/centos-apache-php:v1 ./
  2. ...
  3. Successfully built 422617efbf38
  4. [root@centos web_dockerfile]# docker push sxm5211258/centos-apache-php:v1
  5. ...
  6. Pushing tag for rev [422617efbf38] on


3、启动容器

点击(此处)折叠或打开

  1. [root@centos web_dockerfile]# docker run --name test_mysql -d -P -e MYSQL_USER=test -e MYSQL_PASS='123456' sxm5211258/centos-mysql:v1
  2. 72508371c932...
  3. [root@centos web_dockerfile]# docker run --name test_apache-php -d -P -e MYSQL_ADDR=172.17.0.65 -e MYSQL_USER=test -e MYSQL_PASS='123456' sxm5211258/centos-apache-php:v1
  4. aeb42be3d192...
  5. [root@centos web_dockerfile]# docker port 725 3306
  6. 0.0.0.0:32778
  7. [root@centos web_dockerfile]# docker port aeb 80
  8. 0.0.0.0:32780
  9. [root@centos web_dockerfile]# docker ps
  10. aeb42be3d192        sxm5211258/centos-apache-php:v1   "/bin/sh -c /root/ru   59 minutes ago      Up 59 minutes       0.0.0.0:32780->80/tcp     test_apache-php
  11. 72508371c932        sxm5211258/centos-mysql:v1        "/bin/sh -c /root/ru   24 hours ago        Up About an hour    0.0.0.0:32778->3306/tcp   test_mysql
  12. #在ubuntu主机上测试
  13. root@ubuntu:/home/ubuntu/mysql_dockerfile# curl
  14. song 100
    hyunmin 99


ie测试:









阅读(2260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~