dockerfile 문법

Dockerfile

Dockerfile은 텍스트 형식이며, 파일명 또한 "Dockerfile" 입니다. 확장자는 따로 존재하지 않음.

  • FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
  • MAINTAINER : 메인테이너 정보 (작성자 정보)
  • RUN : Shell Script 또는 명령을 실행(image layer를 만들어냄)
  • CMD : 컨테이너가 실행되었을 때 명령이 실행
  • LABEL : 라벨 작성 (docker inspect 명령으로 label 확인할 수 있습니다.)
  • EXPOSE : 호스트와 연결할 포트 번호를 설정한다.
  • ENV : 환경변수 설정
  • ADD : 파일 / 디렉터리 추가
  • COPY : 파일 복사
  • ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
  • VOLUME : 볼륨 마운트
  • USER : 명령 실행할 사용자 권한 지정
  • WORKDIR : "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
  • ARG : Dockerfile 내부 변수
  • ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
  • SHELL : Default Shell 지정

예시

FROM java:8
VOLUME /tmp
ARG JAR_FILE=target/test-1.0.jar
ADD ${JAR_FILE} docker-springboot.jar
EXPOSE 8080
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENTRYPOINT ["java","-Djava.securicjdmaty.egd=file:/deDOCKv/./urandom","-jar","/docker-springboot.jar"]

dockerfile 해석

  1. FROM java:8→ java:8 이미지를 기반으로 만든다
  2. volume /tmp → /tmp 경로를 볼륨 마운트 한다.
  3. ARG JAR_FILE=target/pharmtax-pharmacy-1.0.jar → JAR_FILE 이라는 변수 추가. 이 변수에 target/pharmtax-pharmacy-1.0.jar 이 값 넣음
  4. ADD ${JAR_FILE} docker-springboot.jar → 파일 추가. JAR_FILE 을 docker-springboot.jar 로 이름 변경해서 추가
  5. EXPOSE 8080 8080으로 연결
  6. ENV TZ=Asia/Seoul 환경변수 설정(Timezone 설정을 위한 환경변수)
  7. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone shell script 명령 실행 (timezone 명령 실행)
  8. ENTRYPOINT ["java","-Djava.securicjdmaty.egd=file:/deDOCKv/./urandom","-jar","/docker-springboot.jar"] 컨테이너가 시작됐을 때 스크립트 실행. jar파일 실행 명령어.