정구리의 우주정복

[Docker] 7. attach 와 detach 모드, docker 에서 입력받기 위한 interactive mode 본문

STUDY/DOCKER

[Docker] 7. attach 와 detach 모드, docker 에서 입력받기 위한 interactive mode

Jungry_ 2023. 10. 22. 20:27
반응형

docker 에는 attach 모드랑 detech 모드가 있다고 한다 ! 이게 무엇인가 알아봐야지 ~

 

Attach Mode


이렇게 실행하면 attach mode 로 실행이된다 (default 가 attach 인듯)

attach 모드로 실행하면 다른 커멘드를 입력할 수가 없고, 해당 컨테이너의 변경 내용 ex) console.log() 에 대한 결과값 보기 등등

컨테이너와 연결된 친구들을 확인할 수 있다. 

 

hello world 를 입력했을때 콘솔에도 나타나는 것을 확인할 수 있다 ! 

하지만 docker ps 라던지 다른 명령어들을 사용할 수는 없다 ! 해당 컨테이너를 멈추려면 또 터미널 띄워서 docker stop 어쩌고저쩌고 해서 멈춰줘야함 

docker stop e74c1879a61c

멈춰주고 이번엔 detech 모드를 사용해보자

 

Detach Mode


docker run -p 3000:80 -d 119db6e

어렵지 않다 -d 를 추가해주면 바로 되지롱 ~

 

detach 모드를 사용하면 

하나의 터미널에서 다른 작업들도 할 수 있다 docker ps 라던지 ..!

하지만 attach 처럼 console.log() 라던지 컨테이너와 연결된 정보들을 바로 확인할 수는 없다 ㅜㅜ

 

detach 로 실행된 컨테이너를 다시 attach 로 바꾸려면

 

현재 실행중인 컨테이너 아이디를 확인하고 

 

docker attach <컨테이너명>

으로 해주면 바로 변경되는 것을 볼 수 있다

 

 

이번엔 detach 로 된 녀석의 로그를 확인하는 방법을 알아보자

docker logs <컨테이너명>

 

이렇게 해주면 이전의 로그들을 확인할 수 있다

 

docker logs -f <컨테이너명> 

이거 쓰면 실시간으로 생성되는 로그를 확인할 수 있다 (attach mode 처럼 사용이 가능 )

 

Interactive Mode


해당 python 코드는 웹 서버가 필요없는 녀석이다

하지만 int(input()) 이 있어서 입력을 받을 필요가 있는 녀석이다 !!!

이런 경우에는 어떻게 해야할까 ? 우선 기존처럼 실행을 해볼까 ?

 

바로 에러나버리기 ~~~ 왜냐면 input 을 받아야하는데 

docker run 을 해버리면 기본이 attach 로 실행되기 때문에 input 을 받을 수가 없다 ㅜㅜ 정말 슬픈일이덩

 

docker run --help

도움을 요청해보자 

interactive 모드가 있다 ! 

attach 가 아니여도 표준 입력 (STDIN) 을 활성화 해준다고 한다

 

그리고 이 명령어와 같이 사용하는 친구가 있는데

 

-t 이다 tty 를 활성화 해서 bash 옵션을 사용할 수 있게 된다 ! 

 

jungry@jungry-MacBook-Pro python-app-starting-setup % docker run -it a9f
Please enter the min number: 0
Please enter the max number: 10
6

이렇게 쓰면 짜자잔 입력을 받을 수 있다 

 

이번에는 해당 컨테이너를 멈췄다가 다시 시작해보자 

jungry@jungry-MacBook-Pro python-app-starting-setup % docker ps -a 
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                        PORTS     NAMES
eb54c53be861   a9f       "python rng.py"          26 seconds ago      Exited (0) 17 seconds ago               ecstatic_satoshi
d213e972eee5   a9f       "python rng.py"          5 minutes ago       Exited (1) 5 minutes ago                sad_morse
7f0da945c997   119db6e   "docker-entrypoint.s…"   52 minutes ago      Exited (137) 7 minutes ago              vibrant_blackburn
e74c1879a61c   119db6e   "docker-entrypoint.s…"   55 minutes ago      Exited (137) 53 minutes ago             charming_gates
4600c8b1e744   119db6e   "docker-entrypoint.s…"   About an hour ago   Exited (137) 57 minutes ago             quirky_dubinsky
jungry@jungry-MacBook-Pro python-app-starting-setup % docker start eb5

docker start 는 default 가 detach 여서 뭔가 입력을 할 수는 있지만 우리가 원하는 입력창이 나오지는 않는다 !!

우리가 원하게끔 하려면 

-a 로 attach 로 바꿔주고 -i 로 Interactive를 해야한다 !! -t 는 docker run 으로 실행할 때 -t 를 사용했었기 때문에 또 하지 않아도 된다고 한다 

 

jungry@jungry-MacBook-Pro python-app-starting-setup % docker stop eb5
eb5
jungry@jungry-MacBook-Pro python-app-starting-setup % docker start -a -i eb5
Please enter the min number: 1
Please enter the max number: 20
12

다시 멈췄다가 시작해보면 정상적으로 잘 동작하는 것을 확인할 수 있다 :^)

반응형
Comments