DockerDocker是一个开源的应用容器引擎,允许开发者将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以进行虚拟化。容器完全使用沙箱机制,它们之间不会有任何接口。现在docker也可以在windows上使用。总之,Docker可以屏蔽宿主机操作系统的差异,让你快速搭建系统环境。Image和ContainerDocker的Image(镜像)可以用来生成多个容器。图像可以看作是模板,而容器是真实的物品。DockerComposeDockerCompose是一个用于定义和运行复杂应用程序的Docker工具。使用Compose,您可以在一个文件中定义一个多容器应用程序,然后使用单个命令启动您的应用程序并完成准备工作。简而言之,DockerCompose用于管理多个容器。使用Docker,你会写一个docker-compose.yml来启动所有服务:docker-composeup关闭所有服务:docker-composedowndocker-compose.yml上面说了,关键是编排好的docker-compose.yml,以下是NMP的docker-compose.ymlversion:'2'services:nginx:image:nginx:1.13.8-alpineports:-80:80-443:443volumes:-./nginx/nginx.conf:/etc/nginx/nginx.conf-./nginx/conf.d:/etc/nginx/conf.d-./src:/var/wwwphp:build:./phpvolumes:-./src:/var/www-./php/php.ini:/usr/local/etc/php/php.ini-./php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.confmysql:image:mysql:5.6卷:-./mysql/data:/var/lib/mysql-./mysql/my.cnf:/etc/mysql/conf.d/my.cnf端口:-3306:3306环境:-MYSQL_ROOT_PASSWORD=2LCqvSOJ6m0Ut6ui目录结构访问localhost,在该目录下运行docker-composeup命令,在浏览器访问localhost时可以看到:说明Nginx和MySQL使用官方镜像,而PHP是本地搭建的的。Alpine是一个非常轻量级的Linux系统,大小只有5M,Docker官方推荐在alpine上做镜像。PHP的DockerfileFROMphp:7.1-fpm-alpine#PackagesRUNapk--updateadd\autoconf\build-base\linux-headers\libaio-dev\zlib-dev\curl\git\subversion\freetype-dev\libjpeg-turbo-dev\libmcrypt-dev\libpng-dev\libtool\libbz2\bzip2\bzip2-dev\libstdc++\libxslt-dev\openldap-dev\imagemagick-dev\make\unzip\wget&&\docker-php-ext-installbcmathmcryptzipbz2pdo_mysqlmysqlisimplexmlopcache套接字mbstringpcntlxsl&&\docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/&&\pecl安装imagick&&\docker-php-ext-enableimagick&&\peclinstallswoole&&\docker-php-ext-enableswoole&&\docker-php-ext-installgd&&\docker-php-ext-enableopcache&&\apkdelbuild-base\linux-headers\libaio-dev\&&rm-rf/var/cache/apk/*ENVCOMPOSER_ALLOW_SUPERUSER1ENVCOMPOSER_HOME/tmpENVCOMPOSER_VERSION1.5.1RUNcurl-s-f-L-o/tmp/installer.phphttps://raw.githubusercontent.com/composer/getcomposer.org/da290238de6d63faace0343efbdd5aa9354332c5/web/installer\&&php-r"\\$signature='669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410';\\$hash=hash('SHA384',file_get_contents('/tmp/installer.php'));\if(!hash_equals(\$signature,\$hash)){\unlink('/tmp/installer.php');\echo'完整性检查失败,安装程序已损坏或更糟。.PHP_EOL;\exit(1);\}"\&&php/tmp/installer.php--no-ansi--install-dir=/usr/bin--filename=composer--version=${COMPOSER_VERSION}\&&rm/tmp/安装程序。php\&&composer--ansi--version--no-interactionVOLUME/var/wwwWORKDIR/var/wwwCMDphp-fpm这个图像安装了一些你想要的扩展(做一点定制),最后手动安装的ComposerPHP扩展可以分为核心扩展和第三方扩展(这里可以分为PECL和非PECL),对于这些扩展,PHP官方镜像提供了一个简单的安装命令:PHPCoreExtensionsFROMphp:7.0-fpmRUNapt-get更新&&apt-get安装-y\libfreetype6-dev\libjpeg62-turbo-dev\libmcrypt-dev\libpng-dev\&&docker-php-ext-install-j$(nproc)iconvmcrypt\&&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\&&docker-php-ext-安装-j$(nproc)gdPECLextensionsFROMphp:7.1-fpmRUNpeclinstallredis-3.1.0\&&peclinstallxdebug-2.5.0\&&docker-php-ext-enableredisxdebugFROMphp:5.6-fpmRUNapt-getupdate&&apt-getinstall-ylibmemcached-devzlib1g-dev\&&peclinstallmemcached-2.2.0\&&docker-php-ext-enablememcachedOtherextensionsFROMphp:5.6-apacheRUNcurl-fsSL'https://xcache.lighttpd.net/pub/Releases/3.2。0/xcache-3.2.0.tar.gz'-oxcache.tar.gz\&&mkdir-pxcache\&&tar-xfxcache.tar.gz-Cxcache--strip-components=1\&&rmxcache.tar.gz\&&(\cdxcache\&&phpize\&&./configure--enable-xcache\&&make-j$(nproc)\&&makeinstall\)\&&rm-rxcache\&&docker-php-ext-enablexcache详见:DockerOffice图片:PHP包下载地址提示PHP自定义镜像我也在dockerhub上放了一个php-fpm(tag是7.1),也就是说docker-compose.xml可以改成:version:'2'services:nginx:image:nginx:1.13.8-alpine端口:-80:80-443:443卷:-./nginx/nginx.conf:/etc/nginx/nginx.conf-./nginx/conf.d:/etc/nginx/conf.d-./src:/var/wwwphp:image:salamandermh/php-fpm:7.1volumes:-./src:/var/www-./php/php.ini:/usr/local/etc/php/php.ini-。/php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.confmysql:image:mysql:5.6volumes:-./mysql/data:/var/lib/mysql-./mysql/my.cnf:/etc/mysql/conf.d/my.cnf端口:-3306:3306环境:-MYSQL_ROOT_PASSWORD=2LCqvSOJ6m0Ut6ui
