도커(Docker). 처음 들었을 땐 뭔가 거창하고, 어렵고, 클라우드 전문가들이나 다루는 기술처럼 느껴졌던 단어였다. 하지만 개발을 조금씩 해보면서, 특히 서버나 배포에 관여하게 되면 이 단어가 얼마나 자주 등장하는지 알게 된다. 그리고 결국엔 “나도 도커 좀 배워야 하나…”라는 생각을 하게 된다.
그 시작점에서 만난 책이 바로 『그림으로 개념 잡는 도커』였다. 이름처럼 개념부터 차근차근, 그것도 ‘그림’을 곁들여 설명해주는 책이다. 이 책을 읽고 도커의 진짜 역할과 필요성을 깨달을 수 있었고, 그 과정을 정리해본다.
개발자라면 누구나 한 번쯤은 이런 말을 해봤을 것이다. “어? 어제는 잘 됐는데?” 혹은 “내 컴퓨터에서는 잘 되는데요…” 문제는 보통 내 코드가 아니라 ‘환경’이었다. 운영체제가 다르거나, 라이브러리 버전이 다르거나, 경로 설정이 조금만 달라도 작동 방식은 확 달라진다. 그렇게 코드는 어느새 ‘그 환경에서만 돌아가는’ 무서운 존재가 되어버린다.
이런 문제를 해결하기 위해 등장한 것이 도커다. 도커는 내가 만든 프로그램과 그것이 잘 돌아가기 위한 모든 환경 요소들을 하나로 묶어 ‘도시락처럼 싸서’ 옮겨준다. 코드만이 아니라, 실행 환경, OS, 라이브러리, 설정 파일까지 전부 패키징해서 마치 어떤 컴퓨터에서든 “내 환경 그대로” 실행되게 만드는 마법 같은 기술이다.
도커에서 사용하는 '컨테이너(container)'라는 개념도 흥미롭다. 이는 실제 화물 운송에서 따온 말로, 동일한 규격의 컨테이너 박스를 트럭, 기차, 배 등 어떤 수단이든 실어 나를 수 있는 것처럼, 도커의 컨테이너는 어떤 시스템에서도 동일하게 작동할 수 있도록 설계된다. 안에 무엇이 들어 있든 상관없이, 외부에선 항상 같은 방식으로 다뤄지니까. 덕분에 운영체제, 언어, 설정이 달라도 똑같은 결과를 기대할 수 있다.
그럼 가상머신(VM)과는 뭐가 다를까? 둘 다 격리된 환경을 제공하지만, 가상머신은 운영체제 전체를 가상화하는 방식이라 무겁고 느리며, 많은 자원을 차지한다. 반면 도커는 운영체제를 공유하고, 필요한 부분만 컨테이너 단위로 가볍게 실행하므로 속도도 빠르고 리소스도 적게 든다. 클라우드나 마이크로서비스 아키텍처에 적합한 이유다.
하지만 도커는 처음 접하면 참 어렵게 느껴진다. 추상적인 개념에다 생소한 명령어, 이미지와 컨테이너의 관계, 터미널 작업… 익숙하지 않은 요소들이 많다. 이 책은 그런 초보자들을 위해 그림과 실습을 통해 쉽게 도커를 익히도록 돕는다.
책은 총 7부로 구성되어 있는데, 단계별로 도커를 자연스럽게 익히도록 짜여 있다. 1~4부에서는 도커가 왜 필요한지, 어떻게 설치하고 사용하는지, 명령어는 어떤 게 있는지를 알려주며 기본기를 다지고, 5~6부에서는 MySQL, Nginx, Python, PHP 등 다양한 컨테이너를 직접 실행하고 연결해보는 실습이 이어진다. 마지막 7부는 운영 환경에서 겪을 수 있는 문제 해결과 디버깅까지 다룬다. 입문, 실습, 실무 운영까지 하나로 이어지는 구조다.
개인적으로 가장 흥미로웠던 부분은 5~6부의 실습 파트였다. 특히 컨테이너 간 통신을 다루는 23장에서는 PHP 컨테이너와 MySQL 컨테이너를 연결하는 과정을 따라가며, 마치 진짜 서비스를 만드는 것처럼 느껴졌다. ‘container run --mount’ 옵션으로 호스트 파일을 마운트하고, ‘network create’로 컨테이너끼리 네트워크를 구성하는 과정은 도커의 실무적인 활용법을 보여줬다.
또한 도커 컴포즈(docker-compose)를 활용하는 28장도 매우 유용했다. 여러 개의 컨테이너를 각각 실행하고 관리하는 건 번거롭지만, YAML 파일 하나만 잘 작성하면 'docker-compose up' 한 줄로 모든 환경이 구성된다. 실무에서도 흔히 사용하는 방식이라 이 부분은 꼭 짚고 넘어갈 필요가 있다.
책이 좋은 이유는 여기에 그치지 않는다. 단순히 기능 설명에 그치는 게 아니라, 애플 실리콘에서 도커를 어떻게 쓰는지, 빌드할 때 어떤 파일을 제외해야 하는지, 디버깅은 어떻게 접근하는지를 끝까지 챙겨준다. 도커를 “설치하고 한두 개 실행해보는 수준”에서 멈추지 않고, 실제 배포와 운영 단계까지 가게끔 도와주는 구성이다.
명령어를 외우기 힘든 초보자를 위한 치트시트도 제공되는데, 책의 4.6장을 참고하면 도커에서 자주 쓰이는 명령어들을 한눈에 볼 수 있다. 실무에선 이걸 벽에 붙여두고 쓰고 싶을 정도다.
이 책을 다 읽고 나면 어떤 걸 할 수 있을까? 간단한 웹 서비스라면, Nginx, MySQL, 애플리케이션 서버(PHP나 Node.js 등)를 각각 컨테이너로 띄우고, 도커 컴포즈로 묶어 하나의 서비스처럼 실행하는 것이 가능하다. 개발-운영 환경을 통일하고, 버전 충돌 없이 협업할 수 있으며, 빠른 배포도 할 수 있다.
물론 초보자라면 모든 내용을 한 번에 완벽히 이해하긴 어렵다. 하지만 1~2부는 그림 위주로 가볍게 훑고, 5~6부 실습을 따라가며 익숙해지면 어느 순간 도커가 어렵지 않게 느껴질 것이다. 중요한 건 이 책이 단순 개념서가 아니라, 실습과 실무를 아우르는 ‘실전형 도커 입문서’라는 점이다.

도커를 처음 접하는 개발자라면 이 책 한 권으로 개념을 잡고, 실습을 통해 구조를 익히며, 마지막엔 운영까지 감을 잡을 수 있을 것이다. 개발과 배포가 분리된 환경에서, 컨테이너 기반의 배포 시스템이 당연시되는 시대에 이 정도 수준의 책은 반드시 한번 짚고 넘어가야 한다.
도커는 결국 ‘복잡한 걸 단순하게 해주는 기술’이다. 그런 도커를 단순하고, 명확하게 설명해주는 이 책은 초보자에게 가장 적절한 길잡이였다.