컨테이너 실행 및 관리

DockerBeginner
지금 연습하기

소개

컨테이너는 프로세스를 파일 시스템 뷰 및 런타임 설정과 함께 패키징합니다. Docker 와 같은 컨테이너 엔진을 사용하면 이미지를 빌드하고, 해당 이미지로 컨테이너를 실행하며, 스토리지를 연결하고, 로그를 확인하고, 실행 중인 컨테이너 내부에서 명령을 실행하고, 더 이상 필요하지 않은 컨테이너를 제거할 수 있습니다.

이 실습에서는 LabEx 환경에 이미 설치된 Docker 엔진을 사용합니다. 공용 이미지 풀 (pull) 을 방지하기 위해, 이 실습에서는 캐시된 로컬 베이스 이미지를 사용하여 작은 실습용 이미지를 빌드합니다. 엔진을 검사하고, 이미지를 빌드하고, 바인드 마운트를 사용하여 명명된 컨테이너를 실행하고, 로그와 생성된 파일을 확인하고, 컨테이너 내부에서 명령을 실행한 다음, 실행 중인 컨테이너를 정리하는 과정을 진행합니다.

컨테이너 엔진 검사

이 단계에서는 Docker 가 사용 가능한지 확인하고 로컬 이미지를 검사합니다. 컨테이너 워크플로우는 사용 중인 엔진과 이미 존재하고 있는 이미지를 파악하는 것에서 시작됩니다. 이 실습에서는 캐시된 베이스 이미지를 사용하여 공용 풀을 방지합니다.

프로젝트 디렉토리로 이동합니다.

cd /home/labex/project

Docker 버전을 확인합니다.

docker --version

로컬 이미지 목록을 확인합니다.

docker image ls

실습에서 로컬 빌드 베이스로 사용하는 gcr.io/k8s-minikube/kicbase:v0.0.37 이미지가 보여야 합니다.

로컬 이미지 검토 및 빌드

이 단계에서는 준비된 Dockerfile 을 검사하고 로컬 이미지를 빌드합니다. 이미지는 재사용 가능한 파일 시스템 및 메타데이터 템플릿이며, 컨테이너는 이미지로부터 생성된 실행 인스턴스입니다.

Dockerfile 을 확인합니다. 캐시된 베이스 이미지에는 자체 기본 엔트리포인트가 있으므로 ENTRYPOINT 라인이 중요합니다. 이 실습에서는 컨테이너가 실습 스크립트를 직접 시작하도록 새로운 엔트리포인트를 설정합니다.

cat Dockerfile

이미지를 빌드하고 lfcs-container-demo:1.0으로 태그를 지정합니다. -t 옵션은 이름과 태그를 할당하며, 마지막의 .은 Docker 에게 현재 디렉토리를 빌드 컨텍스트로 사용하도록 지시합니다.

docker build -t lfcs-container-demo:1.0 .

빌드 성공 후 이미지를 확인합니다.

docker image ls lfcs-container-demo:1.0

명명된 컨테이너 실행

이 단계에서는 이미지를 분리 (detached) 모드 컨테이너로 실행합니다. 분리 모드란 컨테이너가 백그라운드에서 실행됨을 의미합니다. 컨테이너 이름은 lfcs-demo로 지정하며, 바인드 마운트를 통해 호스트의 /home/labex/project/container-data를 컨테이너 내부의 /data에 연결합니다.

컨테이너를 실행합니다.

docker run -d --name lfcs-demo -v /home/labex/project/container-data:/data lfcs-container-demo:1.0

컨테이너 ID 를 확인합니다.

docker ps -q --filter name=lfcs-demo

실행 중인 컨테이너 목록에서 lfcs-demo를 찾습니다.

docker ps --filter name=lfcs-demo

로그 확인 및 명령 실행

이 단계에서는 실행 중인 컨테이너를 검사합니다. 로그는 컨테이너화된 프로세스가 출력하는 내용을 보여줍니다. 바인드 마운트를 사용하면 컨테이너가 호스트에 데이터를 기록했는지 확인할 수 있습니다. docker exec는 실행 중인 컨테이너 내부에서 명령을 실행합니다.

컨테이너가 로그를 기록할 시간을 잠시 줍니다.

sleep 3

최근 컨테이너 로그를 읽습니다.

docker logs --tail 5 lfcs-demo

바인드 마운트를 통해 기록된 파일을 확인합니다.

tail -n 5 container-data/container-output.log

컨테이너 내부에서 명령을 실행하여 마운트된 데이터가 내부에서 보이는지 확인합니다.

docker exec lfcs-demo sh -c 'test -f /data/container-output.log && echo container-data-visible'

컨테이너 중지 및 제거

이 단계에서는 실행 중인 컨테이너를 정리합니다. 컨테이너를 중지하면 프로세스가 종료됩니다. 중지된 컨테이너를 제거하면 컨테이너 객체는 삭제되지만, 빌드한 이미지는 삭제되지 않습니다.

컨테이너를 중지합니다.

docker stop lfcs-demo

중지된 컨테이너를 제거합니다.

docker rm lfcs-demo

정리 상태를 확인합니다. docker ps -a는 중지된 컨테이너를 포함한 모든 컨테이너를 나열합니다. 제거 후에는 lfcs-demo가 나타나지 않아야 합니다.

docker ps -a --filter name=lfcs-demo

요약

기본적인 Docker 워크플로우 전체를 실습했습니다: 엔진 검사, 캐시된 로컬 베이스 이미지 사용, 태그가 지정된 이미지 빌드, 바인드 마운트를 사용한 명명된 분리 컨테이너 실행, 로그 확인, 컨테이너 내부 명령 실행, 그리고 컨테이너 중지 및 제거. 이는 더 심화된 엔진 구성이나 오케스트레이션 주제를 다루기 전에 반드시 이해해야 할 핵심 컨테이너 작업입니다.