(精品)(Docker系列之五)龙芯Fedora21平台制作feodra21-loongson-app docker镜像

在按照本文的方式制作镜像之前,首先要先创建基础镜像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
局域网: 
 

Screenshot-龙芯应用公社_-_Chromium.png

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

0 个评论

要回复文章请先登录注册