Dockerfile에서 Docker 인스턴스 실행

Isaac Tony 2022년8월23일
Dockerfile에서 Docker 인스턴스 실행

다양한 환경에서 소프트웨어 및 종속성을 관리할 때 Docker 컨테이너는 의심할 여지 없이 표준 단위가 되었습니다. 실제 애플리케이션으로 작업할 때 애플리케이션의 컨테이너 이미지를 빌드하기 전에 도커 파일을 생성해야 합니다.

Dockerfile은 Docker 이미지를 어셈블할 때 설정된 지침이 포함된 읽기 전용 텍스트 문서입니다. 반면 Docker 이미지는 Docker 컨테이너를 빌드하는 데 사용되는 지침, 애플리케이션 코드, 종속성, 도구 및 라이브러리의 집합입니다.

따라서 컨테이너는 Dockerfile에서 어셈블된 Docker 이미지의 실행 가능한 인스턴스입니다.

이 문서에서는 Dockerfile을 만들고 이 파일에서 docker 인스턴스를 실행하는 단계를 안내합니다.

Dockerfile에서 Docker 인스턴스를 실행하는 단계

Dockerfile에서 Docker 인스턴스를 실행하려면 아래 단계를 따라야 합니다.

도커파일 생성

Dockerfile을 생성하려면 해당 구성 요소를 이해해야 합니다. 가장 일반적인 명령은 다음과 같습니다.

  • FROM: 사용된 상위/기본 이미지의 레이어를 생성합니다.
  • WORKDIR: 작업 디렉토리를 설정할 수 있습니다.
  • COPY: 현재 디렉토리 내용을 컨테이너의 디렉토리에 복사할 수 있습니다.
  • PULL: Docker 저장소에서 파일을 추가합니다.
  • RUN: 이미지를 빌드하고 싶을 때 실행됩니다.
  • CMD: 컨테이너가 시작될 때 실행할 명령을 지정합니다.
  • ENV: 빌드 중에 사용되는 환경 변수를 정의합니다.
  • ENTRYPOINT: 컨테이너가 시작될 때 실행할 명령을 결정합니다.
  • MAINTAINER: 이미지 작성자를 지정합니다.

Dockerfile을 생성하려면 먼저 Dockerfile을 호스팅할 기본 디렉토리를 생성하는 것으로 시작합니다. 콘솔에 메시지를 출력하는 간단한 Flask 애플리케이션을 만들 것입니다.

mkdir my-app

이제 이 디렉토리로 이동하여 애플리케이션의 기본 파일을 app.py로 만듭니다. 이 파일에는 프로그램의 응용 프로그램 코드가 포함되어 있습니다.

from flask import Flask

app = Flask(__name__)


def hello():

    print("Hello, this is a simple Flask application")


hello()

이제 Dockerfile을 만들고 Docker 이미지를 만드는 데 필요한 명령으로 채울 수 있습니다.

touch Dockerfile

또한 이 애플리케이션을 실행하기 위해 설치하는 데 필요한 파일이 포함된 requirements.txt 파일을 만들었습니다. 요구 사항은 아래에 나와 있습니다.

click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3

Dockerfile을 편집하고 다음 명령을 추가하여 docker build 명령을 사용하여 도커 이미지를 생성합니다. 이 경우 Python이 기본 이미지입니다.

또한 작업 디렉터리를 설정하고 필요한 파일을 현재 디렉터리에서 Docker 컨테이너의 디렉터리로 복사했습니다.

#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]

도커 이미지 생성

docker build 명령을 사용하여 Docker 이미지 생성을 진행합니다. 그러나 이 명령은 동일한 디렉토리에서 실행해야 합니다.

통사론:

$ docker build [OPTIONS] PATH | URL | -

my-app 디렉토리 내에서 아래 명령을 실행합니다. -t 플래그를 사용하면 이미지 이름에 태그를 지정하고 Dockerfile이 이 명령을 실행하는 동일한 디렉토리에 있음을 나타낼 수 있습니다.

~/my-app$ docker build -t new_image .

출력:

[+] Building 184.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                       1.5s
 => => transferring dockerfile: 38B                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                          1.9s
 => => transferring context: 2B                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:latest                                                                          50.8s
 => [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                           30.4s
 => => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                            0.4s
 => => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB                                             0.0s
 => => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB                                             0.0s
 => => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB                                             0.0s
 => => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB                                            10.4s
 => => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3                                                 14.6s
 => [internal] load build context                                                                                                          1.1s
 => => transferring context: 195B                                                                                                          0.0s
 => [2/5] WORKDIR /var/www/                                                                                                                3.2s
 => [3/5] COPY ./app.py /var/www/app.py                                                                                                    1.9s
 => [4/5] COPY ./requirements.txt /var/www/requirements.txt                                                                                2.6s
 => [5/5] RUN pip install -r /var/www/requirements.txt                                                                                    82.3s
 => exporting to image                                                                                                                     8.1s
 => => exporting layers                                                                                                                    6.0s
 => => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114                                               0.2s
 => => naming to docker.io/library/new_image

이제 아래 docker images 명령을 사용하여 docker 이미지를 나열할 수 있습니다.

~/my-app$ docker images

출력:

REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
new_image            latest    5811f24b498a   2 minutes ago   929MB

Dockerfile에서 인스턴스 실행

이 도커 이미지에서 실행 가능한 인스턴스를 만들기 위해 docker run 명령을 사용하여 이전에 만든 이미지 위에 쓰기 가능한 레이어를 만듭니다.

통사론:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

마지막으로 이제 위의 명령을 사용하여 실행 가능한 인스턴스를 만들 수 있습니다.

~/my-app$ docker run -it new_image
Hello, Developer
작가: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn