내 컴퓨터에서는 잘 되는데? 개발자를 위한 도커(Docker) 이야기
안녕하세요! 개발자 여러분, 그리고 개발을 꿈꾸는 모든 분들! 혹시 이런 경험 없으신가요?
'분명 내 컴퓨터에서는 잘 돌아가는데, 다른 팀원 컴퓨터나 서버에 올리니 오류가 난다...'
이런 상황에 맞닥뜨리면 정말 당황스럽죠. 밤샘 작업으로 겨우 버그를 잡았는데, 환경 문제라니! 오늘은 이런 골치 아픈 문제를 깔끔하게 해결해 줄 마법 같은 도구, 바로 도커(Docker)에 대해 이야기해 보려고 합니다.
도커, 대체 넌 누구니? (도커를 피크닉 도시락에 비유하기)
도커를 이해하기 쉽게 비유하자면, 마치 나만의 특별한 '피크닉 도시락'과 같아요. 🧺
이 도시락 안에는 맛있는 음식(애플리케이션 코드)뿐만 아니라, 젓가락, 숟가락, 물컵 등 음식(코드)을 먹는 데 필요한 모든 도구(라이브러리, 런타임 등)가 완벽하게 담겨있죠. 덕분에 우리는 어디든 이 도시락만 들고 가면 장소나 환경에 구애받지 않고 언제든 맛있게 식사를 즐길 수 있습니다.

도커도 이와 비슷해요. 내가 만든 애플리케이션 코드는 물론이고, 그 코드가 실행되는 데 필요한 모든 환경, 예를 들어 특정 버전의 Node.js, Python, 혹은 각종 라이브러리까지 하나의 완벽한 패키지로 만들어 줍니다. 이 패키지를 컨테이너(Container)라고 부르죠.
이렇게 만들어진 컨테이너는 어떤 컴퓨터에서든 똑같이 작동합니다. 내 컴퓨터에서, 팀원 컴퓨터에서, 심지어 실제 서비스를 위한 서버에서도 말이죠!
왜 도커를 써야 할까? (도커의 핵심 장점 3가지)
도커를 사용하면 '내 컴퓨터에서는 잘 되는데' 같은 환경 문제를 미리 방지할 수 있습니다. 이는 개발의 효율성과 안정성을 크게 높여주죠.
1. 개발 환경과 배포 환경을 똑같이!
앞서 말했듯, 도커는 애플리케이션과 실행 환경을 하나로 묶어줍니다. 덕분에 개발자가 코드를 작성하고 테스트한 환경과, 실제 서비스가 이루어지는 배포(Production) 환경을 완벽하게 동일하게 유지할 수 있어요. 테스트한 그대로 작동함을 보장하기 때문에 예상치 못한 버그를 크게 줄일 수 있습니다.
2. 팀원들과의 쉬운 협업
새로운 팀원이 합류하거나, 기존 팀원과 프로젝트를 공유할 때 도커 컨테이너를 전달해 주기만 하면 됩니다. 복잡한 설치 과정이나 환경 설정 없이, 모든 팀원이 정확히 동일한 환경에서 작업할 수 있어 협업의 효율성을 극대화합니다. 더 이상 "제 컴퓨터에서는 되는데요?"라는 말은 들을 필요가 없게 되는 거죠!
3. 프로젝트 간 충돌 문제 해결
여러 프로젝트를 동시에 진행하다 보면, A 프로젝트에서 필요한 도구 버전이 B 프로젝트와 충돌하는 경우가 종종 발생합니다. 도커를 사용하면 각 프로젝트에 필요한 환경을 컨테이너별로 분리해 관리할 수 있습니다. 마치 각기 다른 재료를 담아 놓는 칸막이 도시락처럼 말이죠. 덕분에 충돌 없이 깔끔하게 여러 프로젝트를 오갈 수 있습니다.
도커의 핵심 개념: 컨테이너와 이미지
도커를 제대로 이해하려면 두 가지 중요한 개념을 알아야 합니다. 바로 도커 이미지(Image)와 도커 컨테이너(Container)입니다.
도커 이미지 (Docker Image)
도커 이미지는 컨테이너를 만들기 위한 '설계도' 혹은 '템플릿'이라고 생각하면 이해하기 쉽습니다.
이 설계도 안에는 애플리케이션 코드, 필요한 라이브러리, 런타임(예: Node.js, Python), 그리고 환경 설정 등 코드를 실행하는 데 필요한 모든 요소가 담겨 있어요. 도커 이미지 자체는 실행되지 않고, 컨테이너를 만드는 데 사용되는 정적인 파일입니다.
도커 컨테이너 (Docker Container)
도커 컨테이너는 이미지라는 설계도를 바탕으로 만들어진 '실행 가능한 독립적인 소프트웨어 패키지'입니다.
하나의 이미지로 여러 개의 컨테이너를 만들 수 있습니다. 우리가 docker run 명령어를 실행하면, 바로 이 이미지를 바탕으로 새로운 컨테이너가 만들어져 코드가 실행되는 거죠.
도커 사용법: 이미지 실행해 보기!
자, 이제 직접 도커를 사용해 보며 위 개념들을 더 깊이 이해해 봅시다. 아래의 실습하기 전에 먼저 공식 홈페이지에 가서 도커를 설치해야 합니다. 프로젝트를 만들기 이전에 공식 홈페이지에서 제공하는 이미지로 간단하게 도커를 이해해봅시다.
1. 도커 이미지 다운로드 및 실행하기
가장 기본적인 명령어인 docker run을 사용해 볼까요?
docker run node
이 명령어를 입력하면 도커는 먼저 내 컴퓨터에 node 이미지가 있는지 확인합니다. 만약 없다면, 인터넷에 있는 도커 허브(Docker Hub)에서 자동으로 해당 이미지를 다운로드(pull)합니다. 이미지가 다운로드되면, 그 이미지를 기반으로 새로운 컨테이너를 만들고, 컨테이너 안에서 Node.js를 실행시키죠.

