티스토리 뷰

728x90
반응형

Docker 컨테이너가 실행 중일 때 패키지를 추가 설치하려고 한다면 다음과 같이 진행하면 된다.

1. docker exec 명령어로 컨테이너 접근

  • bash 쉘에 접근한다.
# 백그라운드에서 실행
docker-compose up -d  

# app 컨테이너 쉘에 접근
docker-compose exec app bash

(참고) [Docker] 실행 중인 컨테이너 쉘(shell / 콘솔)에 접근하기

 

2. 패키지 설치

  • 컨테이너 쉘에 접근 후, 필요한 패키지를 설치한다.
pip install <package_name>

패키지 설치 예시

 

3. 작업 완료 후 변경 사항 유지하기

  • 컨테이너에 직접 패키지를 설치하면 해당 컨테이너가 종료될 때 변경 사항이 사라진다.
  • 만약 영구적으로 유지하려면 두 가지 방법이 있다.

1) Dockerfile을 사용한 이미지 업데이트

  • 가장 좋은 방법으로 Dockerfile을 업데이트하여 필요 패키지를 명시적으로 추가하는 방법이다.
  • 컨테이너 쉘에서 현재 환경의 패키지 목록을 requirements.txt에 반영한다.
pip freeze > requirements.txt
  • 만약 Dockerfile에 requirements.txt 설치 명령어가 없다면 추가한다. (필요 시)
RUN pip install --no-cache-dir -r requirements.txt
  • 이미지를 재빌드하고 컨테이너를 실행한다.
docker-compose up --build

 

2) docker commit을 이용한 새로운 이미지 저장

  • docker commit 명령어를 통해 현재 컨테이너 상태를 이미지로 저장하는 방법이다.
  • exit을 통해 쉘을 종료하고 컨테이너를 커밋한다.
docker commit [OPTIONS] <container_id> <repository:tag>

# 예시
docker commit -m "Updated image with new packages" -a "yourname" <container_id> myapp:latest
  • 이후 새로운 컨테이너를 실행한다.
docker run myapp:latest
  • 혹은 docker-compose.yaml 파일이 아래와 같이 되어 있다면, 재빌드하고 컨테이너를 실행한다.
# docker-compose.yaml 일부
services:
  app:
    image: myapp:latest  # 커밋한 이미지를 사용
docker-compose up --build

 

(추가) Docker Hub 에 이미지 푸시

docker tag myapp:latest <your_dockerhub_username>/myapp:latest
docker push <your_dockerhub_username>/myapp:latest

 

728x90
반응형
댓글