[Docker] DockerFile의 개념과 작성법에 대해 알아보자. (도커 이미지 생성 방법)

DockerFile이란?

Dockerfile은 Docker Image를 생성하기 위한 스크립트(설정파일)이다.

여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage를 생성한다.

Dockerfile을 읽을 줄 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있다는 의미이기도 하다.

 

도커 파일은 레이어 개념으로 실행 되기때문에 레이어 순서대로 작성해주는게 좋다.


DockerFile 작성법

기본적으로 도커 파일의 파일명은 확장자 없이 Dockerfile 이다.

 

FROM

베이스 이미지를 지정.

생성할 이미지의 베이스가 될 이미지를 의미한다.

로컬에 해당 이미지가 없는 경우 Docker Hub에서 가져온다.

FROM ubuntu:18.04

 

LABEL

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

LABEL "purpose"="practice"

 

RUN

새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.  (한번의 RUN 명령어는 1개의 이미지를 생성)

RUN apt-get update
RUN apt-get install apache2 -y

별도의 옵션을 입력할 수 없기 때문에 -y 옵션을 사용하는 것을 권장한다.

 

WORKDIR

작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다.

작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다. (CD 명령어와 동일)

WORKDIR /home/app/

 

EXPOSE

Dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.

  • 호스트와 컨테이너의 포트 매핑시에 사용된다.
  • 컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야한다.
EXPOSE 80

 

ADD

로컬의 파일을 이미지에 추가한다.

ADD test.html /home/app/html // test.html이라는 파일을 이미지의 /home/app/html 에 추가

추가할 파일이 압축파일일 경우 자동으로 압축을 풀어서 추가한다.

 

COPY
COPY <복사할 파일 경로> <이미지에서 파일이 위치할 절대 경로>

COPY hello.java /home/app/hello.java

ADD 명령문은 COPY명령어와 다르게 일반 파일 뿐만 아니라 압축 파일이나 네트워크 상의 파일도 사용할 수 있다.

이렇게 특수한 파일을 다루는게 아니라면 COPY를 사용하는게 좋다.

 

CMD

컨테이너를 시작될 때마다 실행할 명령어.

Dokcerfile에서 한번만 사용할 수 있다.

CMD apachectl -DFOREGROUND

 

USER

이미지를 어떤 계정에서 실행 하는지 지정

  • 기본적으로 root에서 해준다.

 

ENV

이미지에서 사용할 환경 변수 값을 지정한다.

 


DockerFile 빌드 및 실행

 

dockerfile 빌드
docker build -t {이미지명:버전명} {작성한 도커파일 경로}
docker build -t testimg   . // 현재 위치( . )에 있는 testimg를 의미 (버전 생략 가능)

 

빌드한 이미지 실행
docker run -p {입력포트}:{컨테이너 포트} {컨테이너명}
docker run -p 8080 : 80  test-container