[Docker]Dockerfile에 대하여

NewNewDaddy·2023년 10월 1일
0

DOCKER-KUBERNETES

목록 보기
2/10

0. INTRO

  • Dockerfile은 Docker Image를 만드는데 필요한 내용들을 하나의 파일에 명시해놓은 것으로 해당 Dockerfile을 사용하여 사용자가 커스텀하게 생성한 Image를 만들어내게 된다.

1. 인자들 설명

  1. FROM <이미지>

    • Dockerfile을 만들 때 가장 바탕이 되는 Image를 명시
  2. COPY <파일경로> <Docker Container 내부 경로>

    • 해당 이미지를 바탕으로 Container를 생성할 때, 사용자 서버의 파일을 Docker Container의 경로로 단순 복사
  3. ADD <파일경로> <Docker Container 내부 경로>

    • COPY와 동일한 기능의 파일 단순 복사
    • URL 주소를 통한 복사 가능
    • 압축파일(.tar)의 경우 압축 파일경로로 넣으면 압축을 풀어서 Container 내부 경로에 복사
  4. RUN < COMMAND >

    • Docker Image 생성시 수행되어야 하는 명령들을 나열해준다.
    • Shell 형식으로 기술
      RUN sudo apt get update
      RUN apt-get install -y nginx
    • exec 형식으로 기술
      - Shell 형식으로 명령을 기술하면 /bin/sh에서 실행되지만, Exec 형식으로 기술하면 쉘을 경유하지 않고 직접 실행한다. 또는 기본 쉘이 아닌 bash, sh, ash 등 다른 쉘에서 명령을 실행하고 싶을 때 사용한다.
      RUN ["/bin/bash", "-c", "apt-get install -y nginx"]
  5. WORKDIR <container 내부 경로>

    • 해당 이미지로 만들어지는 Container의 기본 디렉토리를 세팅해주는 기능.
    • WORKDIR에 명시된 경로를 기준으로 Dockerfile 내부의 명령들이 수행된다.
    • docker exec으로 컨테이너 내부에 접속했을 때 보여지는 기본 경로이다.
    • WORKDIR을 연속으로 여러개 입력하면 입력한 경로를 따라 계속 안으로 들어가게된다.
    WORKDIR /a
    WORKDIR b
    WORKDIR c

    -> container 내부의 WORKDIR = /a/b/c

  6. ENV < key > < value >

    • 해당 이미지로 만들어지는 container 내부에 환경변수를 정의한다.
    • docker run 할때 --env 명령을 통해 환경변수 전달도 가능하다.
      -> docker run -it --name env-cont --env USER=hyunsoo busybox sh
  7. LABEL

    • 해당 이미지에 라벨을 달아주어 나중에 검색이나 필터링시 편리하도록 한다.
    LABEL version=1
    LABEL name="hyunsoo-image"
  8. VOLUME <로컬 경로> <컨테이너 내부 경로>

    • 로컬 경로를 컨테이너 내부 경로와 연결한다.(데이터 공유 가능)
  9. EXPOSE < PORT >

    • Dockerfile을 바탕으로 만들어진 이미지를 통해 생성된 컨테이너의 열려있는 Port 번호를 명시한다.
  10. HEALTHCHECK --interval=5s CMD ping -c 1 172.17.0.2

    • 특정 IP 포트에 해당하는 컨테이너의 상태를 ping을 통해 체크한다.
    • 기존에 떠있는 컨테이너에 상태 체크하는 또 다른 컨테이너를 생성할 수 있다.
    • docker run 명령으로 health check 할 수도 있다.
      -> docker run -dt --name tmp2 --health-cmd "curl -f http://localhost" --health-interval=5s --health-retries=1 busybox sh
      --interval=DURATION (default: 30s)
      --timeout=DURATION (default: 30s)
      --start-period=DURATION (default: 0s)
      --retries=N (default: 3)
  11. CMD < COMMAND >

    • Docker Image가 Container로 실행되고 처음 수행하는 명령
    • CMD 명령이 있는 docker image를 run 할 때 기존 CMD 명령에 대해 override가 가능하다.
      -> docker run -dt --name cmd-container custom-img ping -c 10 google.com
  12. ENTRYPOINT < COMMAND >

    • CMD와 비슷한 기능을 하지만 다른점은 CMD는 Override가 되지만 ENTRYPOINT는 안된다.
    • docker run을 특정 명령과 함께 했답면 override가 되는게 아니고 ENTRYPOINT 명령에 더해 append 된다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글