Docker 컨테이너를 사용하다 보면, 새로운 라이브러리를 추가하거나 설정을 변경하는 등의 작업이 이루어질 수 있다.
이러한 변화는 컨테이너가 실행 중일 때는 반영되지만 컨테이너를 재기동하거나 삭제 후 다시 시작할 경우 변동사항이 사라질 위험이 있다.
변동사항을 포함한 새로운 Docker 이미지를 생성하여, 언제든지 동일한 상태로 컨테이너를 재구성할 수 있도록 하는 것이 중요하다.
이 글에서는 Shell Script를 활용해 Docker 컨테이너에서 변동사항을 포함한 이미지를 자동으로 생성하고 관리하는 방법을 소개한다. 이 과정을 통해 컨테이너의 상태를 안정적으로 유지하고 재기동 시에도 변동사항이 반영된 이미지를 사용할 수 있게 된다.
이미 생성된 컨테이너를 사용한 이미지 업데이트 자동화
이 방법은 이미 실행 중인 컨테이너의 현재 상태를 기반으로 새로운 Docker 이미지를 생성한다. 이 방식은 컨테이너 내에서 발생한 모든 변경 사항을 그대로 반영할 수 있다.
절차
- 컨테이너의 상태 확인: 이미지로 빌드할 실행중인 컨테이너의 필요한 변경 사항이 적용된 상태인지 확인한다.
- Shell Script 작성 및 실행: 변경된 컨테이터를 이미지로 커밋하는 Shell Script를 작성하고 실행한다.
shell script 예시
# docker-commit.sh
#########################
# 컨테이너 ID 목록을 배열로 정의
containers=("container1" "container2" "container3") # 컨테이너 이름
# 각 컨테이너를 이미지로 커밋하여 저장
for container in "${containers[@]}"; do
docker commit "$container" "${container}_image:latest"
done
#######################
# 파일 저장 후 명령어 실행
./docker-commit.sh
이렇게 작성한 shell script를 실행하게 되면, containers 배열에 정의한 컨테이너의 모든 변경 사항(설치된 패키지, 설정 변경 등)이 반영된 이미지를 빌드할 수 있다.
장점:
- 변경 사항 반영: 실행 중인 컨테이너에서 발생한 모든 변경 사항(설치된 패키지, 설정 변경 등)을 이미지에 반영할 수 있다.
- 즉각적인 적용: 개발 중에 컨테이너 내에서 적용한 변경 사항을 빠르게 이미지로 저장할 수 있다.
단점은 컨테이너 내부에서 수동으로 변경사항을 적용을 해야하므로 완전한 자동화는 아니다.
Dockerfile을 사용한 이미지 업데이트 자동화
이 방법은 Dockerfile을 사용하여 이미지 빌드 과정을 코드로 관리하고, 이를 자동화하여 최신 이미지를 생성한다. 모든 변경 사항(설치된 패키지, 설정 등)은 Dockerfile에 명시적으로 기록된다.
절차
- Dockerfile 작성: 애플리케이션의 설정, 설치해야 할 패키지, 실행 명령어 등을 정의한 Dockerfile을 작성한다.
- 이미지 빌드: Dockerfile을 기반으로 새로운 이미지를 빌드하여 최신 상태를 반영한다.
# (예시는 airflow, 각자 환경에 맞게 수정)
FROM apache/airflow:2.6.1
# 환경 변수 설정
ENV AIRFLOW__CORE__EXECUTOR=LocalExecutor
ENV AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
ENV AIRFLOW__CORE__FERNET_KEY=your-fernet-key
ENV AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=True
ENV AIRFLOW__CORE__LOAD_EXAMPLES=False
# /etc/pip.conf 파일 생성 및 설정 추가
RUN echo "[global]\n\
trusted-host = pypi.python.org\n\
index-url = https://pypi.org/simple\n\
" > /etc/pip.conf
# 필요한 라이브러리 설치
COPY requirements.txt /requirements.txt # requirements.txt 별도 파일에 필요한 라이브러리 작성
RUN pip install -r /requirements.txt
# 컨테이너 실행 시 시작할 명령어
CMD ["airflow", "webserver"]
#################################
#requiements.txt 파일 예시
requests==2.25.1
numpy>=1.19.5
pandas==1.2.3
장점
- 재현성: Dockerfile에 명시된 대로 이미지를 빌드하기 때문에, 동일한 이미지를 언제든지 재현할 수 있다.
- 버전 관리: Dockerfile을 버전 관리 시스템(Git 등)으로 관리하여, 변경 내역을 추적하고 협업할 수 있다.
- 자동화 용이: CI/CD 파이프라인에 쉽게 통합하여, 자동으로 이미지를 빌드하고 배포할 수 있다.
단점:
- 변경 사항 즉각 반영 어려움: 컨테이너에서 발생한 일시적인 변경 사항을 반영하려면, Dockerfile을 수정해야 하므로 시간이 걸릴 수 있다.
- Dockerfile 관리 필요: 변경 사항이 발생할 때마다 Dockerfile을 수정하고 관리해야 한다.
'Docker & Kubernetes' 카테고리의 다른 글
도커 이미지 빌드하기 (Apache Airflow) (0) | 2024.11.03 |
---|---|
호스트에서 직접 도커 컨테이너에 파이썬 라이브러리 설치하기 (2) | 2024.10.27 |
Docker Compose의 구조 (0) | 2024.08.25 |
Docker Compose에서 logging 설정을 활용한 로그 관리 (0) | 2024.08.24 |
Docker Compose로 /etc/hosts 파일에 항목 추가하기 (0) | 2024.07.13 |