반응형

docker-compose

docker-compose -f docker-compose.prod.yml down 
docker-compose -f docker-compose.prod.yml build --no-cache
docker-compose -f docker-compose.prod.yml up -d 

docker logs

docker logs name-nginx --tail 100 -f
docker logs name-fastapi --tail 100 -f

docker-compose down 후 up 만으로 수정사항 반영되는 경우는 어떤 경우이며, docker-compose build 까지 해야 하는 경우는 어떤 경우인가요? fastAPI, nginx를 사용중입니다.

Docker Compose에서 down/up만으로 충분한 경우와 build가 필요한 경우를 구분하는 핵심은 이미지 재빌드 필요 여부입니다.

down/up 만으로 충분한 경우
설정 파일 변경
docker-compose.yml 수정
docker-compose.prod.yml 수정
환경변수 변경 (.env 파일)
포트 매핑 변경
볼륨 마운트 경로 변경
네트워크 설정 변경
볼륨 마운트된 파일 수정
yaml

이런 설정에서 호스트 파일 수정

volumes:

  • ./nginx.conf:/etc/nginx/nginx.conf
  • ./templates:/app/templates
    호스트의 nginx.conf나 templates 폴더 내용을 수정하면 down/up만으로 반영됩니다.

외부 이미지 사용 시
yaml
services:
nginx:
image: nginx:latest # 외부 이미지 사용
build가 필요한 경우
소스 코드 변경
Python 파일 수정 (FastAPI 코드)
Dockerfile 수정
requirements.txt 변경
새로운 패키지 설치
이미지 내부 파일 변경
dockerfile

Dockerfile에서 COPY되는 파일들

COPY ./app /app
COPY requirements.txt .
RUN pip install -r requirements.txt
빌드 시점에 설치되는 요소들
apt 패키지 설치
pip 패키지 설치
이미지 내부 설정 파일 변경
실제 시나리오 예시
down/up으로 충분
bash

nginx 설정 파일 수정

vim nginx.conf

환경변수 변경

vim .env

포트 변경

vim docker-compose.yml

적용

docker-compose down
docker-compose up -d
build 필요
bash

FastAPI 코드 수정

vim app/main.py

새 패키지 추가

echo "requests==2.28.0" >> requirements.txt

Dockerfile 수정

vim Dockerfile

적용

docker-compose down
docker-compose build
docker-compose up -d
판단 기준
핵심 질문: "컨테이너 내부의 파일이 변경되었는가?"

YES → build 필요
NO → down/up만 충분
추가 고려사항:

볼륨 마운트된 파일은 호스트에서 직접 수정되므로 빌드 불필요
이미지 태그가 latest인 경우 docker-compose pull로 최신 이미지 가져올 수 있음
캐시된 레이어가 있어도 코드 변경 시에는 해당 레이어부터 재빌드됨
개발 효율성을 위해 가능한 한 볼륨 마운트를 활용하여 down/up만으로 변경사항을 반영할 수 있도록 설정하는 것이 좋습니다.

반응형

+ Recent posts