前面讲到了创建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. 博客新手:图片URL的生成

    作为一名博客小白,本人是在美化自己的博客时,发现自定义背景等操作需要提供图片的URL,而不是直接上传图片.那么什么是URL呢?我们又该如何获取它呢? 什么是URL 根据维基百科:统一资源定位符(英语: ...

  2. 【记录一个问题】go1.17中,把代码文件放在main.go的同级目录,导致无法编译

    写了类似目录结构的代码: myproxy - main.go - server.go 编译的时候总是出现main.go中找不到类型定义.但是用goland却可以直接执行. 最后调整了目录结构后解决: ...

  3. pytest文档3-测试用例setup和teardown

    用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...

  4. 微信小程序入门教程之三:脚本编程

    这个系列教程的前两篇,介绍了小程序的项目结构和页面样式. 今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动.学会了脚本,就能做出复杂的页面了. 本篇的 ...

  5. IDEA2020.1破解

    IDEA2020.1破解 安装 下载idea idea官方下载地址:https://www.jetbrains.com/webstorm/download/other.html 下载破解插件 链接:h ...

  6. Windows 是最安全的操作系统

    建了一个用户交流群,我在群里说:"Windows 是最安全的操作系统." 立刻引发了很多有意思的观点.我在群里一个人说不过大家,先篇文章把自己的论点罗列一下. 对操作系统攻击的方式 ...

  7. hihoCoder挑战赛1 毁灭者问题

    题目链接:http://hihocoder.com/problemset/problem/1034 数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新.但是如果 ...

  8. IO复习

    /* 字节流 输入字节流: ---------| InputStream 所有输入字节流的基类. 抽象类 ------------| FileInputStream 读取文件的输入字节流 ------ ...

  9. java创建一个子类对象是会调用父类的构造方法会不会创建父类

    1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Obj ...

  10. MSTP多生成树协议

    MSTP多生成树协议 目录 MSTP多生成树协议 1.MSTP(Multiple Spanning Tree Protocol)概述 2.STP.RSTP.PVST的应用缺陷 3.MSTP的主要特点 ...