在docker镜像库里找不到合适的httpd+php环境,故本文旨在自己建立一个合自己心意的httpd+php环境docker镜像。本人在Docker Hub上也发布了基于CentOS 7的httpd+PHP环境镜像,可直接通过命令docker pull xiaojunyi/httpd-php
获取使用。
1 获取httpd环境docker镜像
由于本人对CentOS环境比较熟悉,故不使用docker官方的httpd镜像,使用centos的httpd镜像:
$ sudo docker pull centos/httpd
2 创建并启动容器
- 创建两个文件夹用于放置前后端代码和httpd日志:
$ sudo mkdir -p /docker/httpd/html
$ sudo mkdir -p /docker/httpd/logs
- 生成容器:
$ sudo docker run --name httpd -d --restart always -p 80:80 -p 443:443 -v /docker/httpd/html:/var/www/html -v /docker/httpd/logs:/etc/httpd/logs centos/httpd
其中,--name httpd
:容器指定名称为mysql;-d
:后台运行容器,并返回容器ID;--restart always
:在容器退出时总是重启容器;-p 80:80 -p 443:443
:将宿主机的80、443端口(前者)分别映射到容器的80、443端口(后者);-v /docker/httpd/html:/var/www/html
:将宿主机的目录/docker/httpd/html
映射到容器的目录/var/www/html
,用于存放前后端代码文件;-v /docker/httpd/logs:/etc/httpd/logs
:将宿主机的目录/docker/httpd/logs
映射到容器的目录/etc/httpd/logs
,用于存放httpd产生的日志文件。
此时在浏览器访问宿主机,即可看到Apache的环境界面,在宿主机目录/docker/httpd/html
下部署上前后端的代码,即可访问了。
3 在容器中部署php7.1环境
本人图方便,使用yum来安装php。
- 由于CentOS官方源的php版本太旧,故先配置yum源:
$ sudo docker exec httpd yum install -y epel-release
$ sudo docker exec httpd rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo docker exec httpd yum update -y
- 若以后需要自行编译PHP的扩展(如连接redis、mongodb的扩展),则最好安装如下包:
$ sudo docker exec httpd yum install -y gcc make openssl openssl-devel
- 安装PHP 7.1及常用的扩展:
$ sudo docker exec httpd yum install -y --enablerepo=remi --enablerepo=remi-php71 php php-devel php-mbstring php-mcrypt php-mysqlnd php-pdo php-gd
- 清理一下yum缓存:
$ sudo docker exec httpd yum clean all
$ sudo docker exec httpd rm -rf /var/cache/yum
4 查看phpinfo
- 先重启httpd服务,有两种方式:
(1) 直接重启容器(推荐):
$ sudo docker restart httpd
(2) 重启容器的httpd服务:
$ sudo docker exec httpd httpd -k restart
- 在宿主机目录
/docker/httpd/html
下新建文件index.php
,内容如下:
<?php
phpinfo();
- 浏览器访问宿主机,即可看到PHP环境部署成功了:
5 保存容器为镜像
部署完成后,可以将容器创建为镜像,留待以后可以方便地创建httpd+php环境的容器:
$ sudo docker stop httpd
$ sudo docker commit -m "centos httpd+php7.1" httpd httpd-php71:1.0
可以看到有一个新的镜像了:
仿照步骤2,即可直接创建一个部署了httpd和php7.1环境的docker容器了:
$ sudo docker run --name httpd-php71 -d --restart always -p 80:80 -p 443:443 -v /docker/httpd/html:/var/www/html -v /docker/httpd/logs:/etc/httpd/logs httpd-php71:1.0