Provisioning, Python

Jeonghak Cho·2025년 3월 1일

Provisioning

목록 보기
1/44

파이썬 실행 환경 프로비저닝

소개

프로비저닝(provisioning)은 IT 인프라에서 필요한 자원(서버, 네트워크, 스토리지, 소프트웨어 등)을 준비하고 배포하는 과정을 의미한다. 이는 물리적, 가상화, 클라우드 환경에서 모두 적용되며, 자동화 도구를 활용하여 효율성을 극대화할 수 있다.

프로비저닝을 통해 다음의 장점을 기대한다.

  • 일관성 유지: 수동 설정의 오류를 방지하고 표준화된 환경 제공
  • 운영 효율성 향상: 반복 작업을 자동화하여 운영 부담 감소
  • 빠른 배포 가능: 신속한 자원 할당 및 확장 가능
  • 재현성 보장: 동일한 환경을 여러 번 배포 가능

할일

파이썬을 이용한 프로비저닝은 강력한 유연성과 확장성을 제공한다. 특히, 프로그래밍이 필요한 동적 환경에서 효과적으로 활용될 수 있다. 파이썬 언어를 사용할 수 있는 가장 간단한 형태의 컨테이너를 빠르게 생성하여 서버, 네트워크, 스토리지 등의 물리적/가상 인프라 상태를 확인하는 용도로 활용하려 한다.

base 이미지를 apline으로 하고 필요한 유틸리티를 준비한다.

  • 가장 가벼운 이미지 형태로 python3 테스트 환경 구축
  • 필수 유틸리티 (curl, vi) 기본 설치
  • 네트워크 확인 도구 설치
  • 사용자를 root로 하여 작업 제약 제거

절차

  • 파이썬 소스 (app.py) 작성
  • 의존 라이브러리 목록 파일 생성
  • 도커파일 생성
  • 도커 빌드
  • 도커 단위 테스트

진행

파이썬 소스 (app.py) 작성

작업 폴더를 하나 생성하고 이동한다. app.py 파일을 생성하고 가장 간단한 소스를 작성한다.

mkdir python
cd python
vi app.py

app.py

print("Hello!")

의존 라이브러리 목록 파일 생성

패키지 관리자 PIP 이 참조할 라이브러리 목록 관리를 위한 파일 requirements.txt 을 생성한다. 라이브러리 테스트를 위해 소스에서 참조하지 않더라도 하나를 추가했다.

requirements.txt

requests

도커파일 생성

Dockerfile-python

FROM python:3.11-alpine

RUN apk update && \
    apk add --no-cache curl vim bash lsof

WORKDIR /app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

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

도커 빌드

docker build . -t mypython -f Dockerfile-python

vagrant@slave1:~/python$ sudo docker build . -t mypython -f Dockerfile-python
[+] Building 10.0s (11/11) FINISHED                                                                             docker:default
 => [internal] load build definition from Dockerfile-python                                                               0.1s
 => => transferring dockerfile: 231B                                                                                      0.0s
 => [internal] load metadata for docker.io/library/python:3.11-alpine                                                     1.7s
 => [auth] library/python:pull token for registry-1.docker.io                                                             0.0s
 => [internal] load .dockerignore                                                                                         0.0s
 => => transferring context: 2B                                                                                           0.0s
 => CACHED [1/5] FROM docker.io/library/python:3.11-alpine@sha256:d5e2fc72296647869f5eeb09e7741088a1841195059de842b05b94  0.0s
 => [internal] load build context                                                                                         0.1s
 => => transferring context: 336B                                                                                         0.0s
 => [2/5] RUN apk update &&     apk add --no-cache curl vim bash                                                          2.9s
 => [3/5] WORKDIR /app                                                                                                    0.1s
 => [4/5] COPY . .                                                                                                        0.1s
 => [5/5] RUN pip install --no-cache-dir -r requirements.txt                                                              4.6s
 => exporting to image                                                                                                    0.4s
 => => exporting layers                                                                                                   0.3s
 => => writing image sha256:fbab7e2a474ee37cfe1d74574d4e435d1f599a62248f94196178c2f1e3e88bbc                              0.0s
 => => naming to docker.io/library/mypython                                                                               0.0s

도커 단위 테스트

이미지 확인

root@slave1:~# docker images
REPOSITORY             TAG       IMAGE ID       CREATED         SIZE
mypython               latest    11bb197f9fb1   4 minutes ago   106MB

이미지 구동

root@slave1:~# docker run mypython
Hello!

생성한 이미지 실행을 통해 파이썬 실행 환경 접속

root@slave1:~# docker run -it mypython python
Python 3.11.11 (main, Feb 14 2025, 19:27:54) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

컨테이너 실행을 통한 파이썬 실행

root@slave1:~# docker run -dit --name mypython mypython bash
0aa5558b4e305d1ad2aa3808090831428cc9d8c6012fb417fd957568fe683fe0
root@slave1:~# docker exec -it mypython bash

0aa5558b4e30:/app# python --version
Python 3.11.11

지속 가능한 컨테이너 생성

파이썬 실행 후 바로 종료되지 않고 지속되는 컨테이너 생성을 하려면 다음처럼 이미지를 재 구성해야 한다.

FROM python:3.11-alpine

RUN apk update && \
    apk add --no-cache curl vim bash lsof

WORKDIR /app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["tail", "-f", "/dev/null"]
vagrant@slave1:~/python$ sudo docker build . -t mypython-bash -f Dockerfile-python-bash

vagrant@slave1:~/python$ sudo docker run -dit --name mypython-bash mypython-bash
22e9b6e2007c5ed5b6151763c71e685ba246c0269138e4f9cee547145dff84ec

vagrant@slave1:~/python$ sudo docker exec -it mypython-bash bash
22e9b6e2007c:/app# python -V
Python 3.11.11

0개의 댓글