无image属性的LAMP环境Docker Compose如何确定镜像?
为什么这个LAMP的Docker Compose配置没指定image也能运行?
这个配置里的webserver(Apache+PHP)和database(MySQL/MariaDB)服务没有用image属性,是因为它们用了**build指令**——Docker会根据指定目录里的Dockerfile自行构建镜像,而不是直接拉取现成的公共镜像。
具体来说:
webserver的build.context指向./bin/${PHPVERSION},其中${PHPVERSION}是环境变量(比如php7.4、php8.2),对应的目录里肯定有一个Dockerfile,这个文件会基于官方的PHP+Apache镜像(比如php:8.2-apache)做自定义配置,比如安装扩展、修改Apache设置等。database的build.context指向./bin/${DATABASE},${DATABASE}也是环境变量(大概率是mysql或mariadb),对应的目录里的Dockerfile会以官方MySQL/MariaDB镜像为基础,做初始化脚本、配置文件这类定制。
当你执行docker-compose up时,Docker会自动去这些目录找Dockerfile,按照文件里的步骤构建出专属镜像,然后用这个构建好的镜像启动容器。
对比一下配置里的phpmyadmin和redis服务,它们用的是image指令,直接拉取官方现成的镜像来启动容器,和build的逻辑完全不同。
内容的提问来源于stack exchange,提问作者jon
相关产品推荐
相关产品推荐

