Post

클라우드프로그래밍 4주차 — Docker 개념과 컨테이너 다루기

컨테이너와 VM의 차이, Docker 엔진 구조와 이미지 레이어를 정리하고, 컨테이너 생명주기(run/logs/top/stats/inspect/rm)를 다뤄 본 4주차 기록.

클라우드프로그래밍 4주차 — Docker 개념과 컨테이너 다루기

4주차부터 컨테이너 실습이 시작됐다. Docker 엔진과 이미지, 컨테이너 생명주기를 다룬다.

핵심 개념 정리

  • 컨테이너 vs VM: VM은 게스트 OS 전체를 가상화해 무겁다. 컨테이너는 호스트 커널을 공유하고 프로세스를 격리해 가볍고 빠르다.
  • Docker 구조: Docker CLIDocker APIDocker 데몬(dockerd) 이 이미지/컨테이너/네트워크/볼륨을 관리한다.
  • 이미지 = 읽기전용 레이어의 적층 + 컨테이너 실행 시 얹히는 쓰기 레이어. 빌드 중의 명령·파일시스템 변경이 레이어로 쌓인다.
  • 컨테이너 = 이미지의 실행 인스턴스. 하나의 호스트 프로세스처럼 동작하지만 독립된 네임스페이스를 가진다.

컨테이너 생명주기 다뤄보기

실습 이미지는 ubuntu-lab:22.04(Ubuntu 22.04 기반 로컬 이미지)를 썼다. 강의 교재는 diamol/base 를 쓰지만, 학습 포인트(hostname=컨테이너ID, logs/top/stats/inspect)는 이미지와 무관하다.

버전 확인

1
2
3
4
5
$ docker version --format 'Client: {{.Client.Version}} / Server: {{.Server.Version}}'
Client: 27.5.1 / Server: 27.5.1

$ docker compose version
Docker Compose version v2.32.4-desktop.1

컨테이너 실행 → 내부 hostname/date

컨테이너의 hostname 이 곧 컨테이너 ID 다. 격리된 독립 시스템처럼 동작한다는 것을 보여주는 부분이다.

1
2
3
$ docker run --rm ubuntu-lab:22.04 sh -c 'hostname; date'
84b67b8edf64
Tue Apr  7 21:32:14 UTC 2026

백그라운드 실행 + 조회

2초마다 date 를 찍는 컨테이너를 백그라운드로 띄우고 상태를 조회했다.

1
2
3
4
$ docker run -d --name week4demo ubuntu-lab:22.04 sh -c 'while true; do date; sleep 2; done'
$ docker container ls --filter name=week4demo --format 'table {{.Image}}\t{{.Command}}\t{{.Status}}'
IMAGE              COMMAND                  STATUS
ubuntu-lab:22.04   "sh -c 'while true; …"   Up 7 seconds

프로세스(top) / 로그(logs)

1
2
3
4
5
6
7
8
9
10
$ docker container top week4demo -o pid,ppid,cmd
PID    PPID   CMD
5033   5014   sh -c while true; do date; sleep 2; done
5063   5033   sleep 2

$ docker container logs week4demo
Tue Apr  7 21:32:15 UTC 2026
Tue Apr  7 21:32:17 UTC 2026
Tue Apr  7 21:32:19 UTC 2026
Tue Apr  7 21:32:21 UTC 2026

상세 정보(inspect)

1
2
$ docker container inspect week4demo --format 'Id={{.Id}} / Image={{.Config.Image}} / Status={{.State.Status}}'
Id=e8ef30dab426...  Image=ubuntu-lab:22.04  Status=running  Running=true  PID=4547

리소스 모니터링(stats)

1
2
3
$ docker container stats --no-stream week4demo --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}'
NAME        CPU %   MEM USAGE / LIMIT    PIDS
week4demo   0.12%   2.086MiB / 15.5GiB   2

전체 조회 + 정리(rm)

1
2
3
4
5
6
7
$ docker container ls --all --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
NAMES       IMAGE              STATUS
week4demo   ubuntu-lab:22.04   Up 18 seconds
myubuntu    ubuntu:22.04       Up (about an hour)   ← 1주차 리눅스 실습 컨테이너

$ docker rm -f week4demo
week4demo

정리

top/logs/stats/inspect 네 가지로 컨테이너를 원격 컴퓨터처럼 조회·관리할 수 있다. 특히 logs 는 컨테이너의 표준출력(stdout) 을 그대로 수집하는데, 이는 12factor 로깅 원칙과 연결되는 동작이다. 측정값은 메모리 약 2MiB, CPU 0% 수준으로 VM 대비 가볍고, hostname이 곧 컨테이너 ID인 점은 프로세스 격리를 보여준다. 컨테이너의 실행·조회·삭제 흐름을 정리한 주차다.

This post is licensed under CC BY 4.0 by the author.