(精品)(Docker系列之四)龙芯Fedora21平台制作feodra21-apache-php-mysql docker镜像

a.jpg

 
 在按照本文的方式制作镜像之前,首先要先创建基础镜像fedora21-tools,可以参考:
http://ask.loongnix.org/?/article/82 

 

创建feodra21-apache-php-mysql docker镜像的必要性
 
在已经创建的feodra21-tools镜像中只包含常用命令,并不包含Apache、PHP、Mysql,执行Apache、PHP、Mysql相关命令会有“command not found”错误提示,如下:
[root@04ee408d1304 /]# httpd -v
bash: httpd: command not found
[root@04ee408d1304 /]# php -v
bash: php: command not found
[root@04ee408d1304 /]# mysql -u root
bash: mysql: command not found
所以,为了方便开发者和部署服务器应用的管理员,快速的搭建Apache+PHP+Mysql服务器,做此镜像。
 实验环境
 
本文的实验都是在龙芯3A3000机器上。
操作系统是loongnix(Fedora21)20170726版本,
docker是1.12.2版本。
 
镜像内容
 
feodra21-apache-php-mysql镜像整合了Apache、PHP、Mysql
 
制作镜像前期准备
 
本文将演示使用Dockerfile如何创建镜像,Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。
 
在宿主机下创建一个 apache-php-mysql 文件夹,将Dockerfile和run.sh文件存到 apache-php-mysql 文件夹内,具体步骤为:
# mkdir /root/image/apache-php-mysql -p
# cd /root/image/apache-php-mysql/
# vi run.sh







  • 编写run.sh文件,如下代码所示:
#!/bin/bashcd '/usr' ; /usr/bin/mysqld_safe --datadir='/var/lib/mysql' &/usr/sbin/httpd &export LC_ALL=zh_CN.UTF-8export LANG=zh_CN.UTF-8/bin/bash
 可见run.sh所执行的操作是启动httpd和mysql,并运行/bin/bash文件。
  • 编写Dockerfile文件,如下代码所示:
# vi Dockerfile以下是Dockerfile文件包含的内容FROM feodra21-tools:latestRUN yum install -y "httpd"RUN yum install -y "php"RUN yum install -y "mysql"RUN yum install -y "php-mysql"RUN yum install -y "mariadb-server"RUN mysql_install_db --user=mysql --datadir=/var/lib/mysqlRUN sed -i /datadir=/a"character_set_server=utf8\ninit_connect='SET NAMES utf8'" /etc/my.cnfRUN sed -i /pid-file=/a"[client]\ndefault_character_set=utf8" /etc/my.cnfRUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 500M/g' /etc/php.iniRUN sed -i 's/post_max_size = 8M/post_max_size = 800M/g' /etc/php.iniADD run.sh /RUN chmod 777 /run.shCMD ["/run.sh"]
 
  • Dockerfile文件描述:
          1、FROM:  FROM指令指定的基础image,本文中指定已经创建好的fedora21-base镜像,格式为:                          镜像名称:镜像标签(TAG)。           2、RUN:  RUN可以运行任何被基础image支持的命令。本文中运行yum install 命令,下载安装                                  httpd、php、mysql等相关内容。            3、ADD: 构建指令,格式为:ADD <src> <dest>  从src复制文件到container的dest路径。本文中将上文提及到的run.sh复制到container的 / 目录下。           4、CMD:设置指令,用于container启动时指定的操作。本文中在container启动时运行ADD复制的run.sh文件。
  •  
 运行Dockerfile文件创建镜像​
  • 通过docker build命令创建镜像,代码如下所示:
# docker build -t feodra21-apache-php-mysql .
当Dockerfile文件中所有命令都Complete以后,最后会有如下输出,代表创建镜像成功:
Removing intermediate container da84d9ffbcd7Successfully built 204d157f7074
  
  • 验证feodra21-apache-php-mysql镜像是否创建成功,代码如下:
 