하지만 이 명령어를 입력하고 나면, 겉보기에는 아무 일도 일어나지 않는 것처럼 보일 거예요. 왜냐하면 컨테이너는 기본적으로 주변 환경과 고립된 채 실행되기 때문입니다. node 이미지 안에는 노드 명령어를 입력할 수 있는 '대화형 셸'이 있지만, 이 셸이 자동으로 외부에 노출되지는 않죠.
2. 컨테이너와 상호작용하기
컨테이너 안의 셸과 소통하려면 추가적인 옵션을 주어야 합니다. 바로 -it 플래그인데요, 이는 Interactive(상호작용)와 TTY(터미널)의 약자입니다.
docker run -it node
이 명령어를 입력하면 드디어! 컨테이너 안에서 실행되고 있는 Node.js의 터미널에 접속하게 됩니다.
Welcome to Node.js v24.5.0.
Type ".help" for more information.
> 1+1
2
여기서 중요한 것은, 지금 우리가 사용하고 있는 Node.js는 내 컴퓨터에 설치된 Node.js가 아니라, 도커 컨테이너 안에서 실행되고 있는 Node.js라는 점입니다.
이를 확인하려면 Ctrl + C를 눌러 컨테이너에서 나온 후, 내 컴퓨터 터미널에서 node -v를 입력해 보세요. 아마 방금 컨테이너 안에서 확인한 버전과 다른 버전이 나올 겁니다. 이것이 바로 도커가 환경을 격리하여 관리한다는 가장 좋은 증거죠!
3. 실행 중인 컨테이너 확인하기
컨테이너를 실행했다가 종료하면 어떻게 될까요? docker ps -a 명령어를 입력하면 그 결과를 확인할 수 있습니다. ps는 프로세스, a는 all의 약자입니다.
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc421891856d node "docker-entrypoint.s…" 9 minutes ago Exited (0) 4 minutes ago condescending_kowalevski
b34177e619c9 node "docker-entrypoint.s…" 34 minutes ago Exited (0) 34 minutes ago gracious_easley
보시면, node 이미지를 기반으로 만들어진 두 개의 컨테이너가 보일 거예요. 이처럼 하나의 이미지로 여러 개의 컨테이너를 만들 수 있습니다. 이 컨테이너들은 모두 종료된 상태(Exited)이지만, 이전에 실행되었던 기록은 남아있습니다.
마무리하며
오늘은 도커가 무엇인지, 왜 필요한지, 그리고 가장 기본적인 사용법을 간단히 알아봤습니다. 복잡해 보이는 도커도 사실은 "내 코드가 어디서든 똑같이 작동하게 해주는 마법의 도시락"이라는 비유로 생각하면 훨씬 이해하기 쉽죠.
도커는 단순히 개발 환경을 통일하는 것을 넘어, 현대 소프트웨어 개발에서 없어서는 안 될 필수적인 도구입니다. 이 글이 도커의 첫걸음을 떼는 데 조금이나마 도움이 되었기를 바랍니다! 다음에는 더 재미있는 도커의 기능들을 소개해 드릴게요. 궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 😊
'DevOps' 카테고리의 다른 글
| [Docker 6편] 컨테이너의 다양한 모드와 상호작용하기 🐳 (1) | 2025.08.19 |
|---|---|
| [Docker 5편] 컨테이너와 이미지 관리 명령어 모음 🐳 (2) | 2025.08.18 |
| [Docker 4편] 🐳 도커, 넌 대체 어떻게 빌드되는 거야? 이미지 레이어! (2) | 2025.08.18 |
| [Docker 3편] DockerFile로 도커 이미지 만들고 컨테이너 실행하기 (2) | 2025.08.17 |
| [Docker 2편] Dockerfile 작성해보기 (2) | 2025.08.16 |