Docker 컨테이너 attach 명령으로 실행 중인 컨테이너와 상호 작용하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker container attach 명령을 사용하여 실행 중인 컨테이너와 상호 작용하는 방법을 배우게 됩니다. detached 모드로 컨테이너를 시작하고, 컨테이너에 연결하여 출력을 관찰하며, 기본 키 시퀀스를 사용하여 분리하는 방법을 익힐 것입니다.

또한 TTY 가 활성화된 컨테이너에 연결하는 방법을 살펴보고, Docker 컨테이너와 상호 작용할 때 더 큰 유연성을 위해 기본 분리 키 시퀀스를 재정의하는 방법을 배우게 됩니다.

간단한 명령을 실행하는 detached 컨테이너 시작

이 단계에서는 detached 모드로 Docker 컨테이너를 시작하는 방법을 배우게 됩니다. 컨테이너가 detached 모드로 실행되면 백그라운드에서 실행되며, Docker CLI 는 컨테이너의 표준 입력, 출력 또는 오류 스트림에 연결되지 않습니다. 이는 장시간 실행되는 서비스 또는 애플리케이션을 실행하는 데 유용합니다.

ubuntu 이미지를 사용하여 메시지를 출력한 다음 종료하는 간단한 명령을 실행합니다. 먼저, ubuntu 이미지를 pull 하여 로컬에서 사용할 수 있도록 합니다.

docker pull ubuntu

이제 -d 플래그와 함께 docker run 명령을 사용하여 detached 모드로 컨테이너를 실행해 보겠습니다. "Hello from detached container!"를 출력한 다음 종료하는 간단한 echo 명령을 실행합니다.

docker run -d ubuntu echo "Hello from detached container!"

명령을 실행한 후 Docker 는 컨테이너 ID 를 출력합니다. 이는 컨테이너가 detached 모드로 시작되었음을 나타냅니다. docker ps -a 명령을 사용하여 컨테이너가 실행 중인지 (또는 작업을 완료했는지) 확인할 수 있습니다. 이 명령은 종료된 컨테이너를 포함한 모든 컨테이너를 표시합니다.

docker ps -a

방금 시작한 컨테이너에 대한 항목이 표시되어야 합니다. STATUS 열은 컨테이너가 아직 실행 중인지 또는 종료되었는지를 보여줍니다. 명령이 매우 짧기 때문에 docker ps -a를 실행할 때 컨테이너가 이미 종료되었을 가능성이 높습니다.

실행 중인 컨테이너에 연결하여 출력 관찰

이전 단계에서 detached 모드로 컨테이너를 시작했습니다. 컨테이너가 간단한 명령을 실행하고 빠르게 종료되었을 가능성이 있지만, 여전히 컨테이너에 연결하여 출력을 볼 수 있습니다. docker attach 명령을 사용하면 실행 중이거나 종료된 컨테이너의 표준 입력, 출력 및 오류 스트림에 연결할 수 있습니다.

먼저, 이전 단계에서 시작한 컨테이너의 ID 를 가져오겠습니다. docker ps -a 명령을 사용하여 echo 명령을 실행하는 컨테이너를 찾을 수 있습니다. 컨테이너 ID 를 복사합니다.

docker ps -a

이제 docker attach 명령 다음에 컨테이너 ID 를 사용하여 컨테이너에 연결합니다.

docker attach <container_id>

<container_id>를 실제 컨테이너 ID 로 바꿉니다. 컨테이너가 간단한 echo 명령을 실행하고 종료되었으므로, 즉시 출력이 표시되지 않거나, 출력이 아직 버퍼링된 경우 "Hello from detached container!" 출력이 표시될 수 있습니다. attach 명령은 컨테이너의 스트림에 연결합니다. 컨테이너가 이미 작업을 완료했기 때문에 attach 명령은 연결 직후에 종료될 가능성이 높습니다.

계속 실행되는 컨테이너에 연결하는 것을 보여주기 위해, 몇 초 동안 컨테이너를 유지하는 명령을 실행하는 새로운 detached 컨테이너를 시작해 보겠습니다. 다시 ubuntu 이미지를 사용하고 sleep 10을 실행합니다.

docker run -d ubuntu sleep 10

docker ps를 사용하여 이 새로운 컨테이너의 ID 를 가져옵니다. 이번에는 컨테이너가 Up 상태여야 합니다.

docker ps

이제 해당 ID 를 사용하여 이 실행 중인 컨테이너에 연결합니다.

docker attach <new_container_id>

