컨테이너 환경 관리를 위한 Docker 핵심 가이드

호스트와 컨테이너 간 파일 전송

컨테이너에서 로컬 머신으로 데이터를 옮길 때 docker cp를 활용합니다. 다음은 대상 경로를 지정하는 기본 문법입니다.

docker cp <대상_컨테이너>:<내부_경로> <호스트_저장위치>

실제 사용 예시:

docker cp web_app:/var/log/nginx/access.log /home/admin/logs/access.log

반대로 호스트의 파일을 컨테이너 내부로 복사하려면 순서를 바꿉니다.

docker cp /home/admin/config.yml web_app:/app/settings/config.yml

파이프라인을 활용한 스트리밍 방식도 가능합니다. 컨테이너의 쉘에 접근하지 않고 바로 내용을 전달할 수 있습니다.

cat /home/admin/source.txt | docker exec -i web_app tee /app/target.txt

이미지 조작 명령어

동작명령어
저장소 이미지 목록 확인docker images 또는 docker image ls
원격 이미지 내려받기docker pull nginx:alpine
불필요한 이미지 제거docker rmi nginx:alpine
이미지 메타데이터 확인docker inspect nginx:alpine
Dockerfile로 빌드docker build -t myapp:v2.1 .

컨테이너 생명주기 관리

실행 중인 프로세스를 확인하고 상태를 제어하는 방법입니다.

# 활성화된 컨테이너만 표시
docker ps

# 중단된 것 포함 전체 조회
docker ps -a

# 백그라운드 실행 및 포트 바인딩
docker run -d -p 9000:3000 --name api_server node:18

# 대화형 터미널 접속
docker run -it node:18 /bin/sh

# 실행 중인 인스턴스 재시작
docker restart api_server

# 완전한 제거 (실행 중인 경우 먼저 중지 필요)
docker stop api_server
docker rm api_server

# 내부 쉘 진입
docker exec -it api_server /bin/sh

# 실시간 자원 소비 모니터링
docker stats

네트워크 및 스토리지 구성

가상 네트워크 인프라를 직접 구축하여 컨테이너 간 통신을 관리합니다.

# 사용자 정의 네트워크 생성
docker network create backend_net

# 특정 네트워크 상세 정보
docker network inspect backend_net

# 컨테이너를 네트워크에 연결/분리
docker network connect backend_net db_container
docker network disconnect backend_net db_container

영속 볼륨을 생성하여 데이터를 호스트에 안전하게 보관합니다.

# 볼륨 생성 및 마운트
docker volume create app_data
docker run -v app_data:/var/lib/postgresql/data postgres:15

Docker Compose 다중 서비스 운영

여러 컨테이너를 선언적으로 정의하고 일괄 제어합니다.

# 전체 스택 기동 (백그라운드)
docker-compose up -d

# 이미지 재빌드 후 실행
docker-compose up --build

# 서비스 중단 및 트워크/볼륨 정리
docker-compose down

# 개별 서비스 로그 추적
docker-compose logs -f web

시스템 정리 및 유지보수

# 사용하지 않는 모든 리소스 일괄 삭제
docker system prune -f

# 카테고리별 선택적 정리
docker container prune    # 중지된 컨테이너
docker image prune        # 그 없는 이미지
docker volume prune       # 마운트되지 않은 볼륨
docker network prune      # 연결 없는 네트워크

QNAP NAS 환경에서 프록시 설정

Container Station이 설치된 경로로 이동하여 실행 스크립트를 수정합니다.

cd /share/CACHEDEV1_DATA/.qpkg/container-station
vim script/run-docker.sh

스크립트 하단에 프록시 환경변수를 추가합니다.

export http_proxy="http://192.168.50.22:7890"
export https_proxy="http://192.168.50.22:7890"
export no_proxy="192.168.50.0/24,localhost,127.0.0.1"

변경사항 적용을 위해 Container Station 서비스를 재시작합니다.

실전 배포 예시

미디어 서버 (Emby)

docker run -d \
  --name streaming_svc \
  --network host \
  --restart always \
  --device /dev/dri:/dev/dri \
  -e UID=0 -e GID=0 \
  -e http_proxy=http://192.168.1.22:7890 \
  -e https_proxy=http://192.168.1.22:7890 \
  -e no_proxy=localhost,127.0.0.1 \
  --privileged \
  -v /share/docker/emby/config:/config \
  -v /share/video:/media \
  amilys/embyserver:4.8.0.56

관계형 데이터베이스 (MySQL 8.0)

쉘 스크립트로 재사용 가능하게 작성합니다.

#!/bin/sh
docker run \
  -p 3307:3306 \
  --name rdb_primary \
  --privileged=true \
  --restart unless-stopped \
  -v /user/local/server/mysql8.0.33/conf:/etc/mysql \
  -v /user/local/server/mysql8.0.33/logs:/logs \
  -v /user/local/server/mysql8.0.33/data:/var/lib/mysql \
  -v /user/local/server/mysql8.0.33/etc/localtime:/etc/localtime \
  -e MYSQL_ROOT_PASSWORD=SecurePass123! \
  -e MYSQL_ROOT_HOST='%' \
  -d mysql:8.0.33

실행 후 원격 접속 권한을 부여합니다.

docker exec -it rdb_primary bash
mysql -u root -p

# MySQL 프롬프트 내에서
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

태그: docker container QNAP MySQL Emby

6월 10일 22:13에 게시됨