Docker 컨테이너에서 명령어 실행 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 튜토리얼은 "docker exec into container" 명령어의 핵심을 안내하여 컨테이너화된 애플리케이션을 효과적으로 관리하고 유지하는 데 필요한 지식과 기술을 갖추도록 돕습니다. Docker 컨테이너의 기본 원리부터 다양한 용례에 docker exec 명령어를 활용하는 방법까지, 이 가이드는 컨테이너 상호 작용을 마스터하는 데 필요한 모든 것을 다룹니다.

Docker Exec 기본

Docker Exec 명령어 소개

Docker exec은 실행 중인 컨테이너와 직접 상호 작용할 수 있는 강력한 명령줄 도구입니다. 관리자 및 개발자는 활성 Docker 컨테이너 내에서 명령어를 실행하여 원활한 관리 및 문제 해결 기능을 제공할 수 있습니다.

핵심 기능

docker exec 명령어를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

  • 실행 중인 컨테이너 내에서 특정 명령어 실행
  • 컨테이너의 쉘 환경 접근
  • 관리 작업 및 디버깅 수행
graph LR
    A[Docker 호스트] --> B[실행 중인 컨테이너]
    B --> |docker exec| C[명령어 실행]

기본 구문 및 사용법

docker exec의 표준 구문은 다음과 같습니다.

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

명령어 옵션

옵션 설명 예시
-i 대화형 모드 STDIN 을 유지
-t 가상 터미널 할당 터미널 상호 작용 가능
-u 사용자 지정 특정 사용자로 명령어 실행

실제 코드 예제

간단한 명령어 실행

## 컨테이너 내에서 ls 명령어 실행
docker exec my_container ls /app

## 대화형 bash 쉘
docker exec -it my_container /bin/bash

다른 사용자로 명령어 실행

## 루트 사용자로 명령어 실행
docker exec -u root my_container whoami

## 특정 사용자로 명령어 실행
docker exec -u developer my_container python --version

docker exec 명령어는 다양한 Linux 컨테이너 관리 시나리오를 최소한의 복잡성으로 지원하는 유연한 컨테이너 상호 작용 기능을 제공합니다.

명령어 실행 기법

대화형 실행 vs 비대화형 실행

Docker exec은 두 가지 주요 실행 모드인 대화형 및 비대화형을 지원하며, 각각 다른 컨테이너 관리 목적을 수행합니다.

graph LR
    A[Docker Exec 모드] --> B[비대화형]
    A --> C[대화형]
    B --> D[단일 명령어 실행]
    C --> E[쉘 접근]

비대화형 명령어 실행

비대화형 모드는 활성 터미널 세션을 유지하지 않고 특정 명령어를 실행할 수 있습니다.

## 단일 명령어 실행
docker exec my_container ls /var/www

## 여러 명령어 실행
docker exec my_container bash -c "apt update && apt install -y curl"

대화형 쉘 접근

대화형 모드는 컨테이너 내에서 완전한 터미널 상호 작용을 제공합니다.

## 대화형 bash 쉘 열기
docker exec -it my_container /bin/bash

## 대안적인 쉘 접근
docker exec -it my_container /bin/sh

고급 실행 기법

기법 명령어 목적
사용자별 실행 docker exec -u username 특정 사용자로 명령어 실행
백그라운드 프로세스 docker exec -d container cmd 차단되지 않는 명령어 실행
환경 변수 설정 docker exec -e VAR=value 사용자 지정 환경 설정

권한 있는 명령어 실행

## 루트 레벨 접근
docker exec -u root my_container command

## sudo 유사 실행
docker exec -u root my_container sudo -u appuser command

이러한 명령어 실행 기법을 숙달하면 다양한 시나리오에서 효율적이고 유연한 컨테이너 관리가 가능합니다.

실제 Docker Exec 시나리오

시스템 모니터링 및 진단

Docker exec은 컨테이너 내에서 포괄적인 시스템 모니터링 및 문제 해결을 가능하게 합니다.

## 시스템 리소스 확인
docker exec my_container top

## 네트워크 연결 분석
docker exec my_container netstat -tuln

## 시스템 로그 보기
docker exec my_container journalctl -xe

데이터베이스 관리

graph LR
    A[Docker Exec] --> B[데이터베이스 작업]
    B --> C[연결]
    B --> D[쿼리 실행]
    B --> E[사용자 관리]

데이터베이스 상호 작용 예제

## MySQL 데이터베이스 작업
docker exec mysql_container mysql -u root -p
docker exec mysql_container mysqldump database_name

## PostgreSQL 관리
docker exec postgres_container psql -U username

애플리케이션 디버깅

시나리오 명령어 목적
Python 디버깅 docker exec app_container python -m pdb script.py 대화형 디버깅
Node.js 검사 docker exec -it node_container npm test 테스트 스위트 실행
종속성 확인 docker exec container_name pip list 설치된 패키지 확인

보안 및 권한 관리

## 새 사용자 생성
docker exec -u root container_name useradd -m newuser

## 파일 권한 수정
docker exec container_name chmod 755 /path/to/file

## 현재 사용자 컨텍스트 확인
docker exec container_name whoami

원격 구성 업데이트

## 구성 파일 업데이트
docker exec web_container sed -i 's/old_value/new_value/g' /etc/config.yml

## 서비스 재시작
docker exec container_name systemctl restart service_name

실제 Docker exec 시나리오는 컨테이너 관리에서의 다재다능함을 보여주며, 시스템 관리 및 문제 해결을 위한 강력한 도구를 제공합니다.

요약

"컨테이너 내부로 docker exec 사용" 튜토리얼은 강력한 docker exec 명령어를 심층적으로 다루며, Docker 컨테이너 내부에 접근하고 명령어를 실행하며 관리 작업을 수행하는 방법을 안내합니다. 이 도구를 숙달하면 문제 해결, 반복적인 작업 자동화, 컨테이너화된 애플리케이션의 전반적인 상태 유지, 안정적이고 효율적인 작동을 보장할 수 있습니다.