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
'SW Engineering > DevOps, SRE' 카테고리의 다른 글
Docker Compose-여러개의 컨테이너를 설정하고 생성하기 (0) | 2019.03.27 |
---|---|
Docker build-Dockerfile을 이용해서 이미지 생성하기 (0) | 2019.03.27 |
Docker Image 추출 (0) | 2019.03.27 |
Docker Image 생성 및 docker hub에 이미지 업로드 (0) | 2019.03.27 |
Docker Container 리소스 제한-CPU, Memory, Disk I/O 리소스 사용량 설정 (0) | 2019.03.27 |