OS/Docker

Docker File

MellowHoney 2024. 4. 1. 18:56
728x90
반응형

Dockerfile이란?

  • Docker Image를 만들기 위한 설정 파일(스크립트)
  • 배포판을 보완할 때 사용
  • Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며DockerImage를 생성

구조

$ vim Dockerfile

FROM ubuntu:14.04

# app 디렉토리 생성
RUN mkdir -p /app

#Docker 이미지 내부에서 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정합니다.
WORKDIR /app

# 현재 디렉터리에 있는 파일들을 이미지 내부 /app 디렉터리에 추가함
ADD . /app

RUN apt-get update && apt-get install apache2

RUN service apache2 start

VOLUME ["/data", "/var/log/httpd"]

# 하기 포트를 외부로 노출합니다.
EXPOSE 80

# 쉘을 사용하지 않고 컨테이너가 시작되었을 때 logbackup 스크립트를 실행
CMD ["/app/log.backup.sh"]

FROM

  • 기반이 되는 이미지 레이어
  • <이미지 이름>:<태그> 형식으로 작성
  • AS로 별칭 지정 가능
  • ex) ubuntu:14.04

<aside> 🔖 해당 정보는 https://hub.docker.com/search?image_filter=official&q= 에서 찾으면 된다.

</aside>

  • MAINTAINER
    • 이미지를 생성한 개발자 정보

RUN

  • 도커이미지가 생성되기 전에 수행할 쉘 명령어
    • RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시됨.
    • 따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
    • 위 처럼 RUN 명령 하나에 apt-get update와 install을 함께 실행 필수.

VOLUME

  • VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다.
  • 데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다.
  • ex) -v /root/data:/data

WORKDIR

  • CMD에서 설정한 실행 파일이 실행될 디렉터리, 없으면 새로 생성 (작업 디렉토리)
    • 작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작
    • cd+mkdir 명령어와 동일

EXPOSE

  • 호스트와 연결할 포트 번호
    • 호스트 머신과 컨테이너의 포트 매핑시에 사용
    • 컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야 함

CMD

  • 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트
  • 해당 명령어는 DockerFile내 1회만 가능
    • CMD
      • 컨테이너를 생성할 때만 실행됩니다. (docker run)
      • 컨테이너 생성 시, 추가적인 명령어에 따라 설정한 명령어를 수정 가능
    • ENTRYPOINT
      • 컨테이너를 시작할 때마다 실행됩니다. (docker start)
      • 컨테이너 시작 시, 추가적인 명령어 존재 여부와 상관 없이 무조건 실행
    • 명령어 형식
      • CMD ["<커맨드>", "<파라미터1>", "<파라미터2>"]
      • CMD <커맨드> <파라미터1> <파라미터2>
      • ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
      • ENTRYPOINT <커맨드> <파라미터1> <파라미터2>

COPY

  • 파일 복사

작성 된 Docker File로 Image 만들기

  • $ docker build -t [만들고싶은 이미지 이름]
    • Docker File 경로에서 입력
반응형