临近国庆,又回过头来鼓捣docker,因为从事php开发,所以还是先从环境入手。
本来考虑搭建php+mysql+nginx+redis全部,但是由于使用的都是公司的mysql和redis,故只搭建php+nginx,因为我的操作系统是win10,一下操作都是在win下完成的。
首先先拉取镜像,当然你也可以自己编写dockerfile去构建自己的镜像。这里先拉取nginx镜像:
docker pull nginx
这里会默认拉取最新的镜像,完成后可以使用docker images查看已有镜像。
接下来安装php,跟nginx镜像一样,可以通过直接拉取镜像完成操作,拉取的php镜像只有部分扩展,自己需要的扩展需要进入容器里面去安装,官方给出了三种安装php扩展的方法:
docker-php-ext-install
pecl install name-xxx
curl 源码安装
但是通过这种方式运行的php存在一个问题,那就是重新创建的镜像或重新运行的容器,是没有上次安装好的扩展的,需要重新安装,所以,这里采用dockerfile构建自己的php镜像。
先创建一个目录,然后在这个目录里面创建dockerfile文件,文件内容如下:
FROM php:7.2-fpm AS php7.2
RUN docker-php-ext-install mysqli pdo pdo_mysql \
&& pecl install redis-5.0.0 \
&& pecl install yaf-3.0.8 \
&& pecl install xdebug-2.7.2 \
&& docker-php-ext-enable redis xdebug yaf \
&& cd /usr/local/etc/php \
&& touch php.ini
然后在当前目录打开cmd,执行:
docker build -t php7.2 .
然后就会开始构建自己的php镜像,上述dockerfile比较简单,只是在php:7.2-fpm镜像的基础上,使用docker-php-ext-install、pecl安装了mysqli,pdo,redis,yaf,xdebug扩展,并创建了一个php.ini文件,用于后面挂载本地php.ini文件。
dockerfile还可以执行更复杂的操作,我们可以在ubuntu镜像里面通过RUN去执行终端命令安装php和nginx,并运行nginx、php-fpm服务,这样就可以在一个镜像里面同时安装php+nginx,但是这里只进行最简单的php镜像构建。
等一切完成之后,我们现在就有两个镜像
现在我们需要做的就是启动这两个镜像,并将本地的工作目录和配置文件挂载到容器对应的目录,但是,每次都要分别启动两个镜像并挂载相应的文件,属实比较麻烦,并且每次的ip还会变化导致需要更改nginx配置,这样还不如直接安装集成环境呢。。。
因此,这里采用docker-compose去启动这两家伙:
version: '2'
services:
nginx:
container_name: "nginx"
image: nginx
ports:
- "80:80"
depends_on:
- php
volumes:
- "F:/phpstudy/PHPTutorial/nginx/conf.d:/etc/nginx/conf.d"
- "F:/phpstudy/PHPTutorial/WWW:/usr/www/html"
- "F:/logs/error.log:/var/log/nginx/error.log"
- "F:/logs/access.log:/var/log/nginx/access.log"
networks:
- app_net
php:
image: php7.2:latest
ports:
- "9000:9000"
volumes:
- "F:/phpstudy/PHPTutorial/WWW:/var/www/html"
- "F:/lnmp/php.ini:/usr/local/etc/php/php.ini"
networks:
- app_net
container_name: "php"
networks:
app_net:
ipam:
driver: default
config:
- subnet: 10.10.0.0/16
上面就是我们的docker-compose.yml文件,通过该文件和docker-compose命令可以快速部署分布式应用,这个文件同样放在刚才的dockerfile目录内,该文件里面指定了需要挂载的文件,以及映射的端口,这样就不需要每次都去手动输入,执行命令:
docker-compose up -d
该命令会在执行完毕后进入后台,这里建议第一次安装末尾不要-d:
docker-compose up
这样可以看到在容器运行期件报出的一些问题,比如扩展加载失败等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。