도커 사용법 초보자 완벽 가이드
- 도커 설치부터 hello-world 첫 실행까지 순서대로 따라할 수 있습니다
- 컨테이너·이미지 핵심 명령어를 표로 한눈에 정리했습니다
- Dockerfile로 나만의 이미지를 만드는 방법을 다룹니다
- 초보자가 자주 겪는 실수와 디스크 용량 문제 예방법을 안내합니다
도커란 무엇인가 — 가상머신과 어떻게 다를까

도커는 애플리케이션과 실행에 필요한 코드·라이브러리·설정을 하나의 격리된 실행 단위인 컨테이너로 묶어, 개발자의 노트북이든 회사 서버든 동일하게 실행되도록 해주는 오픈소스 플랫폼입니다. 초보자가 도커를 처음 배울 때 가장 많이 막히는 지점은 “설치는 했는데 그다음에 뭘 해야 할지 모르겠다”는 것인데, 이 글은 설치 → 첫 컨테이너 실행 → 핵심 명령어 → 나만의 이미지 만들기까지 실습 순서 그대로 정리했습니다.
컨테이너와 가상머신, 무엇이 다른가
가상머신(VM)은 하드웨어를 흉내 낸 가상의 컴퓨터 위에 운영체제 전체를 새로 올리기 때문에 부팅에 수십 초가 걸리고 용량도 수 GB 단위로 무겁습니다. 반면 컨테이너는 호스트 운영체제의 커널을 그대로 공유하고 애플리케이션 실행에 필요한 부분만 격리하기 때문에, 실행 속도가 초 단위로 빠르고 이미지 용량도 훨씬 가볍습니다. 대신 컨테이너는 리눅스 커널 기반 기술이라, 맥이나 윈도우에서는 내부적으로 경량 가상머신을 하나 띄우고 그 위에서 도커를 구동하는 방식으로 동작합니다.
도커를 배워야 하는 이유
“내 컴퓨터에서는 되는데 서버에서는 안 돼요”라는 문제는 개발 환경과 운영 환경의 설정 차이 때문에 발생합니다. 도커는 실행 환경 자체를 이미지로 고정해 배포하므로 이런 문제를 근본적으로 줄여줍니다. 또한 데이터베이스·캐시 서버 같은 프로그램을 로컬 PC에 직접 설치하지 않고 컨테이너로 띄웠다 지웠다 할 수 있어, 개발 환경을 깔끔하게 유지하기에도 유리합니다.
운영체제별 도커 설치 방법
도커는 운영체제에 따라 설치 방식이 다릅니다. 리눅스는 커널을 직접 사용하므로 도커 엔진만 설치하면 되고, 맥·윈도우는 Docker Desktop이라는 별도 애플리케이션을 설치합니다.
리눅스(우분투 · CentOS)에 설치하기
리눅스는 공식 자동 설치 스크립트를 이용하면 가장 간단합니다.
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
마지막 줄의 usermod 명령은 현재 계정을 docker 그룹에 추가해, 매번 sudo를 붙이지 않고도 도커 명령어를 실행할 수 있게 해줍니다. 적용하려면 로그아웃 후 다시 로그인하거나 서버를 재부팅해야 합니다.
macOS · Windows에 Docker Desktop 설치하기
- 도커 공식 홈페이지에서 운영체제에 맞는 Docker Desktop 설치 파일을 내려받습니다.
- macOS는 애플리케이션 폴더로 드래그, Windows는 설치 프로그램을 실행합니다.
- Windows는 설치 과정에서 WSL2(리눅스용 윈도우 서브시스템) 사용 여부를 묻는데, 안내에 따라 활성화하면 됩니다.
- 설치 후 Docker Desktop을 실행하고, 트레이 아이콘에 고래 모양 로고가 뜨면 정상 구동 중입니다.
Windows에서는 WSL2 기반으로 설치해야 리소스 사용이 가볍고 안정적입니다. 구버전 Hyper-V 방식은 속도가 느리고 일부 명령어 호환성 문제가 생길 수 있으니, 설치 마법사에서 WSL2 옵션을 반드시 확인하세요.
설치 확인과 첫 컨테이너 실행

