Docker 컨테이너의 셸에 들어가기

Isaac Tony 2023년1월30일
  1. docker exec를 사용하여 Docker 컨테이너의 셸로 이동
  2. docker container attach를 사용하여 Docker 컨테이너의 셸에 들어가기
  3. SSH(Secure Shell)를 사용하여 Docker 컨테이너의 셸로 이동
Docker 컨테이너의 셸에 들어가기

이 자습서에서는 여러 가지 방법을 사용하여 Docker의 컨테이너 셸에 들어가는 방법을 보여줍니다.

docker exec를 사용하여 Docker 컨테이너의 셸로 이동

이 명령을 사용하려면 컨테이너를 실행해야 합니다. 아래 명령을 사용하여 시스템의 컨테이너 상태를 확인할 수 있습니다.

docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS                    PORTS     NAMES
38086474cb6c   debian    "bash"                   2 days ago   Exited (0) 2 days ago               epic_jackson
1c955bac1a84   ubuntu    "bash"                   2 days ago   Exited (0) 2 days ago               musing_morse
1296f9b9d330   nginx     "/docker-entrypoint.…"   2 days ago   Exited (255) 2 days ago   80/tcp    distracted_napier

실행 중인 컨테이너가 없으면 쉽게 만들 수 있습니다. rabbitmq 기본 이미지를 사용하여 컨테이너를 설정합니다.

아래와 같이 컨테이너를 만들기 전에 docker pull 명령을 사용하여 레지스트리에서 기본 이미지를 가져오는 것으로 시작합니다.

$ docker run -d rabbitmq

출력:

Dcad9f270643802092ab525796897c357026767863dade831e8c7d7d82c45712

이제 실행 중인 컨테이너가 있어야 합니다. 다시 한 번 docker ps 명령을 사용하여 확인할 수 있습니다.

$ docker ps -a

출력:

CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS          PORTS                                                 NAMES
dcad9f270643   rabbitmq   "docker-entrypoint.s…"   About a minute ago   Up 57 seconds   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp   inspiring_moore

-it 태그와 함께 docker exec 명령을 사용하여 컨테이너에 들어가거나 파일과 상호 작용하거나 일부 디버깅을 수행합니다.

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

마지막으로 sh 명령은 기본 셸 프롬프트를 열어 컨테이너 내에서 명령을 실행합니다.

isaactonyloi@DESKTOP-HV44HT6:~$ docker exec -it dcad9f270643 sh
#

이제 Docker 컨테이너에 들어갔으므로 컨테이너 내에서 다양한 명령을 실행할 수 있습니다. exit 명령을 입력하고 이 모드에서 기본 터미널로 다시 Enter 키를 누릅니다.

docker container attach를 사용하여 Docker 컨테이너의 셸에 들어가기

docker container attach 명령을 사용하여 실행 중인 컨테이너에 연결할 수도 있습니다. 이를 통해 컨테이너의 ID를 사용하여 실행 중인 컨테이너에 터미널 출력, 입력 및 오류 스트림을 연결할 수 있습니다.

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

이를 위해 아래와 같이 docker ps를 사용합니다. 우리는 여전히 이전 섹션의 rabbitmq 컨테이너를 사용하고 있습니다.

$ docker ps -a

출력:

CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                                 NAMES
dcad9f270643   rabbitmq   "docker-entrypoint.s…"   39 minutes ago   Up 38 minutes   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp   inspiring_moore

도커 컨테이너가 중지된 경우 여기에서 했던 것처럼 docker start 명령을 사용하여 먼저 시작해야 합니다.

$ docker start dcad9f270643
dcad9f270643

이제 도커 컨테이너가 예상대로 작동하지 않으면 docker container attach을 실행하여 컨테이너 내에서 무슨 일이 일어나고 있는지 확인할 수 있습니다.

$ docker container attach dcad9f270643

출력:

2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> Server startup complete; 3 plugins started.
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_prometheus
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_web_dispatch
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_management_agent

SSH(Secure Shell)를 사용하여 Docker 컨테이너의 셸로 이동

마지막으로 일반적으로 SSH로 약칭되는 보안 셸을 사용하여 컨테이너 내에서 명령을 실행할 수도 있습니다. 그러나 이는 기본 이미지에 인플레이션을 야기하고 발생할 수 있는 구성 문제 때문에 가장 권장되지 않는 방법입니다.

또한 이 방법은 키를 직접 관리해야 하므로 보안 문제가 있습니다. 또한 일부 이미지는 이 방법을 본질적으로 지원하지 않을 수 있으므로 추가 구성이 필요할 수 있음을 고려해야 합니다.

그러나 이 방법을 사용해야 하는 경우 다음 단계를 따라야 합니다.

  • 먼저 SSH 서비스를 설치하고 활성화해야 합니다.
  • 그런 다음 컨테이너의 IP 주소를 검색해야 합니다.
  • 마지막으로 검색된 IP 주소를 사용하여 컨테이너에 SSH로 연결합니다.
작가: 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