临近国庆,又回去鼓捣docker了。因为自己是从事php开发的,所以还是先从环境入手。本来考虑全部搭建php+mysql+nginx+redis,但是由于我用的是公司的mysql和redis,所以只搭建php+nginx,因为我的操作系统是win10,所有操作都是在win下完成的。先拉取镜像,当然你也可以自己写dockerfile来构建自己的镜像。这里先拉取nginx镜像:dockerpullnginx默认会拉取最新的镜像,完成后可以使用dockerimages查看已有镜像。接下来,安装php。和nginx镜像一样,可以直接拉取镜像完成操作。拉取的php图像只有部分扩展名。您需要的扩展需要安装在容器中。官方提供了三种安装php扩展的方法:docker-php-ext-installpeclinstallname-xxxcurl源码安装但是这样运行php有一个问题,就是重新创建的镜像或者重新运行的容器没有扩展上次安装的,需要重新安装,所以这里使用dockerfile构建自己的php镜像。先创建一个目录,然后在这个目录下创建一个dockerfile。文件内容如下:FROMphp:7.2-fpmASphp7.2RUNdocker-php-ext-installmysqlipdopdo_mysql\&&peclinstallredis-5.0.0\&&peclinstallyaf-3.0.8\&&peclinstallxdebug-2.7.2\&&docker-php-ext-enableredisxdebugyaf\&&cd/usr/local/etc/php\&&touchphp.ini然后在当前目录打开cmd,执行:dockerbuild-tphp7.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:nginxports:-"80:80"depends_on:-phpvolumes:-"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_netphp:image:php7.2:latestports:-"9000:9000卷:-“F:/phpstudy/PHPTutorial/WWW:/var/www/html”-“F:/lnmp/php.ini:/usr/local/etc/php/php.ini”网络:-app_netcontainer_name:"php"networks:app_net:ipam:driver:defaultconfig:-subnet:10.10.0.0/16上面就是我们的docker-compose.yml文件,通过这个文件和docker-compose命令可以快速部署分布式应用,这个文件也放在刚才的dockerfile目录下,里面指定了要挂载的文件和映射的端口,这样就不用每次都手动输入了,执行逗号nd:docker-composeup-d这个命令会在执行完成后,进入后台。建议第一次安装结束时不要-d:docker-composeup这样可以看到容器运行时报的一些问题,比如扩展加载失败其他推荐:https://docs.docker.com/