버전 확인 명령어
설치가 끝나면 터미널(윈도우는 PowerShell)에서 아래 명령어로 클라이언트·서버 버전이 모두 출력되는지 확인합니다.
docker version
docker info
docker version이 Client 정보만 출력되고 Server 항목에서 오류가 난다면, 도커 데몬(백그라운드 서비스)이 아직 실행되지 않은 상태입니다. 리눅스는 sudo systemctl status docker로 상태를 확인하고, Desktop 버전은 앱이 완전히 켜졌는지 트레이 아이콘으로 확인하세요.
hello-world로 첫 컨테이너 실행하기
docker run hello-world
이 명령을 실행하면 도커는 ① 로컬에 hello-world 이미지가 있는지 확인하고 ② 없으면 Docker Hub(공개 이미지 저장소)에서 내려받은 뒤 ③ 컨테이너로 실행해 환영 메시지를 출력합니다. 화면에 “Hello from Docker!”라는 문구가 뜨면 설치와 실행 환경이 모두 정상입니다.
초보자가 꼭 알아야 할 핵심 명령어 정리
도커 명령어는 크게 이미지 관련과 컨테이너 관련으로 나뉩니다. 이미지는 실행 파일의 설계도, 컨테이너는 그 설계도를 실제로 띄운 실행 인스턴스라고 이해하면 됩니다.
| 명령어 | 기능 |
|---|---|
| docker pull <이미지> | Docker Hub에서 이미지 내려받기 |
| docker run <이미지> | 이미지를 컨테이너로 실행(없으면 자동 pull) |
| docker ps / docker ps -a | 실행 중 / 전체 컨테이너 목록 확인 |
| docker stop, docker start | 컨테이너 중지 / 재시작 |
| docker rm, docker rmi | 컨테이너 삭제 / 이미지 삭제 |
컨테이너 다루기
- docker run -d -p 8080:80 nginx — 백그라운드(-d)로 실행하고, 호스트 8080번 포트를 컨테이너 80번 포트에 연결(-p)합니다.
- docker exec -it <컨테이너명> bash — 실행 중인 컨테이너 내부로 접속해 셸 명령어를 실행합니다.
- docker logs <컨테이너명> — 컨테이너가 출력한 로그를 확인합니다.
이미지 다루기
- docker images — 로컬에 내려받은 이미지 목록을 확인합니다.
- docker rmi <이미지ID> — 더 이상 쓰지 않는 이미지를 삭제합니다.
- docker build -t <이름>:<태그> . — Dockerfile을 기반으로 나만의 이미지를 빌드합니다.
Dockerfile로 나만의 이미지 만들기

Dockerfile 기본 구조
Dockerfile은 이미지를 어떻게 만들지 순서대로 적어놓은 텍스트 파일입니다. 간단한 파이썬 웹 앱 예시입니다.
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
FROM은 베이스 이미지, WORKDIR은 컨테이너 내부 작업 폴더, COPY는 파일 복사, RUN은 빌드 시점에 실행할 명령, CMD는 컨테이너가 시작될 때 실행할 명령을 뜻합니다.
이미지 빌드와 컨테이너 실행
docker build -t myapp:1.0 .
docker run -d -p 8080:8080 myapp:1.0
빌드가 끝나면 docker images로 myapp:1.0 이미지가 생성됐는지 확인하고, 위 실행 명령으로 곧바로 컨테이너를 띄워 테스트할 수 있습니다.
볼륨과 네트워크로 데이터·통신 관리하기
볼륨으로 데이터 지키기
컨테이너를 삭제하면 그 안에 저장된 데이터도 함께 사라집니다. 데이터베이스처럼 데이터를 계속 보존해야 하는 경우 볼륨(volume)을 사용해 컨테이너 바깥, 즉 호스트에 데이터를 저장해야 합니다.
docker volume create mydata
docker run -d -v mydata:/var/lib/mysql mysql:8
이렇게 하면 컨테이너를 지웠다 새로 만들어도 mydata 볼륨에 저장된 내용은 그대로 남아 있습니다.
네트워크로 컨테이너 연결하기
여러 컨테이너(예: 웹 서버 + 데이터베이스)를 함께 운영할 때는 같은 도커 네트워크에 연결해 컨테이너 이름으로 서로 통신하게 할 수 있습니다.
docker network create myapp-net
docker run -d --network myapp-net --name db mysql:8
docker run -d --network myapp-net --name web myapp:1.0
이렇게 실행하면 web 컨테이너에서 db라는 이름으로 데이터베이스 컨테이너에 접속할 수 있습니다. 컨테이너가 여러 개로 늘어나면 매번 이렇게 개별 명령어를 실행하는 대신 docker compose로 설정 파일 하나에 정리해 관리하는 것이 일반적입니다.
초보자가 자주 하는 실수와 주의할 점

