본문 바로가기
Server & Network/Docker & Kubernetes

[Docker] 도커 파일(Dockerfile) 속성 정리

by AustinProd 2023. 2. 14.

이전 포스트에서 도커 실행 방법과 함께 도커 파일에 대해 정리한 적 있다. 이후 포스트에서 도커와 관련해 여러 실행 케이스를 공유할 예정인데, 그전에 도커 파일 내부 속성값에 대해 전체적으로 알아보고 정리하고자 한다.

 

속성값

  • FROM
    • 도커 베이스 이미지를 명시한다. OS나 Runtime 환경 등을  지정한다. 
    • 지정된 이미지는 도커 허브(Docker Hub)를 참조해 자동으로 세팅된다.
  • LABEL
    • Key-Value의 라벨을 생성한다.
    • 라벨 정보는 Meta 데이터와 같다. 주로 버전 정보, 생성자, 생성일 등 해당 이미지 파일에 대한 부가 정보를 명시한다.
    • 이 옵션은 컨테이너가 실행될 때, 실행된다.
  • WORKDIR
    • 도커를 통해 실행될 컨테이너 내부 작업공간(= 워크 스페이스) 경로를 기입한다.
    • 설정 경로를 베이스로 상대 경로가 달라진다.
  • ENV
    • 실행 환경 변수를 지정할 때 사용한다.
    • 바이너리 파일 경로, 실행 소프트웨어 버전, 프로파일 정보 등이 대표적이다.
  • ADD
    • 명시한 파일 및 디렉토리를 컨테이너 이미지로 이동시킬 목적으로 사용한다. 
    • 추가할 파일이 압축파일이라면, 자동으로 압축이 풀린다.
    • URL 정보를 넣을 수 있다. ( URL을 통한 파일 다운로드 용도 )
  • COPY
    • ADD와 비슷한 속성으로, 지정한 파일을 컨테이너 이미지 내부로 복사할 목적으로 사용한다.
    • ADD와의 차이점은 압축 파일의 압축을 자동으로 풀어주지 않는다는 점과 URL 정보를 기입할 수 없다는 점이다.
    • 단순 카피이기 때문에 ADD보다 선호되는 경향이 있다.
  • RUN
    • 컨테이너가 생성될 때 CLI 환경에서 실행할 명령어를 기입한다.
    • 단순 문자열로 명령어가 작성된다. ( "npm install")
    • 이미지를 빌드할 때, 컨테이너가 실행될 때 모두 해당 명령어를 실행한다.
  • CMD
    • RUN과 비슷하게 컨테이너가 생성될 때 CLI 환경에서 실행할 명령어를 기입한다.
    • 문자열이 담긴 배열 형태로 작성된다. ( ["node", "index.js"] )
    • 컨테이너가 실행될 때, 해당 명령어를 수행한다.
  • EXPOSE
    • 컨테이너를 실행할 때, 외부와 연결할 포트 정보를 명시한다.
    • 도커 파일에 이 옵션을 설정하더라도 실제로 컨테이너가 실행될 때 해당 포트로 동작하지 않는다.
    • 단순히 외부 사용자들이 참조하는 목적으로 기입된다.
  • ENTRYPOINT
    • 컨테이너 실행 시점에 필수로 실행되어야 하는 명령어를 작성한다.
    • RUN과 같은 문자열 형태("npm install"), CMD와 같은 문자열의 배열 ( ["node", "index.js"] ) 모두 가능하다.
    • 해당 속성의 실행을 통해 뒤에 실행될 CMD 명령어를 제어할 수 있어 유용하다.
    • 위와 같은 이유로 CMD 속성 앞에 기입된다.
  • VOLUME
    • 호스트가 실행된 컨테이너 내부의 파일을 읽고 쓰는 목적으로 사용된다.
    • 컨테이너 내부에서 생성된 파일 혹은 디렉토리를 외부로 노출한다.
    • 일반적으로 로그 확인 및 저장에 활용된다.
  • USER
    • 이미지를 생성할 유저 정보를 기입한다.
  • ONBUILD
    • 해당 도커 이미지가 다른 도커 이미지의 베이스로 사용될 때, 빌드 시점에 실행할 명령어를 설정한다.
    • 이 도커 이미지의 빌드나 실행과는 무관하다.
  • ARG
    • 이미지를 빌드할 때, 함께 설정할 
  • SHELL
    • 디폴트로 지정된 Shell 타입을 변경할 수 있다. (디폴트로 지정된 쉘은 /bin/sh)
    • 베이스 이미지의 실행환경(OS)과 일치하지 않으면, 에러가 될 수 있다.
    • 윈도우의 경우 cmd, powershell
    • 리눅스의 경우 zsh, csh, tcsh
  • STOPSIGNAL
    • 컨테이너 종료 시점에 사용될 시스템 콜 종류를 지정한다. (예를 들어, 9)
    • 디폴트는 SIGTERM이다.
  • HEATLTHCHECK
    • 컨테이너에서 동작하는 소프트웨어의 상태를 체크한다.
    • 내부 프로세스의 정살 실행을 확인할 때 유용하다.
    • 상태 체크 정보는 컨테이너 정보에 로그 형식으로 저장된다.

 

정리

도커 파일의 옵션 정보는 위에서 소개한 내용이 대부분이다. 세부 플레그 옵션까지 살펴보면 양이 많아지지만, 사용하고자 하는 기능을 먼저 생각한 뒤 위 옵션을 베이스로 찾아보면 충분하다고 생각한다.

 

아래 링크는 도커 파일의 공식문서 링크다. 필요한 작성 예제가 잘 첨부되어 있어 실제로 작업할 때, 좋은 자료가 되지 않을까 생각한다.

 

공식 문서 링크
https://docs.docker.com/engine/reference/builder/#shell

 

댓글