본문 바로가기
Docker/Docker 주요 명령어 익히기

[Docker 기본 명령어] 8. docker exec, attach, 컨테이너 일괄 종료 및 삭제 명령어 사용해보기

by Fletcher 2024. 8. 13.

 

반갑습니다!

이번 포스트에서는 실행중인 컨테이너에

명령 실행하는 내용부터 살펴보도록 하겠습니다 ^^

 

 

 

1. 실행중인 컨테이너에 명령 실행하기 : $ docker exec [옵션] [컨테이너ID 또는 이름] [명령인자]

 

 

명령어는

$ docker exec -it [컨테이너ID 또는 이름] /bin/bash 또는

$ docker exec -it [컨테이너ID 또는 이름] /bin/sh가 되겠습니다 ^^

 

alpine 태그가 붙은 것과 아닌 것의 차이는,

저번 포스트에서 말씀드렸다시피 경량화가 되었는가 아닌가의 차이입니다 ^^

따라서 사용하는 쉘 프로그램도 조금 다른데요

 

예시에서 사용하는 httpd 이미지는 디폴트 패키지로

ubuntu 패키지를 사용하는데, 기본적으로 bash라는 쉘 프로그램을 사용합니다 ^^!

하지만 alpine 태그가 달려있는 경우에는 BusyBox 유틸리티가 사용되는데,

BusyBox 유틸리티의 쉘 프로그램으로 sh 쉘입니다

 

때문에 일반 패키지 이미지에서는 bash 쉘 프로그램을 사용하고,

alpine에서는 sh 쉘 프로그램을 사용하므로

-it옵션을 사용하여

외부 호스트 PC에 있는 키보드를 내부에 있는 해당 프로그램의 표준 입력으로 연결 할 때

bash냐 sh냐를 구분해서 사용해야 하겠습니다 ^^

 

 

 

 

alpine 태그가 붙은 httpd 이미지에 대해서

/bin/bash 가 동작하는지 안 하는지 확인하기 위해서 준비한 이미지입니다 ^^

 

/bin/sh로 명령을 내렸을 때에는 정상적으로 동작을 하여서

해당 컨테이너에서 실행중인 프로그램에 대해서 쉘이 동작을 하였는데요

 

/bin/bash 명령에 대해서는

exec failed라는 메세지가 출력된 것을 확인할 수 있겠습니다 ^^

 

 

 

 

-it 옵션과 /bin/sh를 이용하여 컨테이너 내부 프로그램에 대해 쉘이 연결되었으니

여러 명령어를 통해 내부 디렉토리 구조에 대해 간단하게 살펴본 부분입니다 ^^

httpd 이미지의 apache 프로그램과 관련된 기본 디렉토리들도 보입니다 ^^!

 

 

 

 

httpd.conf라는 파일은

apache 웹 서버의 기본 설정과 관련된 내용이 기재 되어있는 파일인데요

cat 명령어를 통해 살펴볼 수 있습니다 ^^

 

컨테이너를 실행한 다음 설정을 건드리거나 할 일은 별로 없지만,

내부적으로 어떤 설정들이 되어 있는지 한 번 조회해보고 참고해볼 때

해당 명령어를 사용해서 살펴보시면 되겠습니다 ^^

 

 

 

 

 

2. 실행중인 컨테이너에 연결하기 : $ docker attach [컨테이너ID 또는 이름]

 

저번 포스트에서 잠깐 소개해드렸던 명령어인데요

$docker attach 명령어를 이용하면 현재 실행중인 컨테이너에 연결할 수가 있습니다 ^^

예시를 위해서 ubuntu 이미지를 이용해 백그라운드로 실행한 다음,

해당 명령어를 이용해서 컨테이너에 연결해서 내부의 쉘 프로그램에 접속하였습니다 ^^!

 

exec와 attach 사이에 차이가 있습니다

exec 명령은 해당 컨테이너에 신규 명령을 실행하는 것이고,

attach는 컨테이너에 연결하는 명령입니다 ^^

 

 

 

컨테이너 내부에서 동작중인 프로그램에 대해서

$ ls 명령어를 통해 디렉토리 구조를 한 번 조회했습니다 ^^

 

 

 

쉘 연결에서 나오려면 $ exit 명령어를 실행시켜주시면

다시 메인 프롬프트로 돌아옵니다 ^^!

 

 

 

 

 

 

 

3. 모든 컨테이너 종료하기 : $ docker stop $(docker ps -a -q)

 

지난 포스트에서 $ docker ps -a -q 명령어를 소개해드렸었습니다

-q 옵션을 사용하면 해당 컨테이너들의 ID 값만 조회를 할 수 있다고 말씀드렸었는데요

위와 같이 조합하여서

우선 컨테이너들의 이름만 조회한 다음에,

해당 컨테이너들에 대해서 일괄적으로 stop 명령을 내릴 수 있습니다 ^^

 

stop 명령 뿐 아니라 pause, unpause, restart도 가능하고 rm도 가능합니다 ^^

 

 

 

 

4. 모든 컨테이너 삭제하기 : $ docker rm $(docker ps -a -q)

 

앞서 컨테이너들에 대해 일괄적으로 종료 명령을 내렸습니다

해서 STATUS가 Existed가 되었는데요

도커 컨테이너를 삭제하려면 우선은 stop 된 상태여야 합니다 ^^

이제 rm 명령을 통해서 모든 컨테이너들을 일괄적으로 삭제하였습니다 !

 

 

 

 

 

5. 모든 이미지 삭제하기 : $ docker rmi $(docker images -q)

 

그리고 이미지들도 한 번 모두 삭제해보겠습니다 ^^

이미지들을 삭제하는 명령어는 $ docker rmi [이미지ID 또는 이름]이었습니다!

해당 명령 실행 후 다시 $ docker images 또는 $ docker image ls를 실행해보면

아무런 이미지도 조회되지 않는 것을 확인할 수 있겠습니다 ^^!

 

 

 

 

그 외 명령어 세 개를 더 소개해드리자면,

 

$ docker container prune

정지된 모든 컨테이너 삭제

 

$ docker image prune

실행 중인 컨테이너의 image 외의 모든 이미지 삭제

 

$ docker system prune

정지된 컨테이너, 실행 중인 컨테이너의 이미지 외의

이미지, 볼륨, 네트워크 삭제

이 있습니다 ^^!

 

 

 

 

 

이렇게 도커 이미지와 컨테이너에 관련된 가장 기본적인

주요 명령어들에 대해서 살펴보았습니다 ^^

 

다음 포스트부터는 docker file 작성에 대해서 알아보도록 하겠습니다!

읽어주셔서 감사드리고 다음 포스트에서 찾아뵙겠습니다 ^^!