<new_container_id>sleep 10을 실행하는 컨테이너의 ID 로 바꿉니다. 컨테이너의 표준 스트림에 연결됩니다. sleep 명령은 출력을 생성하지 않으므로 아무것도 보이지 않습니다. 터미널은 대기 중인 것처럼 보입니다. 컨테이너는 10 초 동안 실행된 다음 종료됩니다. 컨테이너가 종료되면 attach 명령도 종료되어 터미널 프롬프트로 돌아갑니다.

기본 키 시퀀스를 사용하여 컨테이너에서 분리

이전 단계에서 실행 중인 컨테이너에 연결했습니다. 컨테이너에 연결되면 표준 입력, 출력 및 오류 스트림에 연결됩니다. 컨테이너를 중지하지 않고 컨테이너에서 분리하려면 특수 키 시퀀스를 사용할 수 있습니다. 기본적으로 이 시퀀스는 CTRL+p 다음에 CTRL+q입니다.

분리 연습을 할 수 있도록 더 오랜 기간 실행될 새로운 detached 컨테이너를 시작해 보겠습니다. ubuntu 이미지를 사용하고 sleep 60을 실행합니다.

docker run -d ubuntu sleep 60

docker ps를 사용하여 이 새로운 컨테이너의 ID 를 가져옵니다.

docker ps

이제 해당 ID 를 사용하여 이 실행 중인 컨테이너에 연결합니다.

docker attach <container_id>

<container_id>sleep 60을 실행하는 컨테이너의 ID 로 바꿉니다. 이제 컨테이너에 연결되었습니다. 컨테이너를 중지하지 않고 컨테이너에서 분리하여 터미널 프롬프트로 돌아가려면 다음 키 시퀀스를 누르십시오.

  1. CTRL 키를 누른 상태에서 p 키를 누릅니다. 두 키를 모두 놓습니다.
  2. CTRL 키를 누른 상태에서 q 키를 누릅니다. 두 키를 모두 놓습니다.

CTRL+p 다음에 CTRL+q를 누르면 터미널 프롬프트로 돌아갑니다. 컨테이너는 백그라운드에서 계속 실행됩니다. docker ps를 사용하여 컨테이너가 여전히 실행 중인지 확인할 수 있습니다.

docker ps

sleep 60을 실행하는 컨테이너가 Up 상태로 나열되어야 합니다.

TTY 가 활성화된 다른 컨테이너를 분리된 상태로 시작

이 단계에서는 다른 detached 컨테이너를 시작하지만, 이번에는 컨테이너에 pseudo-TTY (Terminal) 를 활성화합니다. TTY 를 활성화하는 것은 컨테이너의 셸과 상호 작용하거나 터미널을 필요로 하는 명령을 실행하려는 경우에 종종 필요합니다.

detached 모드를 위한 -d 플래그와 pseudo-TTY 를 할당하기 위한 -t 플래그를 사용하여 docker run 명령을 사용합니다. sleep 60과 같이 컨테이너를 계속 실행하는 간단한 명령을 실행합니다.

docker run -d -t ubuntu sleep 60

-t 플래그는 pseudo-TTY 를 할당합니다. 이는 마치 실제 터미널에 연결된 것처럼 컨테이너와 상호 작용할 수 있게 해주는 가상 터미널입니다. 컨테이너가 detached 모드 (-d) 로 실행 중이더라도, TTY 를 활성화하는 것은 대화형 프로세스에 중요하거나 나중에 컨테이너에 연결하여 터미널 환경이 필요한 경우에 중요합니다.

명령을 실행한 후 Docker 는 다시 컨테이너 ID 를 출력하여 TTY 와 함께 detached 모드로 컨테이너가 시작되었음을 나타냅니다. docker ps를 사용하여 컨테이너가 실행 중인지 확인할 수 있습니다.

docker ps

새 컨테이너가 Up 상태로 나열되어야 합니다. 다음 단계에서 이 컨테이너에 연결해야 하므로 컨테이너 ID 를 기록해 두십시오.

TTY 활성화 컨테이너에 연결 후 기본 키 시퀀스로 분리

이전 단계에서 TTY 가 활성화된 detached 컨테이너를 시작했습니다. 이제 이 컨테이너에 연결하고 기본 키 시퀀스 (CTRL+p 다음에 CTRL+q) 를 사용하여 분리하는 연습을 합니다. TTY 가 있는 컨테이너에 연결하면 초기 명령이 필요하지 않더라도 대화형 세션을 사용할 수 있습니다.

