基本介绍
1、版本一致性
我们经常会遇到这样的问题,那就是我们编写的PHP应用进行部署的时候,因为运行环境的不一致导致很不稳定,要么是受系统版本影响,那么受apache影响,再就是Php的版本不一致,其实用docker可以很好地解决这个问题,因为在docker的官方镜像中,centos的版本是一致的,我们这里使用centos7来作为基本运行环境。 我这里已经手工制作了一个镜像,需要使用的可以pull
docker pull lzyats/php-apache:php7
2、应用层的安全
很多人会想,我可以自己部署为什么要使用docker呢?其实我们可以换一个思路,docker是一个隔离的容器,它可以使用一个应用所有的功能,但是它本身又是隔离起来的,这样如果有人想入侵这个应用层的话,其实他最后攻破的,只是一个隔离容器,这样我们的系统安全就有了一定的保障。
下载官方镜像
首先我们下载centos7的官方镜像
docker pull centos:7
这里我们需要注意的是,官方的镜像是不支持中文的,所以我们首先要设置中文支持,Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大,我们通常以 && 符号连接命令,这样执行后,只会创建 1 层镜像。 具体的Dockerfile脚本内容是
FROM docker.io/centos:7
MAINTAINER lzyats "lzyats@qq.com"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& sed -i '13'd /etc/yum.conf \
&& yum install -y kde-l10n-Chinese glibc-common \
&& echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf \
&& source /etc/locale.conf
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
CMD ["/usr/sbin/init"]
将以上内容保存为Dockerfile文件,注意是没有后缀名的,进入该文件目录以后输入命令构建
docker build -t centos7:v1 .
这样一个简单的带中文支持的 docker镜像就做好了,我们可以自己启动镜像并测试一下中文显示
docker run -it --name centos7 centos7:v1 /bin/bash
输入时间查看命令,可以看到已经支持中文显示了
[root@ff28e36da29b /]
2021年 07月 27日 星期二 11:03:49 CST
安装apache+php7.4
centos自带的PHP是5.6的版本,所以其实我们是需要处理一下的 上面讲Dockerfile 的指令每执行一次都会在 docker 上新建一层,所以我们直接从头开始吧
FROM docker.io/centos:7
MAINTAINER lzyats "lzyats@qq.com"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& sed -i '13'd /etc/yum.conf \
&& yum install -y kde-l10n-Chinese glibc-common \
&& echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf \
&& source /etc/locale.conf
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum-utils \
&& yum-config-manager --enable remi-php74 \
&& yum install -y yum -y install php php-cli php-common php-fpm php-mysql php-cgi \
php-mbstring php-gd php-process php-mcrypt php-soap libjpeg* php-pear php-xml \
php-devel php-memcached php-redis php-gearman php-pecl-mongodb php-pecl-zip \
&& systemctl enable php-fpm \
&& systemctl enable httpd
CMD ["/usr/sbin/init"]
需要注意的是,由于我们在系统中设定了启用服务的权限,所以在启动的时候我们必须要加上相应的参数
docker run -d -p 8090:80 -v /www:/var/www/html --name centos7 --privileged=true centos7:v1 /usr/sbin/init
我们在这里加载了一个目录www,主要是为了进行PHP信息的测试,我们用浏览器打开本机的8090端口 可以看到系统正常运行了,apache也自动启动了,我们在当前www目录下设置一个t.php进行测试 vi www/t.php
<?php phpinfo();
再访问运行一下看
还有一种方案,是自己直接运行一个centos7的镜像
docker run -it --name centos7 centos:7 /bin/bash
然后在里面设置好,再将镜像打包,相关的运行代码是
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& sed -i '13'd /etc/yum.conf \
&& yum install -y kde-l10n-Chinese glibc-common \
&& echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf \
&& source /etc/locale.conf \
&& yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum-utils\
&& yum-config-manager --enable remi-php74 \
&& yum -y install php php-cli php-common php-fpm \
php-mysql php-cgi php-mbstring php-gd php-process \
php-mcrypt php-soap libjpeg* php-pear php-xml \
php-devel php-redis php-gearman php-pecl-mongodb php-pecl-zip \
&& systemctl enable php-fpm \
&& systemctl enable httpd
其他设置
由于上面使用的都是默认设置,而有的人会有比较特别的要求,比如PHP上传的设置默认是2M,上传文件数等,可以自己修改php.ini文件,这个文件在/etc/php.ini date.timezone = Asia/Shanghai upload_max_filesize = 20M 全部配置好以后,使用命令将应用打包为镜像
docker commit --author "lzyats <lzyats@qq.com>" centos7 apache-php:php7
然后将镜像推送到自己的应用之中
推送镜像
docker tag php-apache:php7 lzyats/php-apache:php7
docker push lzyats/php-apache:php7
成功以后,你就可以随时拉取使用这个公共镜像了
docker pull lzyats/php-apache:php7
部署镜像
docker run -d -p 8090:80 -p 443:443 -v /www/:/var/www/html -v /www/httpd.conf:/etc/httpd/conf/httpd.conf --name centos7 --privileged=true lzyats/php-apache:php7 /usr/sbin/init
|