前面讲到了创建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. 小记录:flask的DEBUG开关

    请求站点的如下位置: http://www.ahfu.com/ahfuzhang/?debugger=yes&cmd=resource&f=style.css 居然正常范围了CSS文件 ...

  2. python13day

    昨日回顾 生成器:生成器就是迭代器,生成器是自己用python代码构建的 生成器函数 生成器表达式 python内部提供的 如何判断函数和生成器函数 yield yield return 吃包子的区别 ...

  3. 关于Linux安装中NAT模式和桥接模式的区别详解(转载)

    1.一般我们在创建一个Linux虚拟机时候,会面临三个网络配置选择: 桥接模式.nat模式.host-only模式(主机模式,这个模式用得少,就不介绍了) 2.NAT模式: 所谓nat模式,就是虚拟系 ...

  4. 【免杀技术】Tomcat内存马-Filter

    Tomcat内存马-Filter型 什么是内存马?为什么要有内存马?什么又是Filter型内存马?这些问题在此就不做赘述 Filter加载流程分析 tomcat启动后正常情况下对于Filter的处理过 ...

  5. Matplotlib 绘图秘籍·翻译完成

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

  6. JVM学习十 -(复习)内存分配与回收策略

    内存分配与回收策略 对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定 ...

  7. php include,require,include_once,require_once 的区别

    include(),require(),include_once(),require_once()作用都是包含并运行指定文件,但是使用场景又有很大区别. 1.include()和require()的区 ...

  8. bom-setTimeout

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. LVS+Keepalived 高可用群集部署

    LVS+Keepalived 高可用群集部署 1.LVS+Keepalived 高可用群集概述 2.LVS+Keepalived高可用群集部署 1.LVS+Keepalived 高可用群集概述: LV ...

  10. 区区牛马蹉跎 ,不要向生活低下头 Linux的账号和管理

    账户和管理权限 1.管理用户账号和组账号 2.管理目录和文件的属性 1.Linux基于用户身份对资源访问进行控制:用户账号(超级用户.普通用户.程序用户) 组账号(基本组.附加组).UID (用户标识 ...