Пересборка образа в Docker
Пересборка образа нужна,
когда меняется файл сборки,
а не текст сценария на диске.
Строка RUN
в Dockerfile
попадает в слой шаблона;
правка site/index.php
на томе сборку
не затрагивает.
Сценарий на хосте
печатает hello:
<?php
echo 'hello';
В Dockerfile
одна строка RUN
фиксирует метку слоя;
её меняют при учебной
пересборке:
FROM php:8.5-fpm
RUN echo build-step-1 > /tmp/build-id.txt
Nginx на готовом образе,
PHP собирается из папки.
Код монтируют с ./site.
Файл default.conf:
server {
listen 80;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Файл compose.yaml:
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./site:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
app:
build: .
volumes:
- ./site:/var/www/html
Подъём в фоне задают
командой docker compose up
с флагом --build,
который заново прогоняет
шаги образа, и флагом
-d.
После смены текста
в RUN
нужен такой подъём;
правка index.php
на томе его не требует.
Запуск проекта:
docker compose up -d --build
Смените метку в единственной команде сборки у сервиса core и снова поднимите проект в фоне так, чтобы образ собрался заново.
Измените слово в index.php на томе и убедитесь, что страница обновилась без новой сборки.