coredot.today
도커 첫걸음 1편 — 이미지·컨테이너·레지스트리, 단어 다섯 개로 끝내는 개념 잡기
블로그로 돌아가기
Docker도커 입문컨테이너이미지Dockerfile레지스트리튜토리얼협업

도커 첫걸음 1편 — 이미지·컨테이너·레지스트리, 단어 다섯 개로 끝내는 개념 잡기

도커가 어렵게 느껴지는 이유는 명령어가 아니라 단어 때문입니다. 이미지, 컨테이너, Dockerfile, 레지스트리, 볼륨 — 이 다섯 단어만 정확히 구분하면 docker build와 docker run은 저절로 읽힙니다. 밀키트 비유로 개념을 잡고, 가상머신과 무엇이 다른지, 왜 협업에 도커가 필요한지, 맥과 윈도우에서는 왜 '리눅스 VM'이 하나 더 필요한지를 정리합니다. 5편 시리즈의 첫 글이며, 이미지와 컨테이너의 한살이를 직접 눌러 보는 시뮬레이터가 들어 있습니다.

코어닷투데이2026-09-2722분

들어가며 — "README대로 했는데 안 돼요"

도커 첫걸음 1편크게 보기

새 프로젝트에 합류한 첫날을 떠올려 봅시다. README에는 "Python 3.12, PostgreSQL 16, Redis 설치 후 pip install -r requirements.txt"라고 적혀 있습니다. 그대로 따라 했는데 내 맥에는 Python 3.13이 깔려 있고, 윈도우를 쓰는 동료는 PostgreSQL 설치 마법사에서 막혔고, 어떤 라이브러리는 C 컴파일러가 없다며 설치가 실패합니다. 반나절이 지나도 코드는 한 줄도 못 봤습니다.

도커는 이 반나절을 명령어 한 줄로 줄이려고 만든 도구입니다. 그런데 막상 배우려고 하면 이미지, 컨테이너, 레지스트리, 레이어, 볼륨 같은 단어가 한꺼번에 쏟아져 겁부터 납니다. 좋은 소식은, 협업에 필요한 도커는 생각보다 훨씬 작다는 것입니다. 단어 다섯 개와 명령어 두 개(build, run)면 충분합니다.

이 시리즈는 도커를 "써 본 적은 있는데 매번 검색해서 복사만 하는" 분, 그리고 "팀에서 도커로 개발 환경을 맞추자는데 뭐부터 해야 할지 모르는" 분을 위한 글입니다. 도커의 역사나 커널 내부 구조가 궁금하다면 앞서 쓴 Docker와 컨테이너: 모든 것과 베이스 이미지의 비밀을 함께 보시면 좋습니다. 여기서는 쓰는 법에만 집중합니다.

1. 도커가 해결하는 문제 — "환경"을 통째로 들고 다니기

프로그램이 돌아가려면 코드만 있어서는 안 됩니다. 정확한 버전의 언어 런타임, 라이브러리, 시스템 패키지, 설정 파일, 환경변수가 모두 맞아야 합니다. 이걸 통틀어 환경이라고 부릅니다. 지금까지는 환경을 문서(README)로 설명하고 각자 자기 컴퓨터에 재현했습니다. 그러니 사람 수만큼 조금씩 다른 환경이 생깁니다.

도커의 발상은 단순합니다. 환경을 설명하지 말고, 환경 자체를 파일 하나로 포장해서 건네주자. 받는 사람은 풀어서 실행만 하면 됩니다. 내 맥이든, 동료의 윈도우든, 회사 서버든 똑같이 돌아갑니다.

😵
문제
README를 보고 각자 설치 → 버전·OS 차이로 "내 컴퓨터에선 되는데?"가 반복된다.
📦
도커의 해법
코드 + 런타임 + 라이브러리 + 설정을 이미지 하나로 포장한다. 받는 사람은 포장을 풀어 실행만 한다.
🤝
결과
신규 팀원 온보딩이 docker compose up 한 줄. 개발·테스트·운영 환경이 같아진다.

2. 단어 다섯 개 — 밀키트로 이해하기

도커 용어는 요리에 빗대면 한 번에 정리됩니다.

Dockerfile은 레시피, 이미지는 밀키트, 컨테이너는 요리크게 보기

