4.1 코드로 개발하는 컨테이너 인프라, Dockerfile
4.1.1 IaC와 Dockerfile
- Dockerfile을 통해 원하는 개발 환경을 코드로 구성할 수 있다. → IaC
- IaC가 필요한 이유
- 커맨드 기반의 인프라 구성 시 인적 오류 가능성이 높다.
- 각종 환경 설정 정보와 설치 프로그램을 요구사항에 맞게 따져봐야 한다.
- 설치 이후 오류가 발생하면 때로는 재설치도 불가피하다.
- 프로그래밍형 인프라(IaC) 개발은 탄력성, 확장성, 반복성을 부여하여 동일한 환경을 보유한 서버를 수십에서 수백 대까지 운영, 관리하게 해준다.
- Dockerfile을 통해 코드나 이미지를 다양한 공유 방식을 통해 언제 어디서든 컨테이너로 만들어낼 수 있다.
4.1.2 최적의 Dockerfile 만들기
Dockerfile이란 특정 컨테이너를 위한 이미지 개발 시 필요한 모든 설정을 담은 이미지 빌드용 DSL 파일이다.
- 경량의 컨테이너 서비스를 제공
- 이미지의 지향점에 필요한 프로그램, 라이브러리, 실행 파일만 보유
- Dockerfile에 담기는 레이어를 최소화
- Dockerfile 명령어 수와 도커 이미지 레이어 수는 동일하다.
- 레이어를 줄일 수 있도록 Dockerfile 명령어 사용 방법을 정확히 알고 작성해야 한다.
- 도커의 철학! 하나의 애플리케이션은 하나의 컨테이너에
- 한 컨테이너에 한 애플리케이션이 동작해야 컨테이너 간 독립성을 보장함과 동시에 버전 관리, 소스 코드 모듈화 등에 이점이 있다.
- 마이크로서비스 지향적 설계
- 캐시 기능을 활용
- Dockerfile로 이미지를 빌드하면 각 명령어 단위로 캐싱한다.
- 캐싱된 명령어는 재사용을 통해 빌드 속도를 빠르게 한다.
- IaC 환경 개발은 디렉터리 단위로
- Dockerfile로 이미지 빌드 시 현재 위치로부터 하위 경로 모든 디렉터리와 파일을 도커 컨텍스트에 저장한 뒤 작업이 진행된다. (빌드 컨텍스트)
- 따라서 이미지 빌드와 상관 없는 파일이 포함되지 않도록 별도의 디렉터리를 두고 독립된 환경에서 빌드가 이루어져야 빌드 성능에 도움이 된다.
- 서버리스 환경으로 개발
- Dockerfile을 통해 미리 설정된 환경을 서버리스 애프릴케이션 환경이라 한다.
- 서버리스 환경은 사용자가 서버를 프로비저닝, 확장, 관리할 필요가 없어 개발자가 핵심 개발에 집중할 수 있다.