Docker설치 완벽 가이드: 초보자를 위한 단계별 Docker 설치 및 설정
개발 환경 구축에 어려움을 겪고 계신가요? 로컬 환경과 서버 환경의 차이로 인해 “내 컴퓨터에서는 잘 되는데” 문제를 경험해보셨을 것입니다. Docker는 이러한 문제를 해결해주는 혁신적인 컨테이너 기술입니다. 이 글에서는 Docker설치부터 기본 설정까지 초보자도 쉽게 따라할 수 있도록 단계별로 안내해드리겠습니다.
목차
- Docker란 무엇인가
- Docker 설치 전 준비사항
- Windows에서 Docker설치하기
- macOS에서 Docker설치하기
- Linux에서 Docker설치하기
- Docker 설치 후 초기 설정
- Docker 사용법 기본 가이드
- 실전 예제로 배우는 Docker 활용
- Docker 트러블슈팅 가이드
- 자주 묻는 질문 (FAQ)
Docker란 무엇인가
Docker는 애플리케이션을 컨테이너 단위로 패키징하여 실행할 수 있게 해주는 플랫폼입니다. 가상머신과 달리 운영체제 커널을 공유하기 때문에 더 가볍고 빠른 실행이 가능합니다.
Docker의 주요 장점은 다음과 같습니다:
- 환경 일관성: 개발, 테스트, 운영 환경을 동일하게 유지
- 빠른 배포: 컨테이너 기반의 신속한 애플리케이션 배포
- 자원 효율성: 가상머신 대비 더 적은 시스템 자원 사용
- 확장성: 마이크로서비스 아키텍처 구현에 최적화
Docker의 핵심 구성요소
Docker를 이해하려면 다음 세 가지 핵심 요소를 알아야 합니다:
- 이미지(Image): 애플리케이션 실행에 필요한 모든 것을 포함한 템플릿
- 컨테이너(Container): 이미지를 기반으로 실행되는 인스턴스
- Dockerfile: 이미지를 생성하기 위한 명령어들을 포함한 파일
Docker 설치 전 준비사항
Docker설치를 시작하기 전에 다음 사항들을 확인해야 합니다.
시스템 요구사항
Windows 시스템: – Windows 10 64-bit: Pro, Enterprise, Education (Build 16299 이상) – WSL 2 기능 활성화 – 가상화 기술(Hyper-V) 지원 – 최소 4GB RAM (8GB 권장)
macOS 시스템: – macOS 10.14 이상 – 2010년 이후 Mac 하드웨어 모델 – 최소 4GB RAM (8GB 권장)
Linux 시스템: – 64-bit 아키텍처 – 커널 버전 3.10 이상 – iptables 1.4 이상 – Git 1.7 이상
사전 설정 확인
시스템 요구사항 확인이 완료되었다면, 다음 단계를 진행합니다:
- 관리자 권한 확인: 설치 과정에서 관리자 권한이 필요합니다
- 네트워크 연결 확인: Docker 이미지 다운로드를 위해 안정적인 인터넷 연결이 필요합니다
- 백업 준비: 중요한 데이터는 사전에 백업해두시기 바랍니다
Windows에서 Docker설치하기
Windows에서 Docker설치는 Docker Desktop을 통해 진행합니다.
단계 1: Docker Desktop 다운로드
- Docker 공식 웹사이트(https://www.docker.com)에 접속합니다
- “Get Started” 버튼을 클릭합니다
- “Docker Desktop for Windows” 버튼을 클릭하여 설치 파일을 다운로드합니다
단계 2: WSL 2 설치 및 설정
Windows에서 Docker를 사용하려면 WSL 2가 필요합니다:
# PowerShell을 관리자 권한으로 실행
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
시스템을 재시작한 후 다음 명령어를 실행합니다:
# WSL 2를 기본 버전으로 설정
wsl --set-default-version 2
단계 3: Docker Desktop 설치
- 다운로드한 Docker Desktop Installer.exe 파일을 실행합니다
- 설치 마법사의 안내에 따라 진행합니다
- “Use WSL 2 instead of Hyper-V” 옵션을 선택합니다
- 설치가 완료되면 시스템을 재시작합니다
단계 4: Docker 설치 확인
설치가 완료되면 다음 명령어로 Docker가 정상적으로 설치되었는지 확인합니다:
docker --version
docker run hello-world
macOS에서 Docker설치하기
macOS에서 Docker설치는 비교적 간단합니다.
단계 1: 시스템 호환성 확인
터미널을 열고 다음 명령어로 시스템 정보를 확인합니다:
sw_vers
system_profiler SPHardwareDataType | grep "Model Name"
단계 2: Docker Desktop 다운로드
- Docker 공식 웹사이트에서 “Docker Desktop for Mac” 다운로드
- Apple Silicon Mac의 경우 “Mac with Apple chip” 버전 선택
- Intel Mac의 경우 “Mac with Intel chip” 버전 선택
단계 3: Docker Desktop 설치
- 다운로드한 Docker.dmg 파일을 더블클릭하여 마운트
- Docker 아이콘을 Applications 폴더로 드래그 앤 드롭
- Launchpad에서 Docker를 실행
단계 4: 초기 설정
Docker Desktop을 처음 실행하면 다음 설정을 진행합니다:
- 서비스 약관에 동의
- 계정 생성 또는 로그인 (선택사항)
- Docker Desktop 대시보드에서 상태 확인
# 설치 확인
docker --version
docker-compose --version
Linux에서 Docker설치하기
Linux에서는 패키지 매니저를 통해 Docker를 설치할 수 있습니다. Ubuntu를 기준으로 설명하겠습니다.
단계 1: 시스템 업데이트
sudo apt update
sudo apt upgrade -y
단계 2: 의존성 패키지 설치
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
단계 3: Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
단계 4: Docker 리포지토리 추가
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
단계 5: Docker Engine 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
단계 6: Docker 서비스 시작 및 활성화
sudo systemctl start docker
sudo systemctl enable docker
단계 7: 사용자 권한 설정
sudo 없이 Docker 명령어를 사용하려면 사용자를 docker 그룹에 추가합니다:
sudo usermod -aG docker $USER
newgrp docker
Docker 설치 후 초기 설정
Docker설치가 완료되면 최적의 성능을 위해 초기 설정을 진행해야 합니다.
메모리 및 CPU 리소스 설정
Docker Desktop에서는 다음과 같이 리소스를 조정할 수 있습니다:
- Docker Desktop 설정 열기
- “Resources” 탭 선택
- CPU 코어 수 및 메모리 할당량 조정
- 디스크 이미지 크기 설정
권장 설정값: – 메모리: 시스템 메모리의 50-70% – CPU: 시스템 CPU 코어의 50-80% – 디스크: 최소 60GB 이상
Docker Hub 계정 연동
Docker Hub 계정을 연동하면 이미지 pull/push가 더 편리해집니다:
# Docker Hub 로그인
docker login
# 로그인 상태 확인
docker info | grep Username
Docker 데몬 설정
고급 사용자를 위한 daemon.json 파일 설정:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
Docker 사용법 기본 가이드
Docker설치가 완료되었다면 이제 기본적인 Docker 사용법을 익혀보겠습니다.
기본 명령어 익히기
이미지 관련 명령어:
# 이미지 검색
docker search nginx
# 이미지 다운로드
docker pull nginx:latest
# 로컬 이미지 목록 확인
docker images
# 이미지 삭제
docker rmi nginx:latest
컨테이너 관련 명령어:
# 컨테이너 실행
docker run -d -p 8080:80 nginx
# 실행 중인 컨테이너 확인
docker ps
# 모든 컨테이너 확인 (중지된 것 포함)
docker ps -a
# 컨테이너 중지
docker stop container_name
# 컨테이너 삭제
docker rm container_name
Docker 네트워킹 기본
Docker 컨테이너 간 통신을 위한 네트워크 설정:
# 네트워크 생성
docker network create my-network
# 네트워크 목록 확인
docker network ls
# 네트워크에 컨테이너 연결
docker run -d --name web --network my-network nginx
실전 예제로 배우는 Docker 활용
이론적인 설명보다는 실제 예제를 통해 Docker 활용법을 익혀보겠습니다.
예제 1: 간단한 웹 서버 구축
HTML 파일을 서빙하는 Nginx 웹 서버를 Docker로 구축해보겠습니다:
# HTML 파일이 있는 디렉토리 생성
mkdir my-website
cd my-website
echo "<h1>Docker로 구축한 웹사이트</h1>" > index.html
# 볼륨 마운트를 통해 웹 서버 실행
docker run -d -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
브라우저에서 http://localhost:8080에 접속하여 결과를 확인할 수 있습니다.
예제 2: 데이터베이스 컨테이너 실행
MySQL 데이터베이스를 Docker로 실행하는 예제입니다:
# MySQL 컨테이너 실행
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e MYSQL_DATABASE=testdb \
-p 3306:3306 \
mysql:8.0
# 컨테이너 접속하여 MySQL 사용
docker exec -it mysql-db mysql -u root -p
예제 3: Dockerfile을 사용한 커스텀 이미지 생성
Node.js 애플리케이션을 위한 Dockerfile 작성 예제:
# Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
이미지 빌드 및 실행:
# 이미지 빌드
docker build -t my-node-app .
# 컨테이너 실행
docker run -d -p 3000:3000 my-node-app
예제 4: Docker Compose를 이용한 멀티 컨테이너 애플리케이션
여러 서비스를 함께 실행하는 docker-compose.yml 파일:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=mysql://root:password@db:3306/myapp
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=myapp
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Docker Compose 실행:
# 서비스 시작
docker-compose up -d
# 서비스 중지
docker-compose down
Docker 트러블슈팅 가이드
Docker 사용 중 발생할 수 있는 일반적인 문제들과 해결 방법을 정리했습니다.
포트 충돌 문제
문제: “Port already in use” 오류 발생
해결 방법:
# 포트 사용 프로세스 확인
netstat -tulpn | grep :8080
# 다른 포트 사용
docker run -d -p 8081:80 nginx
이미지 다운로드 실패
문제: 네트워크 이슈로 이미지 pull 실패
해결 방법:
# Docker 데몬 재시작
sudo systemctl restart docker
# 미러 서버 사용 (국내 사용자의 경우)
docker pull registry.docker-cn.com/library/nginx
컨테이너 메모리 부족
문제: 컨테이너가 메모리 부족으로 종료됨
해결 방법:
# 메모리 제한 설정
docker run -d --memory="1g" nginx
# 시스템 리소스 모니터링
docker stats
볼륨 마운트 문제
문제: Windows에서 볼륨 마운트가 작동하지 않음
해결 방법:
1. Docker Desktop 설정에서 드라이브 공유 활성화
2. Windows 경로를 Linux 경로로 변환: /c/Users/ 형태로 사용
# Windows 경로 예제
docker run -v /c/Users/username/project:/app nginx
자주 묻는 질문 (FAQ)
Q: Docker와 가상머신의 차이점은 무엇인가요?
Docker는 운영체제 수준에서 가상화를 제공하며, 호스트 OS의 커널을 공유합니다. 반면 가상머신은 하드웨어 수준에서 가상화를 제공하여 각각 독립적인 OS를 실행합니다. 따라서 Docker가 더 가볍고 빠른 실행이 가능합니다.
Q: Docker설치 후 sudo 없이 명령어를 사용할 수 있나요?
Linux에서는 사용자를 docker 그룹에 추가하면 가능합니다:
sudo usermod -aG docker $USER
newgrp docker
로그아웃 후 다시 로그인하면 sudo 없이 docker 명령어를 사용할 수 있습니다.
Q: Docker 컨테이너의 데이터가 사라지는데 어떻게 보존할 수 있나요?
Docker 컨테이너는 기본적으로 stateless입니다. 데이터를 보존하려면 볼륨(Volume)이나 바인드 마운트를 사용해야 합니다:
# 볼륨 사용
docker run -v my-volume:/data nginx
# 바인드 마운트 사용
docker run -v /host/path:/container/path nginx
Q: Docker 이미지가 너무 커서 다운로드가 오래 걸립니다. 해결 방법이 있나요?
다음과 같은 방법들을 시도해보세요: 1. Alpine Linux 기반의 경량 이미지 사용 2. 멀티스테이지 빌드를 통한 이미지 크기 최적화 3. .dockerignore 파일을 사용하여 불필요한 파일 제외 4. 국내 미러 서버 사용
Q: Docker Compose와 Docker의 차이점은 무엇인가요?
Docker는 단일 컨테이너를 관리하는 도구이고, Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 도구입니다. YAML 파일을 통해 멀티 컨테이너 애플리케이션의 서비스, 네트워크, 볼륨을 한 번에 관리할 수 있습니다.
Q: Docker 컨테이너 간에 어떻게 통신할 수 있나요?
Docker 컨테이너 간 통신은 다음과 같은 방법이 있습니다: 1. 사용자 정의 네트워크 생성하여 컨테이너 연결 2. Docker Compose를 사용하여 동일 네트워크에 서비스 배치 3. 포트 매핑을 통한 호스트 네트워크 경유 통신
Q: 개발 환경에서 Docker 사용 시 주의사항은 무엇인가요?
개발 환경에서 Docker를 사용할 때는 다음 사항들을 주의해야 합니다: 1. 볼륨 마운트를 통한 소스 코드 실시간 반영 2. 개발용 환경 변수와 운영용 환경 변수 분리 3. 로그 레벨 조정을 통한 디버깅 편의성 확보 4. 개발 도구 (hot reload 등) 활성화
결론
이 글에서는 Docker설치부터 기본적인 Docker 사용법까지 초보자도 쉽게 따라할 수 있도록 단계별로 설명했습니다. Docker는 현대적인 소프트웨어 개발과 배포에 필수적인 도구가 되었으며, 컨테이너 기술을 통해 개발 환경의 일관성과 배포의 효율성을 크게 향상시킬 수 있습니다.
Docker 설정을 완료하셨다면 이제 실제 프로젝트에 적용해보세요. 처음에는 어려울 수 있지만, 꾸준한 실습을 통해 Docker의 강력함을 경험하실 수 있을 것입니다. 추가적인 고급 기능이나 심화 내용에 대해서는 Quiet Notes 블로그의 다른 Docker 관련 포스팅을 참고하시기 바랍니다.
지금 바로 Docker를 설치하고 컨테이너 기반 개발의 세계로 첫 걸음을 내디뎌보세요!