http://ask.loongnix.org/?/article/86
在按照本文的方式制作镜像之前,首先要先创建基础镜像feodra21-apache-php-mysql,可以参考:
http://ask.loongnix.org/?/article/85
创建feodra21-loongson-app docker镜像的必要性
可以方便快捷的搭建和使用龙芯“应用公社”。
实验环境
本文的实验都是在龙芯3A3000机器上。
操作系统是loongnix(Fedora21)20170726版本,
docker是1.12.2版本。
镜像内容
feodra21-loongson-app镜像包含龙芯“应用公社”的代码和数据库,可以直接运行。
制作镜像前期准备
本文将演示使用Dockerfile如何创建镜像,Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。
在宿主机下创建一个 loongson-app 文件夹,将Dockerfile和run.sh文件存到 loongson-app 文件夹内,具体步骤为:
# mkdir /root/image/loongson-app -p # cd /root/image/loongson-app # 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-apache-php-mysql:latestRUN git clone https://github.com/jinguojie-loongson/loongson-app.gitRUN rm -rf /var/www/html/appRUN cp -rf /loongson-app /var/www/html/appRUN /bin/sh -c ' /run.sh && sleep 2 && mysql -u root -e " source /var/www/html/app/sql/sql.txt " 'RUN cp -rf /var/www/html/app/data /opt/dataRUN chmod 777 /opt/data -RADD run.sh /RUN chmod 777 /run.shCMD ["/run.sh"]
- Dockerfile文件描述:
1、FROM: FROM指令指定的基础image,本文中指定已经创建好的fedora21-apache-php-mysql镜像,格式为: 镜像名称:镜像标签(TAG)。 2、RUN: RUN可以运行任何被基础image支持的命令。 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-loongson-app .
当Dockerfile文件中所有命令都Complete以后,最后会有如下输出,代表创建镜像成功:
Removing intermediate container ac88f28d2a6bSuccessfully built 117acaf888ef
- 验证feodra21-loongson-app镜像是否创建成功,代码如下:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE feodra21-loongson-app latest 117acaf888ef 5 minutes ago 988.1 MB feodra21-apache-php-mysql latest 0ac06cb06032 6 hours ago 857.5 MB fedora21-base 21 65e35642a4da 27 hours ago 206.9 MB feodra21-tools latest 50f2048daeb1 28 hours ago 487.2 MB
通过查看docker images的执行结果可以确定feodra21-loongson-app镜像创建成功,fedora21-apache-php-mysql镜像就是Dockerfile文件中FROM 指定的基础镜像。
创建docker容器
创建好feodra21-loongson-app镜像,就可以创建容器了,为了其他机器可以访问容器,在创建容器的时候要做网络桥接,代码如下:
[root@localhost loongson-app]# docker run -i -t -d -p 8082:80 feodra21-loongson-app da0c0158c364322d2218195ca3116e0e75f1aa4712b67c3ddb82a0f02084dc45 [root@localhost loongson-app]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES da0c0158c364 feodra21-loongson-app "/app-run.sh" 6 seconds ago Up 5 seconds 0.0.0.0:8082->80/tcp drunk_mcnulty [root@localhost loongson-app]# docker attach da0c0158c364 [root@da0c0158c364 usr]#
docker run命令中,-i 代表容器可以接收键盘上的输入(主要用于在容器的命令上运行程序);-t 和 -i 配合使用;-d后台运行容器,并返回容器ID;-p 指定容器暴露的端口;8082:80 将容器的80端口暴露出来,并桥接到宿主机的8082端口上。
容器运行成功后可以看见一个明显的变化,就是命令行提示符已经由本机的机器名称(localhost)变成了容器的ID(da0c0158c364)。
至此,龙芯feodra21-loongson-app容器创建成功,并且开始正常运行了!
验证Apache和mysql是否正常启动,具体步骤如下:
[root@da0c0158c364 usr]# ps aux | grep mysql root 7 0.1 0.0 4496 2608 ? S 12:21 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql mysql 122 1.0 1.7 1305104 137936 ? Sl 12:21 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.sock root 154 0.0 0.0 3552 528 ? S+ 12:22 0:00 grep --color=auto mysql [root@da0c0158c364 usr]# ps aux | grep httpd root 8 1.8 0.2 49376 19680 ? S 12:21 0:00 /usr/sbin/httpd apache 134 0.0 0.1 49376 9440 ? S 12:21 0:00 /usr/sbin/httpd apache 135 0.0 0.1 49376 9440 ? S 12:21 0:00 /usr/sbin/httpd apache 136 0.0 0.1 49376 9440 ? S 12:21 0:00 /usr/sbin/httpd apache 137 0.0 0.1 49376 9440 ? S 12:21 0:00 /usr/sbin/httpd apache 138 0.0 0.1 49376 9440 ? S 12:21 0:00 /usr/sbin/httpd root 156 0.0 0.0 3552 512 ? S+ 12:22 0:00 grep --color=auto httpd
可见Apache和mysql正常启动了。
验证mysql数据库脚本是否正常执行,具体步骤如下:
[root@da0c0158c364 usr]# mysql -u root MariaDB [(none)]> use app MariaDB [app]> select id, name from app; +--------+--------------+ | id | name | +--------+--------------+ | 1 | WPS Office | | 2 | QQ | | 3 | 扫雷 | | 4 | Photoshop | | 5 | 百度盘 | | 6 | 同花顺 | | 999999 | 应用公社 | +--------+--------------+
验证data目录是否正常复制到/opt目录下,具体步骤如下:
[root@da0c0158c364 usr]# cd /opt/ [root@da0c0158c364 opt]# ll total 4 drwxrwxrwx 7 root root 4096 Sep 28 12:14 data [root@da0c0158c364 opt]# cd data [root@da0c0158c364 data]# ll total 20 drwxrwxrwx 2 root root 4096 Sep 28 12:14 app drwxrwxrwx 2 root root 4096 Sep 28 12:14 hot drwxrwxrwx 2 root root 4096 Sep 28 12:14 icon drwxrwxrwx 2 root root 4096 Sep 28 12:14 screen drwxrwxrwx 2 root root 4096 Sep 28 12:14 tmp
可见data目录成功复制到/opt目录下,并且权限修改成功。
容器内、宿主机、局域网测试:
容器内: w3m http://localhost/app/php/index.php
宿主机: http://localhost:8082/app/php/index.php
局域网:
总结
本文描述在龙芯平台上通过Dockerfile制作龙芯应用公社镜像的方法,并成功运行容器。
如果没有创建fedora21-apache-php-mysql,在执行Dockerfile文件时会提示基础镜像不存在的错误。
以上论述可供开发者和部署服务器应用的管理员参考。