콘텐츠로 이동

애플리케이션과 컨테이너 구성

도커 스터디 - 처음부터 제대로 배우는 도커/쿠버네티스 컨테이너 개발과 운영 ch. 3

created: 2026.2.3 updated: 2026.2.10


정기적으로 잡을 실행하는 애플리케이션

  • 크론cron 사용

방법 1. 잡 컨테이너에 실행 API를 준비하고 크론 컨테이너에서 컨테이너 간 통신으로 API 호출 2. 크론 컨테이너에 도커를 구축하고 잡 컨테이너 실행

-> 완전 복잡하다!

FROM ubuntu:24.04

RUN apt update
RUN apt install -y cron

COPY task.sh /usr/local/bin/
COPY cron-example /etc/cron.d/
RUN chmod 0644 /etc/cron.d/cron-example

CMD ["cron", "-f"]
  • ubuntu 23.10은 지원이 종료되어 24.04 사용
  • 하나의 컨테이너 = 하나의 프로세스 방식보다 하나의 컨테이너로 여러 프로세스를 실행

하나의 컨테이너에 하나의 관심사

Each container should have only one concern

  • 하나의 관심사: 하나의 컨테이너가 하나의 역할과 문제영역(도메인)에만 집중해야 한다
  • 상세한 역할을 재정의하여 단순한 구성으로
    • 1분 간격으로 잡 트리거를 실행하는 크론, Hello!를 출력하는 잡 -> 1분마다 Hello!를 출력한다 => 단순화

컨테이너의 이식성portability

  • 컨테이너는 애플리케이션과 파일 시스템을 컨테이너라는 단위로 분리
  • 동일한 동작을 기대할 수 있는 재현성
  • OS나 서버 환경에 관계없이 동작
  • 호스트 OS와 커널의 리소스 공유 -> 특정 CPU 아키텍처나 OS를 전제로 성립
  • 멀티 아키텍처에 대응하는 컨테이너 이미지 빌드 중요
  • BuildKit: 멀티 플랫폼에 대응하는 컨테이너 이미지를 간단하게 빌드 가능
정적 링크static link 동적 링크dynamic link
빌드 시 바이너리에 라이브러리를 링크 실행 시 라이브러리를 링크
바이너리 사이즈가 커지기 쉬움. 라이선스 문제 발생 가능성 바이너리 사이즈가 작지만 OS에 필요한 라이브러리가 없으면 실행이 불가
  • CIcontinuous integration를 사용해 애플리케이션을 테스트하고 컨테이너 이미지를 패키징하는 경우
  • CI 서버에서 glibc 라이브러리를 쓰고, 컨테이너가 musl 라이브러리를 사용하면 동작하지 않을 수 있다.
  • 라이브러리를 정적 링크로 사용하거나 실행 플랫폼에 glibc를 설치하여 사용(실행 환경과 빌드 환경 동일하게)
  • Multi-stage builds: 도커에서 제공하는 빌드용 컨테이너와 실행용 컨테이너를 분리하여 안정적인 이식성 보장해주는 기능

컨테이너 친화 애플리케이션

  • 설정 파일을 포함하여 이미지 빌드하기
  • 컨테이너 외부의 설정 파일 사용하기
    • 커맨드 라인 인수로 값 전달하기
    • 환경 변수로 값 전달하기
    • 설정 파일 전달하기