Сборка образов перед запуском контейнеров
В предыдущих шагах мы использовали готовые 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