SW Engineering/DevOps, SRE

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

SungWookKang 2019. 3. 27. 07:26
반응형

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

반응형