컨테이너 시작 전 이미지 빌드
이전 단계에서는 Docker Hub 에서 제공되는 미리 빌드된 Docker 이미지 (예: nginx:latest) 를 사용했습니다. 그러나 애플리케이션에 맞게 사용자 정의 Docker 이미지를 직접 빌드해야 하는 경우가 많습니다.
Docker Compose 는 서비스를 시작하기 전에 docker-compose.yml 파일에 정의된 이미지를 자동으로 빌드할 수 있습니다. 이는 일반적으로 서비스에 대한 image 이름 대신 build 컨텍스트를 지정하여 수행됩니다.
간단한 사용자 정의 Nginx 이미지를 빌드하도록 docker-compose.yml 파일을 수정해 보겠습니다.
먼저, ~/project 내에 nginx_custom이라는 새 디렉토리를 생성합니다.
cd ~/project
mkdir nginx_custom
이제 nginx_custom 디렉토리 내에 Dockerfile을 생성합니다.
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 파일을 수정하여 web 서비스 이미지를 빌드하는 데 이 Dockerfile을 사용하도록 합니다. 파일을 편집하기 위해 엽니다.
nano ~/project/docker-compose.yml
web 서비스 정의를 image 대신 build를 사용하도록 변경합니다.
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
이제 docker compose up을 실행하면 Docker Compose 는 먼저 ./nginx_custom 디렉토리의 Dockerfile에 의해 정의된 이미지를 빌드한 다음, 새로 빌드된 이미지를 사용하여 컨테이너를 시작합니다.
~/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