Docker file

-         이미지 생성시 필요한 작업을 스크립트로 만들기

 

·         Version : Docker

 

컨테이너를 생성하는 방법은 베이스 이미지를 이용하여 위에 다양한 애플리케이션을 설치하는 방법, 또는 이미 모든 환경이 구성된 컨테이너를 이미지로 만드는 방법 다양하다.

·         Docker Image생성 : http://sqlmvp.kr/221461385385

·         Docker Image 추출 : http://sqlmvp.kr/221463568253

 

이번 포스트에서는  Dockerfile 이용해서 이미지를 생성하는 방법에 대해서 알아본다. Dockerfile 이미지를 생성하기 위해 컨테이너에 설치해야하는 패키지, 추가해야하는 소스코드, 실행시 필요한 명령어, 스크립트 등을 하나의 파일로 생성한 것이다. Build명령을 실행하면 Dockerfile 읽어 이미지를 생성한다. Dockerfile 사용하면 직접 컨테이너를 생성, 커밋, 배포하는 번거로움을 있으며 배포 자동화에 용이하다.

 

도커 엔진에서는 Dockerfile 읽어들일때 기본적으로 현재 디렉터리에 있는 Dockerfile이라는 이름을 가진 파일을 선택한다. 아래 스크립트는 Dockerfile 예시이며 명령의 기능에 대해서 살펴본다.

 


# Use an official Python runtime as a parent image

FROM python:2.7-slim

 

LABEL "purpose"="practice"

 

# Set the working directory to /app

WORKDIR /app

 

# Copy the current directory contents into the container at /app

COPY . /app

 

# Install any needed packages specified in requirements.txt

RUN pip install --trusted-host pypi.python.org -r requirements.txt

 

# Make port 80 available to the world outside this container

EXPOSE 80

 

# Define environment variable

ENV NAME World

 

# Run app.py when the container launches

CMD ["python", "app.py"]

 

Dockerfile 명령은 위에서 아래로 차례대로 실행한다.

·         FROM : 생성할 이미지의 베이스 이미지를 입력한다. 이미지가 로컬에 없다면 자동으로 도커허브에서 pull 한다.

·         LABEL : “:형태로 이미지에 메타데이터 추가. 추가된 메타 데이터는 docker inspect 명령어로 확인가능.

·         WORKDIR : 명령어를 실행할 디렉터리를 나타냄. Bash에서 cd 명령과 동일한 기능이다.

·         COPY : 로컬 디렉터리의 파일을 이미지에 복사하는 역할. ADD 다른 점은 COPY 로컬 디렉터리만 가능하고 ADD 외부 URL tar 파일도 추가 가능하다.

·         RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행.

·         EXPOSE : Dockerfile 빌드로 생성된 이미지에서 노출할 포트를 설정

·         CMD : 컨테이너가 시작될 때마다 실행할 명령어(커맨드) 설정, Dockerfile에서 한번만 사용할 있다.

 

위의 예제를 정리해보면 아래와 같다.

Python:2.7-slim 베이스 이미지를 사용하며 생성될 이미지의 라벨은 “purpose=practice” 설정한다. 작업디렉터리를 /app 변경한다음 로컬의 ./app 디렉터리의 내용을 이미지로 복사한다. 그리고 pip inatall명령을 컨테이너 내부에서 실행하고 컨테이너는 80 포트를 사용한다. 마지막으로 python 명령으로 app.py 실행한다.

 

Dockerfile 다양한 명령어를 지원하며 자세한 내용은 아래 링크를 참고 한다.

·         Dockerfile reference : https://docs.docker.com/engine/reference/builder/

 

 

 

 

2019-02-13 / Sungwook Kang / http://sqlmvp.kr

 

Docker,  dockerfile, docker build, 도커 파일, 도커 이미지 생성, dockerfile reference

+ Recent posts