# docker imagesREPOSITORY                 TAG      IMAGE ID        CREATED         SIZEfeodra21-apache-php-mysql  latest   ed1f04fd6883    2 minutes ago   857.4 MBfeodra21-tools             latest   204d157f7074    20 hours ago    487.2 MBfedora21-base              21       099b24f7ff5a    2 days ago      206.9 MB
通过查看docker images的执行结果可以确定feodra21-apache-php-mysql镜像创建成功,fedora21-tools镜像就是Dockerfile文件中FROM 指定的基础镜像。 创建docker容器 创建好feodra21-apache-php-mysql镜像,就可以创建容器了,为了其他机器可以访问容器,在创建容器的时候要做网络桥接,代码如下:
[root@localhost apache-php-mysql]# docker run -i -t -d -p 8081:80 feodra21-apache-php-mysql1e0db6c0e675987f2ce688bd9b139238fa632c52c5c2261f3d53b6b74a6c5059[root@localhost apache-php-mysql]# docker psCONTAINER ID   IMAGE                       COMMAND      CREATED         STATUS          PORTS                  NAMES1e0db6c0e675   feodra21-apache-php-mysql   "/run.sh"    28 seconds ago  Up 26 seconds   0.0.0.0:8081->80/tcp   angry_lamport[root@localhost apache-php-mysql]# docker attach 1e0db6c0e675[root@1e0db6c0e675 usr]# 
docker run命令中,-i 代表容器可以接收键盘上的输入(主要用于在容器的命令上运行程序);-t 和 -i 配合使用;-d后台运行容器,并返回容器ID;-p 指定容器暴露的端口;8081:80 将容器的80端口暴露出来,并桥接到宿主机的8081端口上。 容器运行成功后可以看见一个明显的变化,就是命令行提示符已经由本机的机器名称(localhost)变成了容器的ID(1e0db6c0e675)。 至此,龙芯feodra21-apache-php-mysql容器创建成功,并且开始正常运行了! 验证Apache和mysql是否正常启动,具体步骤如下:
[root@1e0db6c0e675 /]# ps aux | grep httpdroot        10  0.0  0.2  49376 19680 ?        S    08:52   0:00 /usr/sbin/httpdapache     135  0.0  0.1  49520 11392 ?        S    08:52   0:00 /usr/sbin/httpdapache     136  0.0  0.1  49520 11392 ?        S    08:52   0:00 /usr/sbin/httpdapache     137  0.0  0.1  49376  9440 ?        S    08:52   0:00 /usr/sbin/httpdapache     138  0.0  0.1  49376  9440 ?        S    08:52   0:00 /usr/sbin/httpdapache     139  0.0  0.1  49376  9440 ?        S    08:52   0:00 /usr/sbin/httpdapache     148  0.0  0.1  49376  9424 ?        S    09:09   0:00 /usr/sbin/httpdroot       152  0.0  0.0   3552   528 ?        S+   09:14   0:00 grep --color=auto httpd[root@1e0db6c0e675 /]# ps aux | grep mysqlroot         9  0.0  0.0   4432  2576 ?        S    08:52   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysqlmysql      110  0.0  1.7 911856 138176 ?       Sl   08:52   0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sockroot       154  0.0  0.0   3552   512 ?        S+   09:14   0:00 grep --color=auto mysql
可见Apache和mysql正常启动了。 整合测试Apache+PHP+Mysql、容器内访问、宿主机访问、局域网访问,具体步骤如下:
  • 创建测试数据库:

[root@1e0db6c0e675 /]# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.0.14-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database loongson;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use loongson;
Database changed
MariaDB [loongson]> create table test (
-> id int(5) NOT NULL auto_increment key,
-> name varchar(50)
-> );
Query OK, 0 rows affected (0.07 sec)

MariaDB [loongson]> insert into test(name) value('loongson');
Query OK, 1 row affected (0.02 sec)

MariaDB [loongson]> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | loongson |
+----+----------+
1 row in set (0.01 sec)
可见,进入数据库、创建数据库和表、插入数据、查询数据都正常并显示无误。
 创建测试PHP代码和页面,首先Ctrl+C退出数据库编辑,具体步骤如下:
# cd /var/www/html/
# mkdir app
# cd app
# mkdir php
# cd php

           1、创建_db.inc文件,代码如下:
# vi _db.inc

_db.inc包含的内容如下:

<?php

function db_init()
{
global $conn;
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='';
$mysql_database='loongson';

$conn = mysql_connect($mysql_server_name, $mysql_username, $mysql_password)
or
fatal_error("error connecting database");

mysql_query("set names 'utf8'");

mysql_select_db($mysql_database);
}

function db_get_one_value($sql)
{
global $conn;

$result = mysql_query($sql, $conn);

while ($row = mysql_fetch_row($result))
{
return $row[0];
}

return "";
}

db_init();
?>

           2、创建_index.inc文件,代码如下:
# vi _index.inc

_index.inc包含内容如下:

<?php
include_once('_db.inc');

function get_test_name()
{
global $conn;

$sql = "select name from test";

return db_get_one_value($sql);
}

?>

           3、创建index.php文件,代码如下:
# vi index.php

index.php包含内容如下:

<?php
include_once('_index.inc');
?>

<h3>Test PHP to mysql</h3>
<?= get_test_name(); ?>

容器内、宿主机、局域网测试:
 
容器内: w3m http://localhost/app/php/index.php  显示 Test PHP to mysql  loongson
宿主机: http://localhost:8081/app/php/index.php   显示 Test PHP to mysql  loongson
局域网: http://<宿主机IP>:8081/app/php/index.php   显示 Test PHP to mysql  loongson
 

apache1.png



总结
 
本文描述在龙芯平台上通过Dockerfile制作Apahce+PHP+Mysql镜像的方法,并成功运行容器。
如果没有创建fedora21-tools,在执行Dockerfile文件时会提示基础镜像不存在的错误。
以上论述可供开发者和部署服务器应用的管理员参考。

1 个评论

编写Dockerfile时fedora拼写错误

要回复文章请先登录注册