도커 용어요리 비유정확한 뜻관련 명령
Dockerfile레시피 카드이미지를 어떻게 만들지 적은 텍스트 파일. "파이썬 3.13 위에, 이 라이브러리를 깔고, 이 코드를 복사하라"docker build의 입력
이미지 (Image)밀봉된 밀키트실행에 필요한 모든 것이 담긴 읽기 전용 꾸러미. 바뀌지 않는다docker build, docker pull, docker images
컨테이너 (Container)밀키트로 만든 요리 한 접시이미지를 실행한 살아 있는 인스턴스. 같은 이미지로 여러 개를 만들 수 있다docker run, docker ps, docker stop
레지스트리 (Registry)밀키트 마트이미지를 올리고 내려받는 저장소. Docker Hub, GitHub Container Registry(ghcr.io) 등docker push, docker pull
볼륨 (Volume)냉장고컨테이너가 지워져도 남아야 하는 데이터를 보관하는 곳. DB 데이터, 업로드 파일docker run -v, docker volume

가장 중요한 구분은 이미지와 컨테이너입니다. 초보자가 겪는 혼란의 절반이 여기서 옵니다.

  • 이미지는 틀이고 컨테이너는 그 틀로 찍어낸 붕어빵입니다. 틀 하나로 붕어빵을 몇 개든 만들 수 있습니다.
  • 이미지는 읽기 전용입니다. 컨테이너 안에서 파일을 만들거나 고쳐도 이미지는 그대로입니다. 변경 사항은 그 컨테이너에만 있고, 컨테이너를 지우면 함께 사라집니다.
  • 그래서 "컨테이너 안에 들어가서 뭔가 설치했는데 다시 켜니까 없어졌어요"는 버그가 아니라 설계입니다. 영구히 남기고 싶은 설치는 Dockerfile에 적어야 하고, 남기고 싶은 데이터는 볼륨에 둬야 합니다.

아래 시뮬레이터에서 build와 run을 직접 눌러 보세요. run을 여러 번 누르면 이미지 하나에서 컨테이너가 여러 개 생기는 것을, stop과 rm이 어떻게 다른지를 볼 수 있습니다.

3. 두 개의 흐름 — build 흐름과 run 흐름

도커로 하는 일은 결국 두 갈래입니다. 만드는 흐름과 쓰는 흐름입니다.

📝 Dockerfile
레시피
→
docker build
→
📦 이미지
→
docker run
→
▶️ 컨테이너
📦 이미지
→
docker push
→
☁️ 레지스트리
→
docker pull
→
📦 동료의 이미지

재미있는 점은 대부분의 사람은 build를 거의 안 한다는 것입니다. PostgreSQL, Redis, nginx, Jupyter 같은 도구는 이미 누군가 만들어 Docker Hub에 올려 두었습니다. 우리는 docker run postgres:17 한 줄로 받아서 실행하면 됩니다. 설치 마법사도, 서비스 등록도, 삭제할 때 남는 찌꺼기도 없습니다. 그래서 이 시리즈도 run을 먼저(3편), build를 나중에(4편) 다룹니다.

💡
이미지 이름 읽는 법. postgres:17에서 콜론 앞은 이미지 이름, 뒤는 태그(보통 버전)입니다. 태그를 생략하면 latest가 붙습니다. ghcr.io/myteam/api:1.4.2처럼 앞에 주소가 붙으면 Docker Hub가 아닌 다른 레지스트리라는 뜻입니다. 협업할 때는 latest 대신 버전 태그를 명시하는 습관이 중요합니다 — "latest"는 오늘과 내일이 다를 수 있으니까요.

4. 가상머신과 뭐가 다른가

"환경을 통째로 들고 다닌다"는 말을 들으면 VirtualBox나 Parallels 같은 가상머신(VM)이 떠오릅니다. 비슷한 목적이지만 무게가 전혀 다릅니다.

비교가상머신 (VM)컨테이너
무엇을 담나운영체제 전체 (커널 포함)앱과 그 의존성만 (커널은 호스트 것을 빌려 씀)
크기수 GB ~ 수십 GB수십 MB ~ 수백 MB
시작 시간수십 초 ~ 분 (부팅)1초 안팎 (프로세스 시작)
동시에 몇 개노트북에서 2~3개가 한계수십 개도 가능
격리 수준강함 (완전히 다른 컴퓨터)프로세스 수준 격리 (충분히 강하지만 커널은 공유)

컨테이너가 가벼운 이유는 리눅스 커널을 공유하기 때문입니다. 컨테이너 속 "Ubuntu"는 사실 Ubuntu의 파일들(유저랜드)만 있고, 커널은 바깥 리눅스의 것을 씁니다. 자세한 원리는 베이스 이미지의 비밀에 정리했습니다.

5. 그런데 맥과 윈도우에는 리눅스 커널이 없다

