ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dockerfile & Docker-compose
    Data Engineer 2024. 2. 20. 14:12
    728x90

     

     

    Dockerfile

    • Docker에서 이미지를 생성하기 위한 용도로 작성하는 파일
    • 만들 이미지에 대한 정보를 기술해 둔 템플릿

     

    Docker build [option] [작성한 dockerfile 경로]

    위와 같이 명령어를 입력하면 작성한 도커파일의 내용을 기반으로 이미지 빌드 시작

     

    FROM <베이스 이미지>:<태그>

    베이스 이미지를 지정하는 것

     

    • 어느 정도 기본적인 구성 요소들이 갖추어진 상태의 이미지를 토대로 만드는 것
    • From 이미지, 태그 지정 시 registry에서 해당 이미지 pull

     

    RUN <command>

    Command를 실행하여 새 이미지에 포함시키는 역할

    • 컨테이너에 꼭 필요한 소프트웨어, 라이브러리를 포함시켜야 할 때
    • RUN 뒤에 소프트웨어/라이브러리 설치 명령어 , 파일/디렉토리 생성 명령어 작성

     

    CMD <command>

    컨테이너가 시작될 때 실행할 커맨드를 지정하는 지시어

    CMD도 명령어를 shell 형태 또는 exec 형태로 작성

     

    RUN : 이미지를 빌드할 때 실행

    CMD : 이미 만들어진 이미지로부터 도커 컨테이너를 시작할 때 실행

     

    한 도커파일 내 CMD가 여러 번 나올 경우 맨 마지막 줄의 CMD 명령만 유효

     

    ENTRYPOINT command param1 param2

    컨테이너 시작 시 실행될 command 지정

    Shell, exec 형태의 command 가능

     

    • 컨테이너 실행 시 param 값을 대체할 수 없음

     

    CMD는 ENTRYPOINT와 같이 쓰이면서 default 값을 갖는 param 역할을 하는 경우가 많음

    한 도커파일 내 ENTRYPOINT가 여러번 나올 경우 맨 마지막 줄의 명령만 유효

     

    LABEL <key>=<value>

    Key-value 형식으로 작성된 메타데이터를 이미지에 추가

    도커파일에 위와 같이 지정해두고 이미지를 생성한 뒤, 이미지 내에 있는 label 데이터를 확인할 떄

     

     

    ENV <key>=<value>

    환경변수 설정

    Key-value 형식으로 환경변수명과 그 값을 지정

     

    LABEL과 사용법이 같다

    LABEL은 메타데이터를 설정하는 것이고, ENV는 환경변수를 설정한다는 것!

     

    EXPOSE <포트> /<프로토콜>

    컨테이너가 실행될 때 컨테이너로 들어오는 트래픽을 특정 포트로 받아들일 수 있도록 지정하는 역할

    • 프로토콜을 따로 지정한지 않는 경우 기본적으로 TCP로 인식

     

    COPY [--chown=<user>:<group>] <src>... <dest>

    Host 내에 있는 파일 또는 디렉토리를 컨테이너의 파일시스템으로 복사

    —chown 옵션으로 파일과 디렉토리에 대한 소유 권한 지정 가능

     

    ADD [--chown=<user>:<group>] <src>... <dest>

    파일 또는 디렉토리를 컨테이너로 복사

    COPY와 거의 동일하나, ADD는 Host 내에 있는 파일 외에도 경로를 지정하여 remote. 파일/디렉토리를 복사해올 수 있는 점이 다르다

     

    USER <user>[:group]

    컨테이너 안에서 명령을 실행할 유저명, 유저그룹 설정

    • 컨테이너는 기본적으로 root로 실행 : 사용자계정 등으로 변경하기 위함
    • Dockerfile 내에서 USER가 선언되면 RUN, CMD, ENTRYPOINT, COPY 등에 적용

     

    WORKDIR /path/to/workdir

    작업 디렉토리 설정

    리눅스의 cd 명령어와 유사하나, 이동하려는 디렉토리가 존재하지 않을 경우 해당 디렉토리를 생성하여 이동

     

    VOLUME [“/data“]

    컨테이너 내의 특정 디렉토리를 컨테이너 외부 경로에 마운트 시켜주는 지시자 —> 영구 보관 가능

    컨테이너 내부 데이터는 보통 컨테이너 삭제 시 날아가 버린다.

    • 컨테이너가 삭제되어도 데이터가 보존될 수 있도록 컨테이너 내부 경로를 외부로 연결시켜주는 것이 마운트 작업
    • Volume 지시자는 컨테이너 내의 디렉토리만 지정하면 된다
    • /var/lib/docker/volumes/[volume명]의 경로에 기본적으로 마운트가 진행된다

     

    Docker-compose

    • 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리도구
    • 여러 개의 컨테이너를 하나의 서비스로 정리해 컨테이너 묶음으로 관리할 수 있다면 더 편리
    • 여러 개의 컨테이너 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작
    • 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로 이뤄짐

     

    728x90

    'Data Engineer' 카테고리의 다른 글

    App Update  (0) 2024.03.08
    프로메테우스  (0) 2024.03.03
    [Security] Microsoft Defender  (0) 2024.02.19
    CBD 방법론  (1) 2024.01.11
    Git add / commit / push 취소  (0) 2023.12.15
Designed by Tistory.