Container & K8S/Docker

[Docker] 도커 이미지 빌드와 도커파일

dhyuck 2021. 9. 5. 02:35
반응형

docker image buildDockerfile로 부터 이미지를 만드는 명령 입니다.

  • 도커 이미지 빌드 (docker image build)

      docker image build [OPTIONS] PATH | URL | -
      # Build an image from a Dockerfile
      # -t, --tag list : 이미지 이름과 태그를 지정한다
      # -f, --file string : 도커파일의 이름을 지정한다. 기본값은 "PATH" 에 존재하는 Dockerfile
      # --build-arg list : 빌드 될 때 변수가 세팅된다. (Set build-time variables)
    
      # ex) 현재 디렉터리에 있는 "Dockerfile"를 "hyuckang_image:1.0" 이미지로 빌드한다.
      docker build -t hyuckang_image:1.0 .
    
      # ex) 현재 디렉터리에 있는 "hyuckang_Docerfile"를 hyuckang_image:2.0 이미지로 빌드한다.
      sudo docker build -t hyuckang_image:2.0 -f hyuckang_Dockerfile .
    
      # ex) 현재 디렉터리에 있는 "Dockerfile" 를 "hyuckang_image:3.0" 이미지로 빌드할때
      # Docekr "ARG ver"의 값이 3.0으로 덮어 씌어진다. 
      sudo docker build -t hyuckang_image:3.0 --build-arg ver=3.0 .

Docker can build images automatically by reading the instructions from a Dockerfile.
도커는 DockerFile에 있는 명령을 읽어서 자동으로 이미지를 빌드 할 수 있습니다.

  • FROM : 기본 레이어가 되는 베이스 이미지 지정합니다.

      FROM ubuntu:20.04
  • RUN : 이미지가 빌드 될 때 실행되는 명령이며, 실행 결과는 레이어 단위로 쌓이게 됩니다.

      # RUN <command>
      RUN apt-get update -y
    
      # RUN ["executable", "param1", "param2"]
      RUN ["pwd"]
  • EXPOSE : 컨테이너 실행 될 사용할 포트를 명시합니다.

    (하지만 실제로는 포트를 오픈하지는 않습니다. 이는 이미지를 빌드한 사람과 컨테이너를 실행한 사람사이에 어떤 포트를 열지에 대한 일종의 문서 역할입니다. 그렇기 때문에 컨테이너를 구동 할 때 -p 옵션으로 포트를 지정해주어야 합니다.)

      EXPOSE 80
  • CMD : 컨테이너가 run 되거나 start 될 경우 실행되는 기본 명령이며, 덮어씌울수(Override) 있습니다.(사용자가 무시 할 수 있습니다.)

    이 명령은 Dockerfile에 1개만 있을 수 있습니다. 만약 2개 이상이라면 마지막 CMD가 실행 됩니다.

      CMD ["apachectl", "-D", "FOREGROUND"]
  • ENTRYPOINT : 이미지를 실행 가능한 바이너리로 만들어 주는 명령입니다. CMD와 다르게 덮어씌워지지 않습니다. (사용자가 무시 할 수 없습니다.)

      ENTRYPOINT ["top"]
  • ENV : 이미지에서 사용되는 환경변수를 지정합니다.

      ENV version 0.1
  • ARG: 도커 파일이 빌드 될 때 사용 할 수 있는 매개변수 입니다. —build-agr = 로 전달 할 수 있습니다.

      ARG my_version=1.0
  • WORKDIR : 이미지의 작업 디렉터리를 지정합니다. 경로가 존재하지 않으면 경로가 생성 됩니다.

      WORKDIR /var/www
  • COPY : 로컬 호스트에 존재하는 파일을 이미지 안으로 복사합니다.

      COPY /home/hyuckang/index.html /var/www/html
  • ADD : 로컬호스트에 존재하는 파일을 복사하거나, 원격 URL 파일을 추가합니다.

      ADD test.txt /home/hyuckang
  • ONBUILD : 빌드가 완료된 이미지가 다른 이미지의 베이스 이미지가 될 때 실행됩니다.

    이는 기존에 빌드된 이미지를 템플릿처럼 만들고, 새로운 이미지를 만들때 유용합니다.

      ONBUILD RUN apt-get update
  • HEALTHCHECK : 컨테이너의 헬스체크를 지시합니다.

    도커 파일에는 1개의 HEALTHCHECK 명령이 있을 수 있습니다. 2개 이상이 존재 한다면 마지막 HEALTHCHECK만 적용됩니다.

    헬스체크의 결과는 docker ps와 docker inspect로 확인 할 수 있습니다.

      # --interval=DURATION (default: 30s)
      # --timeout=DURATION (default: 30s)
      # --start-period=DURATION (default: 0s)
      # --retries=N (default: 3)
    
      HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
  • USER : RUN, CMD, ENTRYPOINT 등의 명령을 수행할 유저를 지정합니다.

  • LABEL : 이미지에 메타데이터를 추가합니다.

      LABEL maintainer="hyuckang15@gmail.com"
  • MAINTAINER : 이미지 생성자 필드를 설정합니다. (이제 더 이상 사용하지 않음)

  • SHELL : 기본 쉘을 재정의 합니다.


반응형