Docker Interectave mode

namkun·2022년 5월 2일
0

Docker & Kubernetes

목록 보기
6/16


다음과 같이 간단한 python 파일을 짜보았다.

rng.py

from random import randint

min_number = int(input('최소값을 입력해주세요 : '))
max_number = int(input('최대값을 입력해주세요 : '))

if (max_number < min_number): 
  print('잘못된 번호입니다...종료합니다...')
else:
  rnd_number = randint(min_number, max_number)
  print(rnd_number)

자 이걸 실행하기 위해서 다음과 같이 Dockerfile을 작성하고,

FROM python

WORKDIR /app

COPY rng.py /app

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

이미지를 빌드하고..

$ docker build .
[+] Building 55.1s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                                                      0.1s
 => => transferring dockerfile: 119B                                                                                      0.1s 
 => [internal] load .dockerignore                                                                                         0.1s 
 => => transferring context: 2B                                                                                           0.0s 
 => [internal] load metadata for docker.io/library/python:latest                                                         42.1s
 => [1/3] FROM docker.io/library/python@sha256:edc8e6a550e4be7c340df18b252364554ea46a5ac14be4dcad711c285d25d1db          12.4s
 => => resolve docker.io/library/python@sha256:edc8e6a550e4be7c340df18b252364554ea46a5ac14be4dcad711c285d25d1db           0.0s 
 => => sha256:76f9e442fdf5c12efb5949407b0bb7ad28a413b8a5387a4243b1d43a14654060 2.22kB / 2.22kB                            0.0s 
 => => sha256:2b7ca628da40dc0cdfc6bf518b0f8cc0c5c3b83e89960e265e540cc7502ceee5 8.53kB / 8.53kB                            0.0s 
 => => sha256:fc3fb1727276d6552df691c61e5c4cee8d978c088298d645492a175fe34b5ccf 233B / 233B                                0.4s
 => => sha256:edc8e6a550e4be7c340df18b252364554ea46a5ac14be4dcad711c285d25d1db 2.14kB / 2.14kB                            0.0s 
 => => sha256:1535e3c1181a81ea66d5bacb16564e4da2ba96304506598be39afe9c82b21c5c 6.29MB / 6.29MB                            6.4s 
 => => sha256:ca398dbb0a270570de44ac21ffb1854507bea6a66126fa3ad54c785174264511 19.74MB / 19.74MB                         10.9s 
 => => sha256:13ca01dc6e0ba30bd4e2b1c52924ead46d206f45e1d1da500a22a6c1697e9f4e 2.87MB / 2.87MB                            3.9s 
 => => extracting sha256:1535e3c1181a81ea66d5bacb16564e4da2ba96304506598be39afe9c82b21c5c                                 0.4s
 => => extracting sha256:ca398dbb0a270570de44ac21ffb1854507bea6a66126fa3ad54c785174264511                                 0.8s
 => => extracting sha256:fc3fb1727276d6552df691c61e5c4cee8d978c088298d645492a175fe34b5ccf                                 0.0s
 => => extracting sha256:13ca01dc6e0ba30bd4e2b1c52924ead46d206f45e1d1da500a22a6c1697e9f4e                                 0.3s
 => [internal] load build context                                                                                         0.1s
 => => transferring context: 327B                                                                                         0.1s
 => [2/3] WORKDIR /app                                                                                                    0.2s
 => [3/3] COPY rng.py /app/                                                                                               0.1s
 => exporting to image                                                                                                    0.1s
 => => exporting layers                                                                                                   0.1s 
 => => writing image sha256:c586f6393f99e50beb42ce1bc2c167d33f49e6cbe6de7aa77360b49aef762dda                              0.0s

빌드된 이미지를 실행해보자.

$ docker run c586f6393f99
Please enter the min number: Traceback (most recent call last):
  File "/app/rng.py", line 3, in <module>
    min_number = int(input('Please enter the min number: '))
EOFError: EOF when reading a line

그러면 이제 위와 같이 값을 입력받을 수 없다는 에러가 발생한다.

이는 컨테이너가 실행될 때 입력받을 수 없는 상태이기에 발생하는 에러인데, 이럴때 사용하는 도커의 옵션이 있다.

-i, interactive 옵션과 -t, pseudo-TTY 옵션이다.

  • -i는 Interactive 모드로 컨테이너와 attach되어 있지 않더라도 입력할 수 있게 해주는 옵션이다.

  • -t는 text 기반의 터미널을 에뮬레이션 해주는 옵션이다. 해당 옵션을 설정하지 않으면 명령을 입력할 순 있어도 shell이 표시되지 않는다.

자, 그럼 해당 옵션을 사용해서 run 해보자.

$ docker run -it c586f6393f99
최소값을 입력해주세요 :  123
최대값을 입력해주세요 :  345
187

제대로 나오는 것을 확인할 수 있다.

자, docker 컨테이너를 실행하는 다른 방법으로는 start 명령어가 있다. 이럴때는 어떤 옵션을 써야 할까?

--help 명령어를 통해서 확인해보자.

$ docker start --help

Usage:  docker start [OPTIONS] CONTAINER [CONTAINER...]

Start one or more stopped containers

Options:
  -a, --attach               Attach STDOUT/STDERR and forward signals
      --detach-keys string   Override the key sequence for detaching a container
  -i, --interactive          Attach container's STDIN

기본적으로 detached 모드로 실행되는 start 명령어기에 -a, attached 모드로 실행하고 추가로 동일하게 -i 옵션을 줘서 interactive 모드로 들어갈 수 있게 하면 된다.

$ docker start -ai zen_bartik 
Please enter the min number: 1
Please enter the max number: 4
1

잘 나온다!

profile
개발하는 중국학과 사람

0개의 댓글