클라우드프로그래밍 4주차 — Docker 개념과 컨테이너 다루기
컨테이너와 VM의 차이, Docker 엔진 구조와 이미지 레이어를 정리하고, 컨테이너 생명주기(run/logs/top/stats/inspect/rm)를 다뤄 본 4주차 기록.
클라우드프로그래밍 4주차 — Docker 개념과 컨테이너 다루기
4주차부터 컨테이너 실습이 시작됐다. Docker 엔진과 이미지, 컨테이너 생명주기를 다룬다.
핵심 개념 정리
- 컨테이너 vs VM: VM은 게스트 OS 전체를 가상화해 무겁다. 컨테이너는 호스트 커널을 공유하고 프로세스를 격리해 가볍고 빠르다.
- Docker 구조:
Docker CLI→Docker API→Docker 데몬(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.