오늘은 도커의 핵심 구성 요소 중 하나인 Dockerfile과 이를 활용해 나만의 이미지 만들기, 디버깅 방법까지 정리해보겠습니다.
Dockerfile이란?
도커는 이미 만들어진 이미지들을 Docker Hub에서 받아서 사용할 수 있습니다. 예를 들어, python, nginx, mysql 같은 이미지들을 다운받아 바로 컨테이너로 실행할 수 있죠.
하지만 때로는 내가 만든 코드나 애플리케이션을 직접 이미지로 만들어 배포하고 싶을 때도 있습니다.
이때 사용하는 것이 바로 Dockerfile입니다.
즉, 나만의 Docker 이미지를 만들기 위한 설정 파일이라고 생각하시면 됩니다.
예를 들어, 직접 만든 Spring Boot 프로젝트를 컨테이너에서 실행하고 싶다면, 이 프로젝트를 기반으로 한 Dockerfile을 작성하면 됩니다.
FROM: 베이스 이미지 지정
Dockerfile에서 가장 먼저 나오는 지시어는 FROM입니다.
베이스 이미지는 윈도우를 처음 설치했을 때 기본으로 깔려있는 인터넷 브라우저, 메모장 같은 프로그램이라고 생각하면 쉽습니다. 이 기본 환경 위에 우리가 필요한 프로그램을 추가로 설치해 나가는 방식입니다.
베이스 이미지를 지정하기 전, 우선 Dockerfile이라는 파일을 아래와 같이 생성합니다.
이후, 아래 코드를 해당 파일에 입력하여 베이스 이미지를 지정합니다.
FROM python:3.11-slim
※ :3.11-slim은 버전(태그)을 의미하며, 생략하면 최신(latest) 버전이 사용됩니다.
Docker 이미지 생성
Dockerfile을 만들었다면, 이제 실제 Docker 이미지를 생성해보아야겠죠.
docker build -t [이미지명] [디렉토리 경로]
docker build -t my-python-app . # 예시
- -t: 태그 옵션으로 이미지에 이름을 붙입니다. 보통 my-image:latest와 같이 사용합니다.
- [디렉토리 경로]: Dockerfile이 위치한 경로를 의미합니다. 현재 디렉토리에 있다면 . 으로 지정하면 됩니다.
- 이후 docker images 명령어로 이미지가 잘 생성됐는지 확인할 수 있습니다.
컨테이너 디버깅
도커를 처음 접하는 사용자들이 가장 자주 겪는 어려움 중 하나는 바로 디버깅입니다.
도커 컨테이너는 대부분 자동화된 스크립트나 설정에 따라 매우 빠르게 실행되며, 작업이 끝나면 곧바로 종료됩니다. 이 때문에 실행 과정에서 어떤 오류가 발생했는지 확인하기가 쉽지 않죠.
컨테이너 내부를 들여다보고 디버깅할 때 자주 사용하는 명령어는 docker exec -it입니다.
하지만 이 명령어는 실행 중인 컨테이너에만 접근할 수 있다는 제한이 있습니다.
따라서 이미지 빌드 과정에서 생성된 컨테이너가 곧바로 종료되는 경우, 내부 상태를 확인하거나 문제를 분석하는 데 어려움이 따를 수 있습니다.
이를 해결하기 이해 컨테이너를 종료되지 않도록 일시 정지 상태로 만들어 놓아야 합니다.
FROM python:3.11-slim
# 필요에 따라 패키지 설치
# RUN pip install -r requirements.txt
# 디버깅을 위해 컨테이너를 500초 동안 유지
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
'MLOps > Docker' 카테고리의 다른 글
[Docker#11] Dockerfile ENTRYPOINT (0) | 2025.05.12 |
---|---|
[Docker#10] Dockerfile COPY (0) | 2025.05.12 |
[Docker#8] 볼륨(Volume)이란? (0) | 2025.05.08 |
[Docker#7] 컨테이너(Container) 내부 접속 (0) | 2025.04.29 |
[Docker#6] 컨테이너(Container) 로그 조회 (0) | 2025.04.29 |