프로비저닝(provisioning)은 IT 인프라에서 필요한 자원(서버, 네트워크, 스토리지, 소프트웨어 등)을 준비하고 배포하는 과정을 의미한다. 이는 물리적, 가상화, 클라우드 환경에서 모두 적용되며, 자동화 도구를 활용하여 효율성을 극대화할 수 있다.
프로비저닝을 통해 다음의 장점을 기대한다.
파이썬을 이용한 프로비저닝은 강력한 유연성과 확장성을 제공한다. 특히, 프로그래밍이 필요한 동적 환경에서 효과적으로 활용될 수 있다. 파이썬 언어를 사용할 수 있는 가장 간단한 형태의 컨테이너를 빠르게 생성하여 서버, 네트워크, 스토리지 등의 물리적/가상 인프라 상태를 확인하는 용도로 활용하려 한다.
base 이미지를 apline으로 하고 필요한 유틸리티를 준비한다.
작업 폴더를 하나 생성하고 이동한다. 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