[Docker] 7. attach 와 detach 모드, docker 에서 입력받기 위한 interactive mode
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
다시 멈췄다가 시작해보면 정상적으로 잘 동작하는 것을 확인할 수 있다 :^)