专栏首页运维录使用 Docker 部署 phpmyadmin 应用

使用 Docker 部署 phpmyadmin 应用

《复仇者联盟4:终局之战》右手暴风战斧,左手雷神锤

开始之前


phpmyadmin 是一个使用PHP语言开发的工具软件,可以通过web方式操作mysql数据库,例如添加、查询、变更、删除数据等。

在容器时代之前,我们部署 phpmyadmin 应用,需要先准备好php 程序运行环境、然后下载源码、配置数据库等,最后完成部署工作。

在容器时代,部署 phpmyadmin 应用则变得简单,下载 phpmyadmin 官方提供的 Docker镜像,然后运行容器就可以了。例如运行一个 phpmyadmin 容器。

# 运行容器自动下载镜像,仓库在国外时间可能较长
# PMA_HOST变量,指 mysql服务器地址
docker run --name myadmin -d \
    -e PMA_HOST=mysql-server-host \
    -p 8080:80 \
    phpmyadmin/phpmyadmin

环境描述

容器镜像: phpmyadmin:latest
容器系统: debian 9 (stretch)
Docker主机: Ubuntu Server 16.04
应用策略: 仅为测试环境提供 phpmyadmin 工具。

注意事项: 为了数据安全限制了使用条件:

  • 仅允许办公室IP通过防火墙。
  • 禁止 mysql root账户登录。
  • 仅允许指定账户ruser(这里是只读)登录。

操作步骤


因为增加了限制规则,所以我们需要定制 phpmyadmin 镜像,附加修改后 config.inc.php 配置文件。

1. 镜像构建目录

tree ./
├── conf
│   └── config.inc.php
└── Dockerfile

1 directory, 2 files

2. 修改配置文件

# 配置文件从 phpmyadmin 容器中获得:
# docker run --rm phpmyadmin:latest cat /etc/phpmyadmin/config.inc.php >> config.inc.php

# 编辑 config.inc.php
# 查找 $cfg['Servers'][$i]['AllowNoPassword'] 行
# 并添加以下行,ruser 替换自己的只读用户
        $cfg['Servers'][$i]['AllowRoot'] = false;
        $cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit';
        $cfg['Servers'][$i]['AllowDeny']['rules'] = array('allow ruser from all');

MySQL 授权语句可以参考这篇文章

3. Dockerfile 文件

cat Dockerfile

# custom phpmyadmin

FROM phpmyadmin/phpmyadmin
MAINTAINER dongnan #<@微信公众号:运维录>

# configure file
COPY conf/config.inc.php /etc/phpmyadmin/config.inc.php

# env
ENV TZ=Asia/Shanghai \
    LANG=en_US.UTF-8

4. 构建镜像

docker build -t myadmin:0.0.1 .
# 省略...
Successfully built d8241af7fac8

5. 运行容器根据实际环境,部署 phpmyadmin 容器。

# 我的容器环境为 rancher:
选择项目 -> 添加服务 -> 指定镜像 -> 服务链接(别名) -> 目标服务(数据库) -> 名称(db)

# 名称配置为db 是因为 phpmyadmin 配置文件中mysql数据库主机名设置为 db。

6. 验证

a. 测试 root 用户,提示禁止登录;

b. 测试指定的用户 ruser ,允许登录;

参考文章

https://hub.docker.com/r/phpmyadmin/phpmyadmin
https://stackoverflow.com/questions/2631269/how-to-secure-phpmyadmin
https://docs.phpmyadmin.net/en/latest/setup.html#installing-using-docker

小结


最后来总结下文章中的知识点

  • phpmyadmin 是一个使用PHP语言开发的工具软件,可以通过web方式操作mysql数据库
  • http协议明文传输,通过使用 https 协议加密数据,避免此问题。
  • 服务器暴漏在公网,被恶意扫描渗透等攻击行为,通过防火墙白名单机制解决 因为 phpmyadmin 只面向公司特定的人员开放,所以防火墙仅信任他们的IP即可。

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用shell 批量更改 mysql字符集

    这里还有一个mysql字符乱码的例子,部署redmine过程中,mysql数据库使用了默认的字符集,导致含有中文内容为乱码。

    用户1560186
  • 如何为Nginx配置keep-alive超时时间?

    不过就像所有事物都有两面性,keep-alive 在某些场景可能也会有不足之处,例如就算是在空闲状态下它还是会消耗服务器资源,因此你可以根据自己的实际需求调整 ...

    用户1560186
  • 为什么Docker创建的MySQL容器字符乱码?

    这篇文章发布于 2016.11.03 ,记录如何解决 mysql容器查询结果乱码的问题。

    用户1560186
  • Ubuntu10.10下安装黄金组合(Apache2+Mysql+php5+phpmyadmin)

    1.安装apache sudo apt-get install apache2 需要下载 3,287kB 的软件包。 解压缩后会消耗掉 10.1MB 的额外...

    苦咖啡
  • 《搞定》第8章 回顾阶段:保障系统的有效运行

    yeedomliu
  • 仿射变换与透视变换

    仿射变换保证物体形状的“平直性”和“平行性”。透视变换不能保证物体形状的“平行性”。仿射变换是透视变换的特殊形式。 将透视变换写成3*3矩阵形式,即为M; 以下...

    一棹烟波
  • "清华-腾讯联合实验室"针对疫情的分析2:除了湖北,还有5省疫情严峻

    文章内容转自:腾讯医典 在国家卫健委公布的官方数字中,2月7日0—24时,新增确诊病例数3399例,比2月6日多了256例;其中湖北2841例,仍然占绝大多数...

    腾讯高校合作
  • "清华-腾讯联合实验室"针对疫情的分析1:新冠肺炎疫情拐点何时出现?

    文章内容转自:腾讯医典 新型冠状病毒感染的肺炎疫情仍在蔓延,国家卫计委每天发布疫情情况,变化的疫情数字也牵动着千万人的心。 这些变化的数字中,有什么内在的规律...

    腾讯高校合作
  • Centos7.6操作系统安装及优化全纪录

    下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/

    loong576
  • 虽被BERT碾压,但还是有必要谈谈BERT时代与后时代的NLP

    2018年是NLP的收获大年,模型预训练技术终于被批量成功应用于多项NLP任务。之前搞NLP的人一直羡慕搞CV的人,在ImageNet上训练好的模型,居然拿到各...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券