build-the-lnmp-with-docker
docker推崇单镜像单个服务,所以使用nginx、php、mariadb三个镜像搭建lnmp,为了减小体积,除了mariadb,其他镜像统一使用alpine的版本。
因为是开发测试所用的lnmp环境,所以这是搭建lnmp只是单纯的“多容器应用”,与多service
应用stack
不同的是,容器应用不需要使用swarm mode
。
▲ 目录结构
docker-compose.yml
1 | version: "3.5" |
为了网站页面资源能够在nginx和php容器间共享,且为了方便调试,这里使用的bind mount
的方式将主机目录同时挂载到nginx和php对应的网站根目录。为了数据库的数据持久化,也对其使用volume或者挂载本地目录,可以通过镜像说明的配置方法预先对数据库进行一些配置,更多信息可以参阅mariadb docker-hub的说明。
dockerfile
nginx
dockerfile
1 | FROM nginx:alpine |
nginx的配置文件。
1 | server { |
php-fpm
dockerfile
1 | FROM php:fpm-alpine |
php镜像给php安装扩展,这里用的是镜像提供的便捷脚本docker-php-ext-install
,这个脚本是通过编译扩展源码的方式安装扩展,因此,在此之前会自动下载、安装一系列的开发工具,如gcc等,在完成对扩展源码的编译、安装工作后会自动清除此前的编译环境,所以不用担心最后的生成的镜像会存在一些不需要的开发工具。官方php镜像提供了好几种安装扩展的方法,更多信息可以参阅php docker-hub的说明。当然,也可以自己直接通过包管理工具下载安装扩展,不过需要注意,扩展的版本与php的版本不一致,可能会不兼容。
▲ 启动lnmp,查看多容器应用lnmp状态
▲ 运行效果
- Blog Link: https://unihon.github.io/2019-03/build-the-lnmp-with-docker/
- Copyright Declaration: The author owns the copyright. Please indicate the source reproduced!