0. 들어가며
[BASIC #1]에서는 도커가 왜 필요한지, VM과 비교하며 개념을 살펴보았다. 이번 포스팅에서는 실제로 도커를 설치하고, 첫 번째 컨테이너를 실행해보겠다. 이론만 공부하면 지루하니까, 직접 명령어를 입력해보면서 도커의 강력함을 체험해보자.
1. 도커 설치하기
도커는 Windows, macOS, Linux 등 주요 운영체제를 모두 지원한다. 각 환경에 맞는 설치 방법을 알아보겠다.
1.1. Linux (Ubuntu)에 설치하기
가장 흔한 개발/서버 환경인 Ubuntu 기준으로 설명한다.
# 패키지 목록 업데이트
sudo apt-get update
# 도커 설치
sudo apt install -y docker.io
# 설치 확인 (버전 출력)
docker --version
설치가 완료되면 docker --version 명령어로 버전 정보를 확인할 수 있다.
1.2. macOS에 설치하기
macOS에서는 Docker Desktop for Mac을 설치하는 것이 가장 간편하다.
- Docker Hub에서 Docker Desktop for Mac 다운로드
- 다운로드한 .dmg 파일을 열고 Docker 아이콘을 Applications 폴더로 드래그
- Applications 폴더에서 Docker를 실행
- 상단 메뉴바에 고래 아이콘이 나타나면 설치 완료
1.3. Windows에 설치하기
Windows 10/11 Pro, Enterprise 버전은 WSL2 기반의 Docker Desktop for Windows를 사용할 수 있다.
- Docker Hub에서 Docker Desktop for Windows 다운로드
- 설치 파일 실행 (WSL2 기능 활성화 옵션 체크)
- 재부팅 후 Docker Desktop 실행
- 작업 표시줄에 고래 아이콘이 나타나면 설치 완료
2. 설치 확인: Hello World 컨테이너 실행하기
설치가 완료되었으면, 도커가 제대로 동작하는지 확인해보자. 도커의 "Hello World"는 다음과 같이 실행한다.
docker run hello-world
실행 결과:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:1408fec50309afee38f3535383f5b09419e6dc0925bc69891e79d84cc4cdcec6
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
이 메시지가 보이면 도커가 정상적으로 설치된 것이다.
2.1. 이 명령어에서 무슨 일이 일어났을까?
docker run hello-world 한 줄로 다음과 같은 일들이 자동으로 일어난다.
- 로컬에 hello-world 이미지가 있는지 확인한다.
- 없으면 Docker Hub라는 중앙 저장소에서 자동으로 다운로드(pull)한다.
- 다운로드한 이미지로 컨테이너를 생성하고 실행한다.
- 컨테이너가 실행되면서 "Hello from Docker!" 메시지를 출력한다.
- 컨테이너가 작업을 마치고 종료된다.
이것이 도커의 강력함이다. 사용자는 단순히 docker run 명령어만 입력하면, 필요한 이미지를 자동으로 받아서 실행까지 해준다.
3. 도커 기본 명령어 실습
이제 도커의 기본 명령어들을 하나씩 실습해보자.
3.1. 이미지 관련 명령어
로컬에 저장된 이미지 목록 확인하기
docker images
방금 hello-world를 실행했으므로, 출력 결과에 hello-world 이미지가 보일 것이다.
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
이미지 다운로드 받기 (pull)
docker run은 이미지가 없으면 자동으로 pull까지 해주지만, 명시적으로만 이미지를 받을 수도 있다.
# nginx 이미지 다운로드
docker pull nginx
# 특정 버전(tag) 지정해서 다운로드
docker pull ubuntu:20.04
이미지 삭제하기
# 이미지 ID 또는 이름으로 삭제
docker rmi hello-world
# 또는
docker rmi feb5d9fea6a5
3.2. 컨테이너 관련 명령어
컨테이너 실행하기 (run)
# nginx 컨테이너 실행 (백그라운드 모드)
docker run -d --name my-nginx nginx
# 실행 중인 컨테이너 확인
docker ps
- d: 백그라운드(Detached) 모드로 실행
- -name: 컨테이너에 이름 지정
컨테이너 목록 확인하기
# 실행 중인 컨테이너만 확인
docker ps
# 종료된 컨테이너 포함 모든 컨테이너 확인
docker ps -a
컨테이너 중지하기
docker stop my-nginx
컨테이너 삭제하기
# 중지된 컨테이너 삭제
docker rm my-nginx
# 실행 중인 컨테이너 강제 삭제
docker rm -f my-nginx
3.3. 포트 매핑 실습: nginx 웹서버 실행하기
이번에는 실제로 웹브라우저에서 접속할 수 있는 nginx 컨테이너를 실행해보자.
docker run -d -p 8080:80 --name my-nginx nginx
- p 8080:80: 호스트의 8080 포트를 컨테이너의 80 포트와 연결한다.
실행 후 웹브라우저를 열고 http://localhost:8080에 접속해보자. "Welcome to nginx!" 페이지가 보이면 성공이다.
https://via.placeholder.com/800x400?text=Welcome+to+nginx
컨테이너 로그 확인하기
docker logs my-nginx
접속 로그가 실시간으로 보일 것이다.
4. 실전: 대화형 컨테이너 실행하기
때로는 컨테이너 내부에 직접 접속해서 명령어를 실행해야 할 때가 있다.
4.1. Ubuntu 컨테이너에 접속하기
docker run -it ubuntu bash
- it: Interactive + TTY 모드. 컨테이너 내부의 쉘과 상호작용할 수 있게 해준다.
- ubuntu: Ubuntu 이미지
- bash: 컨테이너 내부에서 실행할 명령어 (bash 쉘 실행)
실행하면 프롬프트가 root@컨테이너ID:/# 형태로 바뀐다. 이제 컨테이너 내부에 있는 것이다.
# 현재 디렉토리 확인
pwd
# 파일 목록 확인
ls -l
# Ubuntu 버전 확인
cat /etc/os-release
# 컨테이너 내부에서 나오기
exit
exit 명령어로 컨테이너에서 나오면 컨테이너는 종료된다.
4.2. 종료된 컨테이너 다시 시작하기
# 모든 컨테이너 확인 (종료된 것 포함)
docker ps -a
# 종료된 컨테이너 시작
docker start <컨테이너ID 또는 이름>
# 실행 중인 컨테이너에 다시 접속
docker exec -it <컨테이너ID 또는 이름> bash
5. 명령어 요약 및 정리
5.1. 이미지 명령어
| 명령어 | 설명 |
| docker images | 로컬 이미지 목록 확인 |
| docker pull [이미지] | 이미지 다운로드 |
| docker rmi [이미지] | 이미지 삭제 |
| docker build -t [이름] . | Dockerfile로 이미지 생성 |
5.2. 컨테이너 명령어
| 명령어 | 설명 |
| docker ps | 실행 중인 컨테이너 목록 |
| docker ps -a | 모든 컨테이너 목록 |
| docker run [이미지] | 새 컨테이너 생성 및 실행 |
| docker start [컨테이너] | 중지된 컨테이너 시작 |
| docker stop [컨테이너] | 실행 중인 컨테이너 중지 |
| docker rm [컨테이너] | 컨테이너 삭제 |
| docker exec -it [컨테이너] bash | 실행 중인 컨테이너 내부 접속 |
| docker logs [컨테이너] | 컨테이너 로그 확인 |
5.3. 자주 사용하는 run 옵션
| 옵션 | 설명 |
| -d | 백그라운드 실행 |
| -it | 인터랙티브 모드 (bash 접속용) |
| --name [이름] | 컨테이너 이름 지정 |
| -p [호스트]:[컨테이너] | 포트 매핑 |
| -v [호스트]:[컨테이너] | 볼륨 마운트 |
| --rm | 컨테이너 종료 시 자동 삭제 |
6. 마치며
이번 포스팅에서는 도커를 설치하고, 기본 명령어들을 실습해보았다.
- docker run hello-world로 첫 컨테이너 실행
- docker pull로 이미지 다운로드
- docker ps로 컨테이너 상태 확인
- docker run -p로 nginx 웹서버 실행
- docker exec -it로 컨테이너 내부 접속
이제 도커의 기본적인 사용법을 익혔다. 다음 포스팅에서는 도커의 가장 핵심 개념인 이미지와 컨테이너를 더 깊이 있게 이해해보겠다.
'Docker' 카테고리의 다른 글
| [BASIC #6] 컨테이너 간 통신: Docker Network 이해하기 (0) | 2025.06.01 |
|---|---|
| [BASIC #5] 데이터를 영구적으로 저장하는 법: Docker Volume (0) | 2025.05.31 |
| [BASIC #4] 나만의 이미지 만들기: Dockerfile 완전 정복 (0) | 2025.05.31 |
| [BASIC #3] 밀키트 비유로 완벽 이해하는 도커 이미지와 컨테이너 (0) | 2025.05.31 |
| [BASIC #1] VM과 비교하며 이해하는 도커(Docker)의 개념과 등장 배경 (0) | 2025.05.31 |
