애플리케이션과 컨테이너 구성¶
도커 스터디 - 처음부터 제대로 배우는 도커/쿠버네티스 컨테이너 개발과 운영 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: 도커에서 제공하는 빌드용 컨테이너와 실행용 컨테이너를 분리하여 안정적인 이식성 보장해주는 기능
컨테이너 친화 애플리케이션¶
- 설정 파일을 포함하여 이미지 빌드하기
- 컨테이너 외부의 설정 파일 사용하기
- 커맨드 라인 인수로 값 전달하기
- 환경 변수로 값 전달하기
- 설정 파일 전달하기