Сборка образов перед запуском контейнеров
В предыдущих шагах мы использовали готовые Docker-образы из Docker Hub (например, nginx:latest). Однако часто возникает необходимость создавать собственные Docker-образы для ваших приложений.
Docker Compose может автоматически собирать образы, определенные в вашем файле docker-compose.yml, перед запуском сервисов. Обычно это делается путем указания контекста build вместо имени image для сервиса.
Давайте модифицируем наш файл docker-compose.yml для сборки простого пользовательского образа Nginx.
Сначала создадим новую директорию nginx_custom внутри ~/project:
cd ~/project
mkdir nginx_custom
Теперь создадим Dockerfile внутри директории nginx_custom:
nano ~/project/nginx_custom/Dockerfile
Добавим следующее содержимое в Dockerfile:
FROM nginx:latest
RUN echo '<h1>Hello from Custom Nginx!</h1>' >/usr/share/nginx/html/index.html
Этот Dockerfile использует официальный образ nginx:latest и заменяет стандартный файл index.html на пользовательский.
Далее изменим файл ~/project/docker-compose.yml, чтобы использовать этот Dockerfile для сборки образа сервиса web. Откроем файл для редактирования:
nano ~/project/docker-compose.yml
Изменим определение сервиса web, указав build вместо image:
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
Теперь при запуске docker compose up Docker Compose сначала соберет образ, определенный Dockerfile в директории ./nginx_custom, а затем запустит контейнер с использованием этого нового образа.
Убедитесь, что находитесь в директории ~/project, и выполните:
cd ~/project
docker compose up -d
Вы увидите вывод, показывающий, что Docker Compose собирает образ, а затем создает и запускает контейнер.
Чтобы проверить, что работает пользовательская страница Nginx, используйте curl:
curl http://localhost
Вы должны увидеть вывод <h1>Hello from Custom Nginx!</h1>, что подтверждает успешную сборку образа и работу контейнера с пользовательским содержимым.
Для очистки остановите работающие сервисы:
cd ~/project
docker compose down