前面讲到了创建MariaDB,这次在前面的基础上搭建phpMyAdmin服务,以便友好的管理数据库MariaDB。MariaDB的docker独立出来,这样方便管理,易于扩展。这次我们基于Dockerfile方式创建剩余的服务,Dockerfile也是官方推荐的创建镜像方法。
创建Apache+PHP+phpMyAdmin镜像
首先启动MariaDB的容器

在上一节中我们知道数据库的用户名是root,密码是123456,但是我们还缺少数据库的ip地址,我们使用如下方法获取docker实例的ip地址,是172.17.0.3

[root@test01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e78c466919e liuxin/centos-mariadb:v1 "/root/run.sh" 11 hours ago Up 3 hours 0.0.0.0:13306->3306/tcp dreamy_bell
[root@test01 ~]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' 2e78c466919e
172.17.0.3
[root@test01 ~]#
首先创建目录和文件
[root@test01 ~]# mkdir phpMyAdmin_dockerfile && cd phpMyAdmin_dockerfile
[root@test01 phpMyAdmin_dockerfile]# ls
config.inc.php Dockerfile httpd_init.sh phptest.php run.sh
编辑Dockerfile文件

内容如下。具体每行的意思已经添加到注释中了

[root@test01 phpMyAdmin_dockerfile]# cat Dockerfile 

##使用的基础镜像
FROM centos:7.4.1708 #添加作者信息
MAINTAINER liuxin 842887233@qq.com #工作目录
WORKDIR /root/ #安装httpd和php,并忽略错误
RUN yum -y install httpd
RUN yum -y install php #安装mariadb客户端和php-mysqlnd
RUN yum -y install mariadb
RUN yum -y install php-mysqlnd
RUN yum -y install php-mbstring #安装phpmyadmin
RUN yum -y install epel-release
RUN yum -y install phpmyadmin #设置环境变量,便于管理
ENV MARIADB_ADDR 172.17.0.3
ENV MARIADB_PORT 3306
ENV MARIADB_USER root
ENV MARIADB_PASS 123456 #让容器支持中文
ENV LC_ALL en_US.UTF-8 #配置phpmyadmin
#ADD phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf
ADD config.inc.php /etc/phpMyAdmin/config.inc.php
RUN chown root:apache /etc/phpMyAdmin/config.inc.php
RUN chmod 640 /etc/phpMyAdmin/config.inc.php #添加php测试界面
ADD phptest.php /var/www/html/phptest.php #初始化httpd服务
ADD httpd_init.sh /root/httpd_init.sh
RUN chmod 775 /root/httpd_init.sh
RUN /root/httpd_init.sh #导出端口
EXPOSE 80 #添加启动文件
ADD run.sh /root/run.sh
RUN chmod 775 /root/run.sh #设置默认启动命令
CMD ["/root/run.sh"]
配置phpmyadmin的配置文件

这里我直接将写好的配置文件上传,然后修改文件权限。也可以通过脚本来配置,不过比较麻烦,不如这个简单。改动的配置如下

设置phpmyadmin的登录密码

$cfg['blowfish_secret'] = '123456'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
设置连接数据库的账号、密码、ip和端口 $cfg['Servers'][$i]['host'] = '172.17.0.3'; // MySQL hostname or IP address
$cfg['Servers'][$i]['port'] = ''; // MySQL port - leave blank for default port
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = '123456'; // MySQL password (only needed
使用脚本配置httpd
[root@test01 phpMyAdmin_dockerfile]# cat httpd_init.sh
#!/bin/sh sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /etc/httpd/conf/httpd.conf
sed -i '/Require ip/d' /etc/httpd/conf.d/phpMyAdmin.conf
sed -i '//a Require all granted' /etc/httpd/conf.d/phpMyAdmin.conf
添加一个php测试界面
[root@test01 phpMyAdmin_dockerfile]# cat phptest.php
< ?php
phpinfo();
?>
启动脚本
[root@test01 phpMyAdmin_dockerfile]# cat run.sh
#!/bin/sh httpd
while true;do sleep 1000;done
创建镜像
[root@test01 phpMyAdmin_dockerfile]# docker build -t liuxin/centos-phpmyadmin:v1 ./
Sending build context to Docker daemon 14.34 kB
Step 1 : FROM centos:7.4.1708
---> 3afd47092a0e
.
.
省略...
.
.
Step 26 : CMD /root/run.sh
---> Using cache
---> 19e52b9aceab
Successfully built 19e52b9aceab
[root@test01 phpMyAdmin_dockerfile]#
创建并启动容器

映射,物理机端口8080到容器的80端口

[root@test01 phpMyAdmin_dockerfile]# docker run -d -p 8080:80 liuxin/centos-phpmyadmin:v1 /root/run.sh
a5a54528879ea95e9bf98a7ba3fbf6236b26f3a54a5305738a4ee770164f105b
[root@test01 phpMyAdmin_dockerfile]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5a54528879e liuxin/centos-phpmyadmin:v1 "/root/run.sh" 56 seconds ago Up 54 seconds 0.0.0.0:8080->80/tcp sick_ride
2e78c466919e liuxin/centos-mariadb:v1 "/root/run.sh" 12 hours ago Up 4 hours 0.0.0.0:13306->3306/tcp dreamy_bell
[root@test01 phpMyAdmin_dockerfile]#
验证
打开web浏览器,输入测试的网页

输入phpmyadmin的地址,并输入账号密码,看能否登录

登录成功,大功告成

Docker容器里部署Apache+PHP+MariaDB+phpMyAdmin的更多相关文章

  1. 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

    实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...

  2. 在Docker Swarm上部署Apache Storm:第2部分

    [编者按]本文来自 Baqend Tech Blog,描述了如何在 Docker Swarm,而不是在虚拟机上部署和调配Apache Storm集群.文章系国内 ITOM 管理平台 OneAPM 编译 ...

  3. Docker容器里时间与宿主机不同步

    docker容器里时间设置: 第一种: Dockerfile文件中添加一行:RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime或者 第二种: ...

  4. docker容器里设置中文时区

    本文讨论docker容器里中文时区的问题,总所周知docker hub上的镜像默认都是英文时区的,在国人使用过程当中需要将时区设置成中文,我原来光配置/etc/localtime了date显示的时间也 ...

  5. 把Gitlab迁移到Docker容器里

    把Gitlab迁移到Docker容器里 Apr 9, 2015. | By: 任怀林 公司的gitlab一直是运行在ovm的虚拟机里的,版本还是6.7.5.版本有点老了,最近在研究docker,于是想 ...

  6. python服务不能在docker容器里运行的问题

    在开发过程中,我们将mysql.redis.celery等服务在docker容器里跑,项目在本地运行,便于debug调试 docker-compose -f docker-compose-dev.ym ...

  7. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  8. Gogs的Docker容器化部署流程遇到的问题

    Gogs的Docker容器化部署流程遇到的问题   最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...

  9. Drools 7.15.0 docker容器方式部署

    关于drools的相关介绍就不再赘述了,关于drools网上的资料都很少,或者都有些老了,最近折腾了一下,记录下安装部署的过程,希望能节省下大家的时间. 一.快速部署 1.拉取基础镜像,命令如下: d ...

随机推荐

  1. HBase之MinorCompact全程解析

    转自:https://blog.csdn.net/u014297175/article/details/50456147 Compact作用 当MemStore超过阀值的时候,就要flush到HDFS ...

  2. 第01讲:Flink 的应用场景和架构模型

    你好,欢迎来到第 01 课时,本课时我们主要介绍 Flink 的应用场景和架构模型. 实时计算最好的时代 在过去的十年里,面向数据时代的实时计算技术接踵而至.从我们最初认识的 Storm,再到 Spa ...

  3. ipython notebook教程

    一.简介 Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码.方程式.可视化和文本的文档.它的用途包括:数据清理和转换.数值模拟.统计建模.数据可视化.机器学习等等 ...

  4. 学习Java第10天

    今天所作的工作: 1.线程 2.网络通信 明天工作安排: 做点教材后的案例,复习所学内容 总结一下,10天的时间,看完了Java从入门到精通,只能说是看完了,这里加一个表情笑哭,应该算是知道Java的 ...

  5. Matplotlib 3.0 秘籍·翻译完成

    原文:Matplotlib 3.0 Cookbook 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交 ...

  6. HowToDoInJava 其它教程 2 · 翻译完毕

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 JMS 教程 JMS 教 ...

  7. HTC组件介绍及应用 HTML

    转载请注明来源:https://www.cnblogs.com/hookjc/ HTML组件封装了HTML内容,并可以插入到别的HTML文档中.在HTML组件出现以前,在HMTL文档中使用自定义控制唯 ...

  8. PHP中常见的数字掐头去尾操作方法

    四舍五入round round( float $val[, int $precision = 0[, int $mode = PHP_ROUND_HALF_UP]] ) : float 对浮点数进行四 ...

  9. Python—常用语句 if for while

    Python-常用语句 判断语句 循环语句 break语句和continue语句 判断语句: if语句是最简单的添加判断语句,它可以控制程序的执行流程. if结构: if条件: 要执行的操作 ... ...

  10. 记录netcore一次内存暴涨的坑

    项目用到了Coldairarrow/EFCore.Sharding: Database Sharding For EFCore (github.com)这个组件,最初是因为分表做的还不错所以用了它. ...