새 Docker 컨테이너에서 Bash 터미널 시작

Isaac Tony 2023년1월30일
  1. Bash 대화형 셸 사용
  2. docker exec 명령 사용
  3. docker attach 명령 사용
새 Docker 컨테이너에서 Bash 터미널 시작

Docker 컨테이너는 애플리케이션의 모든 종속성을 패키징하기 위한 표준 단위로 모든 환경에서 쉽게 실행할 수 있습니다. 컨테이너는 최근에 매우 대중화되었으며 대부분의 개발자는 이제 애플리케이션 및 종속성을 관리하기 위해 컨테이너에 크게 의존하고 있습니다.

Docker는 도커 컨테이너 내에서 bash 터미널을 시작하여 셸 인스턴스에 액세스할 수 있는 여러 방법을 제공합니다. 이는 도커 컨테이너 내에서 일부 명령을 실행할 때 특히 유용합니다.

게다가 이것은 디버깅을 위한 것일 수도 있고 모든 것이 올바르게 구성되었는지 확인하고 싶을 수도 있습니다. 이 문서에서는 실행 중인 컨테이너와 실행되지 않는 컨테이너에 대해 이를 수행하는 데 사용할 수 있는 다양한 방법을 살펴봅니다.

Bash 대화형 셸 사용

Bash는 사용자가 작업을 유발하는 명령을 입력할 수 있도록 하는 Linux 시스템에서 흔히 볼 수 있는 명령 프로세서입니다. Unix 기반 시스템이나 WSL과 약간의 상호 작용이 있는 경우 bash를 통해 다양한 명령과 상호 작용할 수 있습니다.

마찬가지로 도커 컨테이너 내에서 Linux 터미널에 직접 액세스하고 일반 Linux bash에서와 같이 명령을 실행할 수도 있습니다. 이 방법의 한 가지 장점은 docker exec 명령과 같은 다른 명령과 달리 실행되지 않는 컨테이너로 이 작업을 수행할 수 있다는 것입니다.

아래와 같이 도커 레지스트리의 공식 rabbitmq 이미지를 사용하여 도커 컨테이너를 만들고 컨테이너 내의 bash에 직접 액세스합니다. 다른 명령으로 이 작업을 수행할 수 있습니다. 이미지가 있는지 미리 확인하고 싶습니다.

docker pull rabbitmq
docker images

이제 이미지가 있으므로 대화식으로 도커 컨테이너를 만들 수 있습니다. 즉, 아래와 같이 계속 실행되는 동안 도커 컨테이너 내에서 명령을 실행할 수 있습니다.

$ docker run -it rabbitmq bash

출력:

root@f418a3286aae:/#

보시다시피 이제 도커 컨테이너 안에 있으며 새 컨테이너 내에서 bash를 성공적으로 실행했습니다. 이제 실제 터미널로 작업하는 것처럼 명령을 실행할 수 있습니다.

예를 들어 아래와 같이 이 컨테이너 내부의 파일과 디렉터리를 나열할 수 있습니다.

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f418a3286aae:/#

docker exec 명령 사용

또는 docker exec 명령을 사용하여 새 도커 컨테이너 내에서 bash를 실행할 수도 있습니다. 그러나 이전 방법과 달리 이 명령을 사용하려면 컨테이너가 이미 실행 중이어야 합니다. 그렇지 않으면 명령이 작동하지 않습니다.

docker ps -a 명령을 사용하여 컨테이너가 실행 중인지 확인합니다. 사용하려는 컨테이너가 실행 중이 아니면 docker start 명령 다음에 컨테이너 ID 또는 이름을 사용하여 컨테이너를 시작할 수 있습니다.

docker ps

-it 태그와 함께 docker exec 명령을 사용합니다. exec 명령을 사용하면 실행 중인 컨테이너에서 명령을 실행할 수 있고 -it 태그를 사용하면 대화식으로 컨테이너를 열 수 있습니다.

아래와 같이 실행할 수 있습니다.

$ docker exec -it f418a3286aae bash

출력:

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  isaac  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys tmp  tonyloi  usr  var

이제 이 도커 컨테이너 내에서 bash를 성공적으로 시작했으므로 컨테이너 내에서 다양한 명령을 실행할 수 있습니다. bash가 없는 컨테이너에는 sh를 대안으로 사용할 수 있습니다.

이것은 컨테이너 내에서 명령을 실행할 수 있는 기본 셸 프롬프트를 여는 명령이기도 합니다.

$ docker exec -it f418a3286aae sh

출력:

# ls
bin  boot  dev  etc  home  isaac  isaactonyloi  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  tonyloi  usr  var

docker attach 명령 사용

docker attach 명령을 사용하여 실행 중인 도커 컨테이너 내에서 bash를 실행할 수도 있습니다. 이를 통해 컨테이너의 ID를 사용하여 실행 중인 컨테이너에 로컬 표준 입력, 출력 및 오류 스트림을 연결할 수 있습니다.

그런 다음 다양한 명령을 실행하고 입력을 수락하고 지정된 컨테이너를 디버그할 수 있습니다. 출력, 입력 및 오류 스트림을 첨부하려면 실행 중인 컨테이너가 필요합니다.

아래와 같이 컨테이너 이름 또는 ID를 사용하여 구현할 수 있습니다.

암호:

$ docker container attach f418a3286aae

출력:

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  isaac  isaactonyloi  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  tonyloi  usr  var
root@f418a3286aae:/#
작가: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn