han098 2023. 7. 12. 10:01
반응형

https://woochan-autobiography.tistory.com/488

 

Docker - 처음 Docker 접할때 오는 멘붕 몇가지

Docker는 Virtual machine이 아니다! 처음 docker를 실행할 때 다음과 같은 명령을 실행하면 우분투 서버가 실행된다고 생각했다. 즉, Virtual machine과 같이 컨테이너 내에 우분투 서버가 실행되는 줄 알았

woochan-autobiography.tistory.com

https://zionh.tistory.com/63

 

[Docker] container을 run, start 했을 때, 바로 꺼지는(Exitted) 이유

1. 배경 1) container를 run, start했을 때, 결과가 나오고 바로 Exitted되는 이유 도커의 이미지로 centos:7 배포판을 내려받고(pull) centos의 /bin/cal 의 캘린더를 실행시킨다고 해보자 centos:7 을 내려받고 apple

zionh.tistory.com

docker run -it를 붙이는 이유는? 

만약 run -it가 없으면 docker run ubunut /bin/bash라는 명령어가 실행되게 된다.

ubuntu 서버가 실행되는게 아닌 /bin/bash가 실행되는 것이다.

-> Docker 컨테이너는 명령을 실행하고 결과만 보여주는 것이다.

만약 docker run ubuntu "ls" 는 /bin/bash -c "ls"로 ls 만 보여주고 끝이나게 된다. 다시 시작을 해도 같은 결과는 나오지 않게된다. -> logs로 확인하면 ls 기록이 찍혀있는 것을 확인 할 수 있다

왜? start는 표준입출력이 화면과 키보드에 대해 열려있지 않기 때문이다. -> i를 써야하는 이

-it?

i :  표준입력,출력을 키보드와 화면을 통해서 가능하게
t : 텍스트 기반 터미널(tty)를 애뮬레이션해준다.

-d ?

-d는 백그라운드 프로세스로 실행하는 옵션이지만 여전히 exited 상태로 꺼져있게 된다.

그 이유는 docker 컨테이너 실행 = Host OS에서 프로세스를 실행 \

명령어가 계속 실행되는 것이 아니면 명령이 종료됨과 동시에 컨테이너가 종료가 된다.

-d -it는 백그라운드에서 i를 동작시키게 하는 명령어이다. 

attach vs exec

attach는 stdin, stdout, stderr 스트림들이 해당 컨테이너와 연결되는 명령어이다.

즉 표준 입출력을 연결시켜서 컨테이너 내부의 제어가 가능하게 해주는 기능이다.

run 할시 command가 /bin/bash가 아니면 attach로 들어갈 수 없다.

exec는 실행 되는 컨테이너에 새로움 명령을 하는 명령어이다.

결론 : exec는 내부에 들어가지 않고 명령을 내리는 것이고 attach는 실행중인 컨테이너에 들어가는 명령이다.

반응형