여기서 중요한 사실 하나가 나옵니다. 도커 컨테이너는 리눅스 커널이 있어야 돕니다. 그런데 macOS와 Windows는 리눅스가 아닙니다. 그러면 맥에서는 어떻게 도커를 쓸까요?

답은 보이지 않는 작은 리눅스 VM입니다. 맥이나 윈도우용 도커 도구들은 모두 뒤에서 가벼운 리눅스 가상머신을 하나 띄우고, 그 안에서 도커 엔진을 돌립니다. 우리가 터미널에서 docker run을 치면 그 명령이 VM 안의 엔진으로 전달되는 구조입니다.

💻 macOS / Windows
터미널에서 docker 명령 입력
↓
🐧 작은 리눅스 VM
Docker Desktop · OrbStack · Rancher Desktop · Colima · WSL2가 대신 띄워 줌
↓
⚙️ 도커 엔진
📦 컨테이너들

그래서 맥·윈도우 사용자에게 "도커 설치"란 사실 "이 리눅스 VM을 누가, 얼마나 가볍게, 어떤 라이선스로 띄워 주느냐"를 고르는 일입니다. Docker Desktop이 가장 유명하지만 회사 규모에 따라 유료이고, OrbStack·Rancher Desktop·Colima·Podman Desktop 같은 대안이 있습니다. 이 선택이 2편의 주제입니다.

⚠️
"도커는 유료가 됐다"는 오해. 유료인 것은 Docker Desktop이라는 앱이고, 조건은 "직원 250명 이상 또는 연매출 1천만 달러 이상"인 조직입니다. 도커 엔진, docker 명령어, Compose, 그리고 Docker Hub의 공개 이미지는 모두 오픈소스(Apache 2.0)이거나 무료입니다. 앱만 다른 것을 쓰면 라이선스 걱정 없이 똑같이 쓸 수 있습니다.

6. 협업 관점에서 도커가 주는 것

이 시리즈의 최종 목표는 팀이 같은 환경에서 일하는 것입니다. 도커가 협업에 주는 이점을 정리하면 이렇습니다.

온보딩
새 팀원은 저장소를 받고 docker compose up 한 줄. 설치 문서가 필요 없다.
재현
"제 컴퓨터에선 되는데요"가 사라진다. 버그 리포트에 이미지 태그만 적으면 모두가 같은 환경에서 재현한다.
격리
프로젝트 A는 PostgreSQL 14, B는 17이어도 충돌하지 않는다. 내 컴퓨터를 더럽히지 않는다.
배포
개발자가 만든 이미지가 그대로 서버로 간다. 개발 환경과 운영 환경의 차이가 줄어든다.

7. 이 시리즈에서 배울 것

편주제끝나면 할 수 있는 것
1편개념 (이 글)이미지·컨테이너·레지스트리·볼륨을 구분해 설명할 수 있다
2편설치와 도구 선택라이선스 문제 없이 맥·윈도우에 도커를 설치하고, OrbStack·Rancher Desktop 등 도구를 고를 수 있다
3편docker run남이 만든 이미지(DB, 웹 서버, 주피터)를 포트·볼륨·환경변수와 함께 실행하고 정리할 수 있다
4편Dockerfile과 build내 앱을 이미지로 만들고, 빌드를 빠르게 하고, 맥(ARM)과 서버(x86)를 모두 지원할 수 있다
5편Compose와 협업앱+DB를 파일 하나로 묶어 팀원이 한 줄로 띄우게 하고, 이미지를 레지스트리로 공유할 수 있다

마치며 — 외울 것은 다섯 단어

🧠
1편 요약
· Dockerfile = 레시피, 이미지 = 밀봉된 밀키트(읽기 전용), 컨테이너 = 그걸로 만든 요리(실행 중인 인스턴스)
· 레지스트리 = 이미지를 주고받는 마트, 볼륨 = 컨테이너가 사라져도 남는 냉장고
· 만드는 흐름은 build, 쓰는 흐름은 run. 대부분은 남이 만든 이미지를 run만 한다
· 맥·윈도우에서는 도구가 작은 리눅스 VM을 대신 띄워 준다 — 어떤 도구를 고를지가 2편

다음 편에서는 실제로 도커를 설치합니다. Docker Desktop의 라이선스 조건을 정확히 짚고, OrbStack·Rancher Desktop·Colima·Podman Desktop·WSL2를 비교해 내 상황에 맞는 도구를 고르는 법을 알려 드립니다.

👉 2편: 맥·윈도우에 라이선스 걱정 없이 도커 설치하기


참고 자료