Back-end/Docker

도커 attach 와 exec 차이점

개발자 키우기 2023. 6. 22. 18:42

0. 들어가면서

 

attach와 exec 둘 다 실행 중인 컨테이너에 접근하기 위하여 사용하는 명령어이다.

 

하지만 실행할 컨테이너가 계속돌아가는 프로세스 인지 아닌지에 따라 사용하는 실행 및 접근 명령어가 다르다.


 

1. attach 를 사용할 때 ( docker ps 명령어를 입력한 뒤 COMMAND가 /bin/bash 일 때 )

 

OS ( ubuntu )와 같이 계속 돌아가는 프로세스가 없다면 docker run -d ubuntu라는 명령어로 실행시켜도 바로 컨테이너가

 

바로 죽는다. 하지만 docker run -dit ubuntu bash 라는 명령으로 터미널할당+표준입력개방을 추가적으로 하고 실행할

 

셀을 지정하면 우분투 컨테이너 안에서 Bash 셸을 조작할 수 있는 상태가 된다.

 

이러한 과정으로 계속 돌아가는 프로세스가 없는 프로세스를 컨테이너로 동작하게 한 뒤에 attach를 사용하는 것이다.

 

docker attach ubuntu 를 입력하면 우분투 컨테이너 안에서 Bash 셸을 조작할 수 있다.  ( Ctrl + d 를 누르면 되돌아 옴 )

 

순서 : docker run -dit ubuntu bash => docker attach ubuntu


2. exec 를 사용할 때 ( docker ps 명령어를 입력한 뒤 COMMAND가 /bin/bash 가 아닐 때 )

 

계속 돌아가는 프로세스 ( httpd )는 docker run -d -p 8080:80 httpd라는 명령어로 실행시키고

 

docker exec -it httpd bash 라는 명령어로 httpd 컨테이너 안에서 Bash 셸을 조작 할 수 있다.  

 

순서 : docker run -d -p 8080:80 httpd => docker exec -it httpd bash


3. 팁

 

실행시킬 컨테이너가 계속 돌아가는 프로세스든 아니든 docker run -dit를 붙여도 상관이 없기 때문에

 

많은 현직자들이 편하게 -dit를 붙여서 사용한다고 합니다. 

 

하지만 왜 사용하는지는 알아야 됩니다.

 

예시) docker run -d -p 8080:80 httpd = docker run -dit -p 8080:80 httpd

 

 

 - 출처 메타코딩 최주호