Docker설치 완벽 가이드: 초보자를 위한 단계별 설치 및 설정 방법

Docker설치 완벽 가이드: 초보자를 위한 단계별 Docker 설치 및 설정

개발 환경 구축에 어려움을 겪고 계신가요? 로컬 환경과 서버 환경의 차이로 인해 “내 컴퓨터에서는 잘 되는데” 문제를 경험해보셨을 것입니다. Docker는 이러한 문제를 해결해주는 혁신적인 컨테이너 기술입니다. 이 글에서는 Docker설치부터 기본 설정까지 초보자도 쉽게 따라할 수 있도록 단계별로 안내해드리겠습니다.

목차

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 이상

사전 설정 확인

시스템 요구사항 확인이 완료되었다면, 다음 단계를 진행합니다:

  1. 관리자 권한 확인: 설치 과정에서 관리자 권한이 필요합니다
  2. 네트워크 연결 확인: Docker 이미지 다운로드를 위해 안정적인 인터넷 연결이 필요합니다
  3. 백업 준비: 중요한 데이터는 사전에 백업해두시기 바랍니다

Windows에서 Docker설치하기

Windows에서 Docker설치는 Docker Desktop을 통해 진행합니다.

단계 1: Docker Desktop 다운로드

  1. Docker 공식 웹사이트(https://www.docker.com)에 접속합니다
  2. “Get Started” 버튼을 클릭합니다
  3. “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 설치

  1. 다운로드한 Docker Desktop Installer.exe 파일을 실행합니다
  2. 설치 마법사의 안내에 따라 진행합니다
  3. “Use WSL 2 instead of Hyper-V” 옵션을 선택합니다
  4. 설치가 완료되면 시스템을 재시작합니다

단계 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 다운로드

  1. Docker 공식 웹사이트에서 “Docker Desktop for Mac” 다운로드
  2. Apple Silicon Mac의 경우 “Mac with Apple chip” 버전 선택
  3. Intel Mac의 경우 “Mac with Intel chip” 버전 선택

단계 3: Docker Desktop 설치

  1. 다운로드한 Docker.dmg 파일을 더블클릭하여 마운트
  2. Docker 아이콘을 Applications 폴더로 드래그 앤 드롭
  3. Launchpad에서 Docker를 실행

단계 4: 초기 설정

Docker Desktop을 처음 실행하면 다음 설정을 진행합니다:

  1. 서비스 약관에 동의
  2. 계정 생성 또는 로그인 (선택사항)
  3. 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에서는 다음과 같이 리소스를 조정할 수 있습니다:

  1. Docker Desktop 설정 열기
  2. “Resources” 탭 선택
  3. CPU 코어 수 및 메모리 할당량 조정
  4. 디스크 이미지 크기 설정

권장 설정값: – 메모리: 시스템 메모리의 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를 설치하고 컨테이너 기반 개발의 세계로 첫 걸음을 내디뎌보세요!

위로 스크롤