Docker 컨테이너 셸에 접속하는 방법
Docker 컨테이너는 독립적인 실행 환경을 제공하여 애플리케이션을 격리하고 관리하는 데 유용합니다. 컨테이너 내부에서 발생하는 문제를 해결하거나, 컨테이너 상태를 확인하기 위해서는 컨테이너의 셸에 접속해야 할 때가 있습니다.
실행 중인 컨테이너 목록 확인
먼저, 현재 실행 중인 컨테이너 목록을 확인합니다.
docker ps
이 명령어는 컨테이너 ID, 이미지 이름, 상태 등의 정보를 출력합니다.
컨테이너에 접속하기
1 docker exec 명령어 사용
- 기본 형식:
docker exec -it 컨테이너ID /bin/bash
옵션 설명:
-i
: 인터랙티브 모드로 실행 (키보드 입력 가능)-t
: TTY 할당 (터미널 모드)컨테이너ID
: 접속할 컨테이너의 고유 ID/bin/bash
: 실행할 셸 (bash 외에 다른 셸을 지정할 수도 있음)
docker exec -it c456623003b1 /bin/bash
2 docker attach 명령어 사용 (주의)
docker attach
는 컨테이너가 종료될 때까지 연결이 유지됩니다. 컨테이너가 이미 종료된 상태에서docker attach
를 실행하면 새로운 컨테이너가 생성될 수 있습니다.
docker attach 컨테이너ID
주의: docker attach
는 컨테이너의 로그를 실시간으로 보여주는 용도로 주로 사용하며, 셸에 접속하기 위해서는 docker exec
를 사용하는 것이 일반적입니다.
컨테이너 내부에서 작업하기
셸에 접속하면 마치 컨테이너 내부의 리눅스 시스템에서 작업하는 것처럼 명령어를 실행할 수 있습니다. 예를 들어, 파일 시스템을 탐색하거나, 로그 파일을 확인하거나, 애플리케이션을 디버깅할 수 있습니다.
추가 팁
- 컨테이너 이름으로 접속: 컨테이너 이름으로 접속하려면 컨테이너 ID 대신 컨테이너 이름을 사용하면 됩니다.
- 다른 셸 사용:
/bin/bash
외에sh
,zsh
등 다른 셸을 지정할 수 있습니다. - 특정 사용자로 로그인:
-u
옵션을 사용하여 특정 사용자로 로그인할 수 있습니다. - 백그라운드에서 실행:
-d
옵션을 사용하여 백그라운드에서 실행할 수 있습니다.
주의사항:
- 컨테이너 내부에서 시스템 설정을 변경하는 경우, 컨테이너 재시작 시 변경 사항이 유지되지 않을 수 있습니다.
- 컨테이너 내부에서 설치한 패키지나 파일은 컨테이너가 삭제되면 함께 삭제됩니다.
자세한 정보는 Docker 공식 문서를 참고하세요:
- 특정 컨테이너에 접속하여 특정 명령을 실행하고 싶습니다.
- 컨테이너 내부에서 파일을 수정하고 싶습니다.
- 컨테이너에 새로운 패키지를 설치하고 싶습니다.
Docker 컨테이너 셸에 접속하는 샘플 코드 예시
실행 중인 컨테이너 목록 확인
docker ps
- 출력 예시:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---------------------------------------------------------------------------------------------------
c456623003b1 ubuntu:latest "/bin/bash" 3 seconds ago Up 3 seconds my-ubuntu
컨테이너에 접속하기
1 docker exec 명령어 사용 (추천)
docker exec -it c456623003b1 /bin/bash
# 파일 목록 보기
ls
# 디렉토리 이동
cd /var/log
# 로그 파일 확인
cat nginx/access.log
# 패키지 설치 (Ubuntu 예시)
apt update && apt install vim
2 docker attach 명령어 사용 (주의)
docker attach c456623003b1
컨테이너 이름으로 접속하기
컨테이너에 이름을 지정한 경우, 이름으로도 접속할 수 있습니다.
docker exec -it my-ubuntu /bin/bash
특정 사용자로 로그인하기
docker exec -it -u root c456623003b1 /bin/bash
-u root
옵션을 통해 root 사용자로 로그인합니다.
백그라운드에서 실행하기
docker exec -d c456623003b1 /bin/bash
-d
옵션을 통해 백그라운드에서 실행합니다.
추가 설명
- 컨테이너 내부에서의 작업: 컨테이너 내부에서는 마치 일반적인 리눅스 시스템에서 작업하는 것과 같이 다양한 명령어를 실행할 수 있습니다.
- 컨테이너 외부에서의 작업: 컨테이너 외부에서 컨테이너 내부의 파일을 복사하거나, 컨테이너를 시작/중지/삭제하는 등 다양한 작업을 수행할 수 있습니다.
- Dockerfile: Dockerfile을 사용하여 컨테이너 이미지를 자동으로 생성할 수 있습니다.
더 자세한 정보
Docker 공식 문서를 참고하여 더 자세한 내용을 확인할 수 있습니다.
- 특정 컨테이너에서 특정 포트를 열고 싶습니다.
- Docker Compose를 사용하여 여러 컨테이너를 관리하고 싶습니다.
- Docker 이미지를 커스텀하고 싶습니다.
Docker 컨테이너 셸 접속의 대체 방법
Docker 컨테이너 셸에 접속하는 가장 일반적인 방법은 docker exec
명령어를 사용하는 것입니다. 하지만 상황에 따라 다른 방법을 사용할 수도 있습니다.
Docker attach:
- 장점: 컨테이너의 표준 출력을 실시간으로 볼 수 있습니다.
- 주로 사용하는 경우: 컨테이너의 로그를 확인하거나, 컨테이너가 어떤 작업을 하고 있는지 실시간으로 관찰할 때 유용합니다.
SSH 접속:
- 환경 설정: 컨테이너 내부에 SSH 서버를 설치하고, 컨테이너와 호스트 간에 SSH 키를 설정해야 합니다.
- 장점: SSH 클라이언트를 사용하여 익숙한 방식으로 컨테이너에 접속할 수 있습니다.
- 단점: 추가적인 설정이 필요하며, 보안에 대한 고려가 필요합니다.
Volume 마운트:
- 방법: 호스트의 디렉토리를 컨테이너 내부에 마운트하여 파일을 직접 수정합니다.
- 장점: 컨테이너 내부의 파일을 편집하거나 복사하기에 편리합니다.
- 단점: 실수로 컨테이너 내부의 파일 시스템을 변경할 수 있으므로 주의해야 합니다.
Docker Compose:
- 복수 컨테이너 관리: Docker Compose를 사용하여 여러 컨테이너를 관리하는 경우,
docker-compose exec
명령어를 사용하여 특정 서비스의 컨테이너에 접속할 수 있습니다.
각 방법의 장단점 비교
방법 | 장점 | 단점 | 주로 사용하는 경우 |
---|---|---|---|
docker exec | 간편하게 셸 접속 | 일반적인 셸 접속 | |
docker attach | 실시간 로그 확인 | 컨테이너 종료 시 연결 유지 | 로그 확인, 실시간 관찰 |
SSH 접속 | 익숙한 방식, 다양한 기능 | 추가 설정 필요, 보안 고려 | 복잡한 작업, 원격 관리 |
Volume 마운트 | 파일 편집 용이 | 실수로 변경 가능 | 파일 수정, 데이터 전송 |
Docker Compose | 복수 컨테이너 관리 | Docker Compose 환경 필요 | 복수 컨테이너 환경 |
어떤 방법을 선택해야 할까요?
- 간단한 셸 접속:
docker exec
- 실시간 로그 확인:
docker attach
- 복잡한 작업, 원격 관리: SSH 접속
- 파일 편집: Volume 마운트
- 복수 컨테이너 관리: Docker Compose
선택 시 고려 사항:
- 작업의 목적 (셸 접속, 로그 확인, 파일 수정 등)
- 컨테이너의 구성 (단일 컨테이너, 복수 컨테이너)
- 보안 요구 사항
- 컨테이너 내부의 로그 파일을 확인하고 싶다면
docker attach
를 사용합니다. - 컨테이너 내부의 설정 파일을 수정하고 싶다면 Volume 마운트를 사용합니다.
- 원격에서 컨테이너에 접속하여 복잡한 작업을 수행하고 싶다면 SSH 접속을 사용합니다.
주의:
더 자세한 정보는 Docker 공식 문서를 참고하세요:
- 특정 상황에 어떤 방법이 가장 적합할까요?
- SSH 접속을 설정하는 방법을 알려주세요.
- Volume 마운트를 사용하여 파일을 수정하는 방법을 알려주세요.
docker docker-container