docker python을 이용한 인터렉티브 모드 이해

도커를 사용하여 간단한 Python 애플리케이션을 실행하는 방법과 인터렉티브 모드에 대해서 알아보겠습니다.


NodeJS 데모 애플리케이션을 통해 웹 서버와 요청 처리에 대한 이해를 바탕으로 Python 애플리케이션을 도커화하는 과정과 인터렉티브 모드에 대해서 알아보도록 하겠습니다.

도커화 과정

이전 과정을 통해서 간단한 node.js 웹 애플리케이션을 도커화하는 과정에 대해서 확인을 했으며 해당 과정을 못보시는 분들은 아래 링크를 통해서 확인을 해주시면 됩니다.

Python 애플리케이션 설명

파이썬 애플리케이션 코드
from random import randint

min_number = int(input('Please enter the min number: '))
max_number = int(input('Please enter the max number: '))

if (max_number < min_number): 
  print('Invalid input - shutting down...')
else:
  rnd_number = randint(min_number, max_number)
  print(rnd_number)

Python 애플리케이션은 사용자로부터 최소값과 최대값을 입력받아 랜덤 값을 생성하고 출력하는 기능을 가지고 있습니다. 웹 서버를 생성하지 않으며, 단순한 최소값 최대값을 입력받아 랜덤 값을 생성하는 애플리케이션입니다.

Dockerfile 작성

파이썬 도커파일 생성
  1. 베이스 이미지 선택 : 도커 허브에서 공식 Python 이미지를 검색하여 사용합니다,
  2. 작업 디렉토리 설정 : WORKDIR /app으로 설정합니다.
  3. 코드 파일 복사 : COPY . .를 사용하여 로컬 폴더의 모든 항목을 /app 폴더에 복사합니다.
  4. 실행 명령 추가 : CMD [“python”, “rng.py”]를 추가하여 컨테이너 시작 시 rng.py 파일을실행하도록 설정을 합니다.도커파일 생성 과정
FROM python

WORKDIR /app

COPY . /app

CMD ["python", "rng.py"]



도커화 과정에서의 도커파일

이제 Dockerfile을 작성한 후, docker build . 명령어를 사용하여 이미지를 빌드합니다. 이 과정에서 Python 베이스 이미지도 다운로드되므로 시간이 조금 더 걸릴 수 있습니다.

docker build .
docker build .

컨테이너 실행

이미지가 생성되면, docker run 명령어를 사용하여 컨테이너를 실행이 가능하며 이때 포트를 노출할 필요는 없습니다.

docker run으로 컨테이너를 실행을 하면 기본적으로 attached 모드에서 실행되므로 입력을 받을 수 없습니다.

Attached 모드 ( 컨테이너의 출력이 직접 터미널에 표시됨, 컨테이너의 표준 입력(stdin), 출력(stdout), 에러(stderr)가 터미널에 직접 연결, 터미널을 종료하면 컨테이너도 종료됨 )

docker run images

현재 파이썬 코드는 입력을 받아야 실행이 가능한 파이썬 애플리케이션이므로 기본적으로 docker run 명령어로 실행하게 되면 오류가 발생할 수 있습니다.

해당 문제를 해결하기 위해 -it 플래그를 추가하여 인터렉티브 모드로 실행합니다. docker run -it <image_id>

인터렉티브모드.

docker run -it 인터렉티브 모드로 실행을 하면 사용자 특정 값을 입력을 받을 수 있게 됩니다.

Detached 모드 ( 컨테이너가 백그라운드에서 실행됨, 터미널과 독립적으로 실행, 터미널을 종료해도 컨테이너는 계속 실행 )

최소값과 최대값을 입력하면 랜덤 숫자가 반환됩니다.

컨테이너 재시작

컨테이너가 종료된 후, docker start 명령어로 다시 시작할 수 있지만, 기본적으로 detached 모드로 실행되므로 입력을 받을 수 없습니다.

해당 문제를 해결하기 위해 docker start -ai <container_id> 명령어를 사용하여 attached 모드로 시작하면, 다시 입력을 받을 수 있습니다.

마무리..

도커가 웹 서버와 웹 애플리케이션에만 국한되지 않고, 간단한 유틸리티 애플리케이션을 도커화하는 데에도 활용될 수 있습니다.

도커는 다양한 프로세스와 상호작용할 수 있는 유연성을 제공하며, 필요에 따라 컨테이너와의 상호작용을 조정할 수 있습니다.

page1image26051808 page1image26052016 page1image26052224 page1image26052432 page1image26052640

By Low ahn

리눅스를 처음 접하시는 분들은 위한 다양한 리눅스 정보를 공유합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다