Docker Compose에서 Container를 실행하기 위해서는 반드시 Docker Image가 필요합니다.
구조:
Docker Image
↓
Container 생성
↓
Service 실행
Docker Compose는 YAML 파일에 정의된 Image 정보를 기준으로 필요한 Image를 가져오거나 직접 Build합니다.
예:
services:
web:
image: nginx:1.27
실행:
docker compose up
동작:
nginx Image 확인
↓
없으면 Registry 다운로드
↓
Container 생성
실제 서버 운영에서는 다음 Image 관리 작업이 필요합니다.
- Image 다운로드
- Image 목록 확인
- Image Build
- Image 업데이트
- Image 삭제
- Image Version 관리
이번 글에서는 Docker Compose Image 관리 방법을 서버 운영 관점에서 자세히 알아보겠습니다.
Docker Compose Image란 무엇인가?
Docker Image는 Container를 생성하기 위한 실행 환경입니다.
포함 내용:
- 운영체제 Layer
- Application 코드
- Library
- 실행 환경
- 설정 파일
구조:
Dockerfile
↓
Docker Image
↓
Container
↓
Application 실행
예:
nginx:1.27
mysql:8.0
redis:7
각 Image는 Version Tag를 가지고 있습니다.
Docker Compose Image 지정 방법
가장 기본적인 방식:
services:
nginx:
image: nginx
Version 지정:
services:
nginx:
image: nginx:1.27
권장:
nginx:1.27
비권장:
nginx:latest
이유:
- 자동 업데이트 발생
- 동일 환경 재현 어려움
- 장애 원인 추적 어려움
Docker Compose Image 다운로드 방법
Registry에서 Image 가져오기:
docker compose pull
특정 Service:
docker compose pull nginx
동작:
Docker Registry
↓
Image 다운로드
↓
Local 저장
확인:
docker images
Docker Compose Image 목록 확인
전체 Image 확인:
docker images
Compose 프로젝트 Image 확인:
docker compose images
결과:
Service
Image
Container
예:
nginx
mysql
redis
Docker Compose Image Build 방법
직접 Image를 생성하는 경우 build를 사용합니다.
docker-compose.yml:
services:
app:
build:
context: .
구조:
Dockerfile
↓
Image Build
↓
Container 생성
Build 실행:
docker compose build
실행:
docker compose up -d
Docker Compose Image 재Build
소스 코드 변경 후 Image를 다시 만들어야 합니다.
일반 Build:
docker compose build
Cache 없이 Build:
docker compose build --no-cache
차이:
| 명령어 | 특징 |
|---|---|
| build | 기존 Cache 사용 |
| build –no-cache | 전체 새 Build |
Docker Compose Image 업데이트 방법
최신 Image 가져오기:
docker compose pull
재생성:
docker compose up -d
흐름:
Registry
↓
새 Image 다운로드
↓
기존 Container 교체
↓
새 Version 실행
Docker Compose Image 강제 업데이트
Image 변경을 강제로 적용:
docker compose up -d --pull always
동작:
항상 Registry 확인
↓
최신 Image 적용
Production 배포에서 활용됩니다.
Docker Compose Image 삭제 방법
사용하지 않는 Image 확인:
docker images
Image 삭제:
docker rmi image-name
예:
docker rmi nginx:1.27
Docker Compose 사용하지 않는 Image 정리
불필요한 Image 삭제:
docker image prune
전체 미사용 Image:
docker image prune -a
주의:
삭제된 Image
↓
다음 실행 시 다시 다운로드 필요
Docker Compose Image Tag 관리
운영 서버에서는 Version 관리가 중요합니다.
좋은 방식:
app:1.0.0
app:1.0.1
app:1.1.0
배포 흐름:
app:1.0.0 운영
↓
테스트
↓
app:1.0.1 배포
문제 발생:
Rollback
↓
app:1.0.0 복구
Docker Compose Image와 Dockerfile 관계
Image 생성 과정:
Dockerfile
↓
docker compose build
↓
Docker Image
↓
Container
예:
Dockerfile:
FROM node:20
COPY . .
RUN npm install
CMD ["npm","start"]
Compose:
services:
app:
build: .
실행:
docker compose up
Docker Compose Image 실무 예제
프로젝트:
project/
├── docker-compose.yml
├── Dockerfile
└── app/
docker-compose.yml:
services:
app:
build: .
image:
my-app:v1.0.0
Build:
docker compose build
실행:
docker compose up -d
결과:
Dockerfile
↓
my-app:v1.0.0
↓
Container 실행
Docker Compose Image 운영 Best Practice
추천:
✅ Image Version 고정
✅ latest 사용 최소화
✅ 정기 Image 업데이트
✅ 불필요 Image 정리
✅ Security Scan 진행
✅ Registry 관리
운영 예:
Production
↓
app:1.0.0
Testing
↓
app:1.0.1
Docker Compose Image 장애 대응
Image Pull 실패
확인:
docker compose pull
확인:
- Registry 접속
- Image 이름
- Tag
Image 실행 오류
확인:
docker compose logs
잘못된 Version 배포
Rollback:
이전 Tag Image 사용
자주 묻는 질문
Image와 Container 차이는 무엇인가요?
Image는 실행 원본이고 Container는 실행된 인스턴스입니다.
Image 업데이트는 어떻게 하나요?
docker compose pull 후 docker compose up -d를 실행합니다.
직접 만든 Image도 Compose에서 사용할 수 있나요?
가능합니다.
build 옵션을 사용하면 Dockerfile 기반 Image를 생성할 수 있습니다.
Production에서는 latest를 사용하면 안 되나요?
권장하지 않습니다.
Version Tag 관리가 안정적인 운영에 적합합니다.
마무리
Docker Compose Image 관리는 안정적인 Container 운영을 위한 핵심 과정입니다.
Image Version 관리, Build, Pull, Update, Cleanup 방법을 이해하면 서버 환경을 더욱 안정적으로 유지할 수 있습니다.
특히 Production 환경에서는 Image Tag 관리와 Registry 운영 전략이 장애 대응과 Rollback에 매우 중요합니다.
다음 글에서는 Docker Compose에서 외부 사용자와 Container를 연결하는 핵심 기능인 Port 설정 방법을 자세히 알아보겠습니다.