파란하늘의 지식창고
반응형

명령어는 대소문자를 가리지 않으나 보통 대문자로 사용함

https://docs.docker.com/engine/reference/builder/

 

Dockerfile reference

 

docs.docker.com

아래의 경우 docker 실행 가능한 jenkins 이미지를 만드는 Dockerfile이다.

FROM jenkins/jenkins:jdk11
MAINTAINER bluesky <bluesky@email.net>

USER root
RUN curl -fsSL https://get.docker.com -o get-docker.sh \
    && sh get-docker.sh 
RUN usermod -aG docker jenkins 
USER jenkins

위 Dockerfile은 다음과 같이 수행된다.

  1. jdk11 버전의 jenkins image를 가져온 후 (해당 docker image의 유저/그룹 권한은 jenkins/jenkins)
  2. root user 권한으로
  3. docker를 설치하고
  4. docker를 설치할 때 사용된 docker 유저를 jenkins group에 추가하는 작업을 실행한 후 jenkins user로 변경하는 작업을 진행한다.

이때 사용되는 Dockerfile 명령어의 역할은 다음과 같다.

  • FROM : 생성할 image의 base가 될 image. 1개 이상 반드시 필요하고 N개 사용도 가능
  • MAINTAINER (deprecated) : image를 생성한 개발자 정보, LABEL로 교체해 표현할 수 있음
  • LABEL : image에 metadata를 추가, "key:value"의 형태로 저장됨, inspect 명령 사용 시 확인할 수 있는 정보
  • RUN : image를 만들기 위해 container 내부에서 명령을 실행.
  • USER : 해당 설정 이후 명령어는 해당 사용자 권한으로 실행.

이외에 많이 쓰이는 명령어들은 다음과 같다.

  • EXPOSE : 노출할 port를 설정. 다만 명시만 할 뿐이므로 컨테이너 생성 시 -P flag와 함께 사용됨
  • CMD : container가 시작될 때마다 실행할 명령어를 설정. Dockerfile당 한 번만 사용
  • ENTRYPOINT : CMD와 동일하게 container가 시작될 때 수행할 명령을 설정.
    cmd에서 --entrypoint로 parameter를 받아 사용할 수 있는 스크립트의 역할을 할 수 있음
  • COPY : local directory에서 읽어 들인 context로부터 image에 file을 복사
  • ADD : file을 추가
    COPY는 local의 file만 image에 추가할 수 있지만 ADD는 외부 URL 및 tar file에서도 파일을 추가할 수 있음
  • WORKDIR : container 내에서 directory 이동 (cd 명령어라고 생각하면 됨)
  • ENV : Dockerfile에서 사용될 환경 변수를 지정. 빌드 시 run 명령어에서 -e 옵션을 통해 재선언이 가능함
  • VOLUME : 호스트와 공유할 container 내부의 directory 설정
  • ARG : 빌드 시 추가로 입력을 받아 Dockerfile 내에서 사용될 변수의 값을 설정. ENV와 마찬가지로 ${}로 호출하여 사용한다. --build-arg 옵션으로 설정함.
  • ONBUILD : 빌드된 이미지를 기반으로 하는 다른 이미지가 Dockerfile로 생성될 때 실행할 명령어를 추가
  • STOPSIGNAL : container가 정지될 때 사용될 시스템 콜의 종류를 지정. default는 SIGTERM, 빌드 시 --stop-signal 옵션으로 설정할 수 있음
  • HEALTHCHECK : container에서 동작하는 application의 상태를 체크하도록 설정
    FROM nginx
    RUN apt-get update -y && apt-get install curl -y
    HEALTHCHECK : --interval=1m --timeout=3s --retries=3 CMD curl -f http://localhost || exit 1
  • SHELL : 사용하고자 하는 shell을 명시. SHELL을 지정하지 않으면 RUN 사용 시 window와 linux가 각각의 환경에 맞춰 명령어가 다르게 수행됨 
반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요