도커 attach 와 exec 차이점
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
- 출처 메타코딩 최주호