C.W.K.
Stream
Lesson 04 of 07 · published

Image vs Container — Class vs Instance

~15 min · foundations, mental-model

Level 0Container 호기심
0 XP0/36 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

제일 중요한 구분 하나

Image 랑 container 헷갈리는 게 새 Docker 사용자가 헤매는 1순위 이유야. 머리에 박아:

Image = read-only template (class, blueprint, artifact).
Container = 실행 중인 인스턴스 + 그 위에 writable layer (object, 살아 있는 것).

Image 하나, container 여러 개

Image 는 한 번 빌드해. Container 는 필요한 만큼 띄워. 각 container 는 자기만의 writable layer 를 가져 — 런타임 상태 (로그, 임시 파일, 마운트된 volume 에 안 들어가는 모든 거) 가 거기 들어가.

Container 는 설계상 ephemeral

Writable layer 는 container 랑 같이 죽어. docker rm 이 layer 를 지워. 이건 feature 야 — state 를 외부화 (volume = data, registry = image) 하도록 강제하니까. 그게 state 가 있어야 할 자리야.

Container 가 없어졌다고 중요한 데이터 잃었으면, 버그는 데이터를 외부화 안 한 거야. Container 가 너무 약한 게 아니야.

Code

Image 하나로 container 셋·bash
# Pull the image once
docker pull nginx:1.27-alpine

# Spin up three independent containers from it
docker run -d --name web1 -p 8081:80 nginx:1.27-alpine
docker run -d --name web2 -p 8082:80 nginx:1.27-alpine
docker run -d --name web3 -p 8083:80 nginx:1.27-alpine

# Each has its own writable layer.
# Each is reachable on a different host port.
# All share the same image layers on disk.
Ephemeral 증명·bash
# Write something inside the container
docker run -d --name bookkeeper alpine sleep 3600
docker exec bookkeeper sh -c 'echo "customer state" > /data.txt'
docker exec bookkeeper cat /data.txt
# customer state

# Remove and recreate
docker rm -f bookkeeper
docker run -d --name bookkeeper alpine sleep 3600
docker exec bookkeeper cat /data.txt
# cat: can't open '/data.txt': No such file or directory

# The writable layer was thrown away. The image is unchanged.
# Solution: volumes. We get there in Track 4.

External links

Exercise

같은 redis:7-alpine image 로 container 셋 띄워. 각각 다른 호스트 포트 (6381, 6382, 6383) 로. 각각 redis-cli 로 붙어서 SET name redis-N 해. 셋 다 stop. 다시 start. 값 살아있어? 두 문장으로 왜 그런지 설명해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.