- 컨테이너를 실행만 하고 docker rm으로 정리하지 않아 멈춘 컨테이너가 계속 쌓이는 경우가 많습니다.
- 데이터베이스처럼 데이터를 보존해야 하는 컨테이너에 볼륨을 연결하지 않아, 컨테이너 삭제와 함께 데이터를 잃어버리는 실수가 잦습니다.
- 포트 매핑(-p 옵션)을 빠뜨려 컨테이너는 실행됐는데 브라우저로 접속이 안 되는 경우가 흔합니다.
- 불필요한 이미지·컨테이너·네트워크가 쌓여 디스크 용량을 계속 차지하는 것을 방치하는 경우도 많습니다.
사용하지 않는 컨테이너·이미지·네트워크가 쌓여 디스크가 가득 차면 docker system prune 명령으로 한 번에 정리할 수 있습니다. 단 이 명령은 되돌릴 수 없으므로, 실행 전에 docker ps -a와 docker images로 지워도 되는 항목인지 반드시 확인하세요.
참고로 시놀로지 나스 같은 홈서버 환경에서도 도커를 활용해 여러 서비스를 운영할 수 있는데, 관련 구축 방법은 시놀로지 나스 구축 방법 완벽 가이드에서 자세히 다뤘습니다.
자주 묻는 질문
Q. 도커와 가상머신 중 어떤 것부터 배워야 하나요?
애플리케이션 배포·개발 환경 통일이 목적이라면 도커부터 배우는 것이 실무에 더 빠르게 도움이 됩니다. 가상머신은 운영체제 자체를 통째로 다뤄야 하는 경우(다른 OS 커널이 필요한 경우 등)에 더 적합합니다.
Q. 윈도우에서 도커를 쓰려면 WSL2가 꼭 필요한가요?
필수는 아니지만 공식적으로 권장되는 방식입니다. WSL2 기반이 리소스 사용이 가볍고 리눅스 컨테이너와의 호환성도 더 좋아, Docker Desktop 설치 시 기본 옵션으로 안내됩니다.
Q. docker run과 docker start는 어떻게 다른가요?
docker run은 이미지를 기반으로 새 컨테이너를 만들어 실행하는 명령이고, docker start는 이미 만들어졌지만 멈춰 있는 기존 컨테이너를 다시 실행하는 명령입니다. 매번 run을 실행하면 컨테이너가 계속 새로 생성되니 주의해야 합니다.
Q. 컨테이너를 삭제하면 그 안의 데이터도 함께 사라지나요?
네, 볼륨을 따로 연결하지 않았다면 컨테이너 삭제와 함께 내부 데이터도 사라집니다. 데이터베이스 등 보존이 필요한 데이터는 반드시 볼륨을 마운트해서 운영해야 합니다.
Q. 도커 컴포즈(compose)는 초보자도 꼭 배워야 하나요?
컨테이너 하나만 다룬다면 당장은 필요 없지만, 웹 서버와 데이터베이스처럼 여러 컨테이너를 함께 운영하기 시작하면 compose로 설정을 파일 하나에 정리하는 것이 관리에 훨씬 편리합니다. 기본 명령어에 익숙해진 다음 단계로 배우는 것을 권장합니다.