먼저, TTY 가 활성화된 상태로 sleep 60을 실행하는 이전 단계에서 시작한 컨테이너의 ID 를 가져옵니다.

docker ps

sleep 60을 실행하는 ubuntu 컨테이너의 컨테이너 ID 를 찾습니다.

이제 docker attach 명령과 컨테이너 ID 를 사용하여 이 컨테이너에 연결합니다.

docker attach <container_id>

<container_id>를 실제 컨테이너 ID 로 바꿉니다. 이제 컨테이너의 표준 스트림에 연결되었으며, TTY 가 활성화되어 있으므로 터미널과 유사한 인터페이스를 갖게 됩니다. sleep 명령은 상호 작용을 필요로 하지 않지만, 컨테이너의 가상 터미널에 연결되어 있습니다.

컨테이너를 중지하지 않고 컨테이너에서 분리하려면 기본 분리 키 시퀀스를 사용하십시오.

  1. CTRL 키를 누른 상태에서 p 키를 누릅니다. 두 키를 모두 놓습니다.
  2. CTRL 키를 누른 상태에서 q 키를 누릅니다. 두 키를 모두 놓습니다.

터미널 프롬프트로 돌아가야 합니다. sleep 60 명령이 완료될 때까지 컨테이너는 백그라운드에서 계속 실행됩니다. docker ps를 사용하여 컨테이너가 여전히 실행 중인지 확인할 수 있습니다.

docker ps

sleep 60을 실행하는 컨테이너가 Up 상태로 나열되어야 합니다.

컨테이너에 연결하고 분리 키 시퀀스 재정의

이 마지막 단계에서는 컨테이너에 연결할 때 기본 분리 키 시퀀스를 재정의하는 방법을 배웁니다. 이는 기본 시퀀스가 다른 애플리케이션과 충돌하거나 다른 키 조합을 선호하는 경우 유용할 수 있습니다.

--detach-keys 플래그를 사용하여 다른 키 시퀀스를 지정하는 docker attach 명령을 사용합니다. --detach-keys 플래그의 형식은 sequence이며, 여기서 sequence는 쉼표로 구분된 키 조합 문자열입니다. 예를 들어, ctrl-a,ctrl-d는 분리 시퀀스를 CTRL+a 다음에 CTRL+d로 설정합니다.

먼저, 잠시 동안 실행될 TTY 가 활성화된 새로운 detached 컨테이너를 시작해 보겠습니다.

docker run -d -t ubuntu sleep 60

docker ps를 사용하여 이 새 컨테이너의 ID 를 가져옵니다.

docker ps

이제 이 컨테이너에 연결하지만, 이번에는 --detach-keys 플래그를 사용하여 다른 분리 키 시퀀스를 지정합니다. 새로운 시퀀스로 ctrl-a,d를 사용해 보겠습니다. 즉, 분리하려면 CTRL+a를 누른 다음 d를 누릅니다.

docker attach --detach-keys="ctrl-a,d" <container_id>

<container_id>를 실제 컨테이너 ID 로 바꿉니다. 이제 컨테이너에 연결되었습니다. 새 시퀀스를 사용하여 분리하려면 다음을 수행합니다.

  1. CTRL 키를 누른 상태에서 a 키를 누릅니다. 두 키를 모두 놓습니다.
  2. d 키를 누릅니다.

터미널 프롬프트로 돌아가야 합니다. 컨테이너는 백그라운드에서 계속 실행됩니다. docker ps를 사용하여 컨테이너가 여전히 실행 중인지 확인할 수 있습니다.

docker ps

sleep 60을 실행하는 컨테이너가 Up 상태로 나열되어야 합니다.

요약

이 랩에서는 docker run -d 명령을 사용하여 detached 모드에서 Docker 컨테이너를 시작하는 방법을 배웠습니다. 이를 통해 터미널에 연결하지 않고 컨테이너를 백그라운드에서 실행할 수 있습니다. 그런 다음, 실행 중이거나 종료된 컨테이너의 표준 스트림에 연결하여 출력을 관찰하기 위해 docker attach 명령을 사용하는 연습을 했습니다.

또한, 기본 키 시퀀스 (CTRL+p CTRL+q) 를 사용하여 연결된 컨테이너에서 분리하는 방법과 컨테이너가 TTY 가 활성화된 상태 (-t) 로 시작될 때 docker attach의 동작이 어떻게 변경되는지 살펴보았습니다. 마지막으로, 컨테이너 상호 작용을 유연하게 관리할 수 있도록 컨테이너에 연결할 때 기본 분리 키 시퀀스를 재정의하는 방법을 배웠습니다.