무엇을 컨테이너로 만드는 것인가? 에 대한 답은 개발한 애플리케이션(실행 파일)과 운영환경이 모두 들어있는 독립된 공간 이라고 할 수 있다.

Dockerfile은 이러한 컨테이너를 만들 수 있도록 도와주는 명령어 집합이다.

  • 쉽고 간단하며, 명확한 구문을 가진 textfile로 작성된 작업내용은 위에서 아래로 해석 및 실행 하게 된다.
  • 컨테이너 이미지를 생성 할 수 있는 고유 지시어를 가지고 있다. 예) FROM, COPY, CMD 등...
  • 지시어는 대소문자를 구분하지 않지만, 가독성을 위해 사용한다.
  • 작성된 dockerfile 문서는 'docker build' 명령어를 통해 컨테이너로 생성된다.

Dockerfile을 작성할 때 자주 사용되는 명령어 문법에 대하여 간략하게 설명한다.
(실제로 더 많은 명령어들이 존재함)

  • '#' : 코멘트(주석)를 의미.

  • FROM : 컨테이너의 base image를 지정한다.(운영 환경)

  • MAINTAINER : 이미지를 생성한 사람의 이름 및 정보를 입력한다.

  • LABEL : 컨테이너 이미지에 컨테이너 정보를 저장한다.

  • RUN : 컨테이너 빌드를 위해 base image에서 실행할 commands.
    -> Dockerfile로 부터 이미지를 빌드하는 순간에 실행되는 명령어. (주로 설치 관련 작업을 수행)

  • COPY : 컨테이너 빌드 시 호스트의 파일을 컨테이너로 복사한다.

  • ADD : 컨테이너 빌드 시 호스트의 파일을 컨테이너로 복사한다.

  • WORKDIR : 컨테이너 빌드 시 명령이 실행될 작업 디렉터리를 설정한다.

  • ENV : 환경변수를 지정한다.

  • USER : 명령 및 컨테이너 실행시 적용할 유저를 설정한다.

  • VOLUME : 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트 한다.
    -> 컨테이너 동작 시 실행된다.

  • EXPOSE : 컨테이너 동작 시 외부에서 사용할 포트를 지정한다.

  • CMD : 컨테이너 동작 시 자동으로 실행할 서비스 및 스크립트를 지정한다.
    -> 이미지로 부터 컨테이너를 생성하여 최초로 실행될 때 동작한다.

  • ENTRYPOINT : CMD와 함께 사용하면서 command 지정 시 사용한다.
    -> 이미지로 부터 컨테이너를 생성하여 최초로 실행될 때 동작한다.

ADD와 COPY의 차이점

로컬에 위치한 압축 파일(tar, tar.gz)을 docker image의 특정 디렉토리에 추출하려는 경우 또는 원격지(url)의 파일을 docker image로 복사하려는 경우에 ADD 명령어를 사용하면 된다.

단순하게 로컬 파일 또는 디렉토리를 docker image로 복사하는 경우에는 COPY를 사용하는 것이 적절하다.

CMD와 ENTRYPOINT의 차이점

  • CMD는 러닝 시 인자를 받아 오버라이딩 할 수 있다.
  • ENTRYPOINT는 러닝 시 인자를 차단한다. (의도하지 않은 실수를 방지함)

Dockerfile의 좋은 예시는 https://hub.docker.com 에서 많이 참고 하는 것이 도움이 된다.

profile
뚜벅뚜벅 개발 일기🕺

0개의 댓글

Powered by GraphCDN, the GraphQL CDN