[Docker] Dockerfile 작성법

조히고닝·2023년 4월 11일
0

nginx_custom_1 이미지 생성을 위한 레시피(Dockerfile) 생성
vim Dockerfile



# 베이스 이미지
FROM nginx

# 도커 컨테이너 내부의 디렉토리 이동
WORKDIR /usr/share/nginx/html

# 호스트 폴더(./) 의 내용을 /usr/share/nginx/html 폴더로 이동한다.
COPY ./ ./

# 하는 편이 좋다. 이 컨테이너는 80을 사용한다는 뜻
EXPOSE 80

커스텀 nginx 이미지를 만들어서 필요한 설정을 미리 해놓으면 다음에 여러번 꺼내어 쓰기가 좋다

  • FROM : 베이스 이미지
    - 어느 이미지에서 시작할건지를 의미한다.

  • MAINTAINER : 이미지를 생성한 개발자의 정보 (1.13.0 이후 사용 X)

  • LABEL : 이미지에 메타데이터를 추가 (key-value 형태)

  • RUN : 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.
    - RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시된다.
    - 따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
    - 위 처럼 RUN 명령 하나에 apt-get update와 install을 함께 실행 해주자.

  • WORKDIR : 작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다.
    작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.
    cd 명령어와 동일하다.

  • EXPOSE : Dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.
    - 호스트 머신과 컨테이너의 포트 매핑시에 사용된다.
    - 컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야한다.

  • USER : 이미지를 어떤 계정에서 실행 하는지 지정
    기본적으로 root에서 해준다.

  • COPY / ADD : build 명령 중간에 호스트의 파일 또는 폴더를 이미지에 가져오는 것
    - ADD 명령문은 좀 더 파워풀한 COPY 명령문이라고 생각할 수 있다.
    - ADD 명령문은 일반 파일 뿐만 아니라 압축 파일이나 네트워크 상의 파일도 사용할 수 있다.
    - 이렇게 특수한 파일을 다루는 게 아니라면 COPY 명령문을 사용하는 것이 권장된다.

  • ENV : 이미지에서 사용할 환경 변수 값을 지정한다.
    - path 등

  • CMD / ENTRYPOINT : 컨테이너를 생성 및 실행 할 때 실행할 명령어
    - 보통 컨테이너 내부에서 항상 돌아가야하는 서버를 띄울 때 사용한다.

    • CMD
      - 컨테이너를 생성할 때만 실행됩니다. (docker run)
      - 컨테이너 생성 시, 추가적인 명령어에 따라 설정한 명령어를 수정할 수 있습니다.
    • ENTRYPOINT
      - 컨테이너를 시작할 때마다 실행됩니다. (docker start)
      - 컨테이너 시작 시, 추가적인 명령어 존재 여부와 상관 없이 무조건 실행됩니다.
  • 명령어 형식
    CMD ["<커맨드>", "<파라미터1>", "<파라미터2>"]
    CMD <커맨드> <파라미터1> <파라미터2>
    ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
    ENTRYPOINT <커맨드> <파라미터1> <파라미터2>

참고
https://wooono.tistory.com/679

0개의 댓글