Dockerfile

  • 도커 이미지를 만들기 위한 설정 파일
  • 도커 이미지 = 시작시 실행될 명령어 + 파일 스냅샷
  • 파일명 : Dockerfile –> 파일명을 다르게 할 경우 build시 -f 옵션으로 명시해줘야함 ex) $ docker build -f {파일명} .

  • 순서
    1. base image 명시 (파일 스냅샷)
    2. 추가적으로 필요한 파일을 다운 받기 위한 명령어 추가 (파일 스냅샷)
    3. 컨테이너 시작시 실행 될 명령어 명시 (시작시 실행 될 명령어)
    # 베이스 이미지 명시
    FROM ubuntu:16.04
    
    # 추가적으로 필요한 파일 다운로드
    RUN apt-get -y install ruby
    RUN gem install bundler
    
    # 컨테이너 시작시 실행될 명령어 명시
    CMD bundle exec ruby app.rb -o 0.0.0.0
    
  • 빌드
    $ docker build -t europani/test-app:1 .
    

명령어

1. FROM : 베이스 이미지 명시

  • FROM {이미지}:{태그}

2. WORKDIR : 작업할 디렉토리 설정

  • 이 명령어를 입력한 다음 줄부터는 해당 디렉토리에서 실행

3-1. COPY : 호스트OS의 파일을 컨테이너로 복사

  • 단순히 호스트OS의 파일을 컨테이너로 복사시킬 때만 사용한다
  • COPY {복사할 파일,디렉토리 경로} {컨테이너 내 복사될 경로}
    COPY . .
    

3-2. ADD : COPY 명령어 기능 + 원격 파일 다운로드 및 압축 해제 추가

  • COPY 명령어 기능에 추가적으로 원격 파일 다운로드 + 압축 해제 기능이 추가되었다
  • (1) 원격 파일 다운로드 : remote-URL 사용 가능
  • (2) 압축 해제 : tar, tar.gz 일 경우 해당 파일을 압축 해제 후 복사
# 복사 커맨드는 COPY와 동일
ADD . .

# 원격파일 다운로드
ADD http://~~~~~~/index.php /root/add_url/index.php

# 압축 해제 후 복사
ADD rootfs.tar.xz /

4. RUN : 명령어 실행

  • RUN {커맨드}
  • RUN [“커맨드조각1”, “커맨드조각2”]

5. CMD : 컨테이너 시작시 실행될 명령어 명시

  • docker-compose.yml를 사용할 경우 이 명령어를 컴포즈파일에서 실시하도록 한다
  • CMD {커맨드}
  • CMD [“커맨드조각1”, “커맨드조각2”]

6. VOLUME : 볼륨 설정

  • 컨테이너에 연결할 외부 디렉토리 설정
  • 컨테이너 외부의 파일을 사용 하기 위해 설정함
  • 호스트->컨테이너로 파일을 복사하는 COPY와는 반대로 컨테이너->호스트 파일을 참조함

7-1. MAINTAINER : 관리자 정보 입력

  • Dockerfile 관리자의 정보를 제공해줌
  • MAINTAINER europani1212@gmail.com

7-2. LABEL : meta데이터 입력

  • 관리자 정보만 입력하는 MAINTAINER를 대체하여 다양한 메타데이터를 입력 가능
  • Key-Value 조합
    LABEL email="europani1212@gmail.com"
    LABEL name="europani"
    LABEL version="1.0"
    LABEL description="My First Image"
    

8. ENV : 환경변수 설정

  • ENV {key} {value} …
  • ENV {key}={value} …