1 분 소요

도커 파일 (Dockerfile) : 서버 운영 기록을 코드로 저장한 파일을 특정 시점의 도커 이미지로 빌드

  • 눈송이 서버 (Snowflakes Server) : 각 서버마다 운영 기록이 달라 서로 모양이 다른 서버들이 공존하는 상황

… 서버 간의 운영체제, 컴파일러, 설치된 패키지 등의 차이로 발생하는 문제 개선을 위해 서버 운영 기록을 저장하자!

도커 파일을 생성하는 과정은 테스트 주도 개발의 순환에 부합하다고 볼 수 있다.

  • 테스트 주도 개발 (Test Driven Development) : 선 테스트 후 개발 사이클을 반복하는 개발 방법론
  1. 테스트를 작성한다. → 도커 파일을 만든다.
  2. 테스트에 실패하고 코드를 수정한다. → 도커 이미지의 빌드에 실패하고 도커 파일을 수정한다.
  3. 테스트에 성공한다면, 코드를 리펙터링한다. → 도커 이미지의 빌드에 성공한다면, 도커 파일의 내용을 리펙터링한다.
  4. 처음으로 되돌아간다.

DSL (Domain-Specific Language) : 도커 파일을 작성할 때 쓰는 언어 (도커 이미지의 생성 과정 표현)

생성 과정을 표현? : 도커 파일은 일련의 인스트럭션을 실행된 결과로 도커 이미지를 생성한다.

  • 도커 파일의 인스트럭션과 이미지 레이어는 1:1의 관계를 가진다.
  • FROM : 다른 컨테이너 이미지를 빌드의 시작점으로 지정

    • AS: 컨테이너에 이름을 붙일 수 있음
  • ENV : 컨테이너 내에서 사용될 환경 변수를 지정

  • WORKDIR : 컨테이너 이미지의 파일 시스템에 디렉터리를 만들고, 해당 디렉터리를 작업 디렉터리로 지정

  • COPY : 로컬의 파일 시스템 내 파일, 디렉터리를 컨테이너 이미지로 복사

    • --from= : 해당 파일이 호스트 컴퓨터가 아닌 다른 컨테이너의 파일임을 알려줌
  • CMD : 도커가 이미지로부터 컨테이너를 실행했을 때 실행할 명령을 지정

  • RUN : 빌드 과정에서 컨테이너 안에서 명령을 실행한 다음에 그 결과를 이미지 레이어에 저장

Q. 도커 파일을 쓰는 이유?

A1. 동일한 환경에서 어플리케이션을 실행 가능하게 한다.

  • 모든 빌드 과정은 도커 컨테이너 내부에서 이루어지며, 각 컨테이너는 모든 도구를 정확한 버전으로 갖추고 있다.
    • 신규 개발자의 적응 기간, 빌드 서버의 관리 부담, 개발자 간의 도구 버전의 차이로 인한 빌드 실패를 줄일 수 있다.

A2. 멀티 스테이지 환경에서 각 단계는 자신만의 캐시를 가져 성능을 향상시킬 수 있다.

  • 도커는 빌드 중에 각 인스트럭션에 해당하는 레이어 캐시를 찾는다.
    • 만약 해당되는 캐시를 찾지 못하면 남은 인스트럭션이 모두 실행되지만, 그 범위가 해당하는 단계 안으로 국한된다.
    • 이어지는 다음 단계는 캐시를 재사용하면서 시작되므로, 캐시 재사용을 통해 빌드 단계에서 시간 절약이 가능하다.

A3. 멀티 스테이지 스크립트를 통해 최종 산출물의 크기를 가능한 한 작게 유지할 수 있다.

  • 최종 산출물인 도커 이미지에 불필요한 도구를 제외하여 어플리케이션의 의존 모듈 자체를 줄일 수 있다.

태그:

업데이트: