Docker 입문 가이드: 개발자를 위한 컨테이너 완벽 정복

Laptop with code and a small plush octopus.
Photo by Daniil Komov on Unsplash

개발 환경 때문에 며칠을 허비한 경험이 있으신가요? Docker를 익히면 “내 컴퓨터에서는 잘 됐는데”라는 말을 영원히 하지 않게 됩니다. 이 가이드를 따라하면 30분 안에 첫 Docker 컨테이너를 실행하고, 어떤 환경에서든 동일하게 작동하는 애플리케이션을 배포할 수 있습니다.

Docker를 마스터하면 개발 환경 구성 시간을 90% 단축하고, 배포 과정에서 발생하는 오류를 거의 제로로 만들 수 있습니다.

💡 완성 후 모습: 하나의 명령어로 데이터베이스, 웹서버, 애플리케이션이 한 번에 실행되는 개발 환경을 구축하게 됩니다.

Docker 시작 전 준비사항

Docker 학습을 위해 다음 사항들을 미리 준비해두세요:

  • Windows 10/11 Pro, macOS, 또는 Linux 운영체제
  • 최소 4GB RAM (8GB 권장)
  • 기본적인 터미널/명령 프롬프트 사용법
  • 텍스트 에디터 (VS Code 권장)
⚠️ 주의: Windows Home 에디션 사용자는 Docker Desktop 대신 Docker Toolbox를 설치해야 할 수 있습니다.

Step 1: Docker 설치하고 첫 실행하기

a laptop computer sitting on top of a wooden table
Photo by Berat Bozkurt on Unsplash

Docker 공식 웹사이트에서 운영체제에 맞는 Docker Desktop을 다운로드하세요. 설치 과정은 일반 프로그램과 동일하지만, 설치 후 시스템 재부팅이 필요합니다.

  1. docker.com에서 Docker Desktop 다운로드
  2. 관리자 권한으로 설치 실행
  3. 설치 완료 후 시스템 재부팅
  4. Docker Desktop 실행 및 로그인

설치가 완료되었는지 확인하려면 터미널을 열고 다음 명령어를 실행하세요:

docker --version
docker run hello-world

“Hello from Docker!” 메시지가 나타나면 설치가 성공적으로 완료된 것입니다.

Step 2: Docker 기본 개념과 첫 번째 컨테이너

Docker 이미지는 애플리케이션 실행에 필요한 모든 것을 패키지로 묶은 템플릿입니다. 컨테이너는 이 이미지를 실제로 실행한 인스턴스라고 생각하시면 됩니다.

간단한 웹서버 컨테이너를 실행해보겠습니다:

docker run -d -p 8080:80 --name my-nginx nginx

명령어 옵션 설명:

  • -d: 백그라운드에서 실행
  • -p 8080:80: 로컬 8080포트를 컨테이너 80포트와 연결
  • --name: 컨테이너에 이름 부여

브라우저에서 localhost:8080에 접속하면 Nginx 환영 페이지를 확인할 수 있습니다.

Step 3: Dockerfile로 커스텀 이미지 만들기

A laptop computer sitting on top of a wooden desk
Photo by Naman Rai on Unsplash

실제 개발에서는 자신만의 애플리케이션을 Docker 이미지로 만들어야 합니다. 간단한 Node.js 애플리케이션을 Docker화해보겠습니다.

먼저 프로젝트 폴더를 만들고 다음 파일들을 생성하세요:

1. package.json 파일

{
  "name": "docker-demo",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.0"
  },
  "scripts": {
    "start": "node app.js"
  }
}

2. app.js 파일

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello Docker World!');
});

app.listen(port, () => {
  console.log(`App running on port ${port}`);
});

3. Dockerfile 생성

FROM node:18-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 --name node-container my-node-app
💡 팁: 이미지 빌드 시간을 줄이려면 .dockerignore 파일을 만들어 불필요한 파일들을 제외하세요.

Step 4: Docker Compose로 멀티 컨테이너 환경 구성하기

실제 애플리케이션은 데이터베이스, 캐시, 웹서버 등 여러 서비스가 함께 동작합니다. Docker Compose를 사용하면 이런 복잡한 환경을 한 번에 관리할 수 있습니다.

프로젝트 루트에 docker-compose.yml 파일을 생성하세요:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - DB_HOST=db
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

다음 명령어로 전체 환경을 한 번에 실행할 수 있습니다:

docker-compose up -d

이제 웹 애플리케이션과 PostgreSQL 데이터베이스가 함께 실행되며, 네트워크를 통해 자동으로 연결됩니다.

실전 활용과 다음 단계

축하합니다! 이제 Docker의 핵심 개념을 모두 익혔습니다. 컨테이너화를 통해 개발 환경의 일관성을 확보하고, 배포 과정을 크게 단순화할 수 있게 되었습니다.

더 고급 기능을 학습하고 싶다면 다음 주제들을 추천합니다:

  • Docker 볼륨과 데이터 영속성 관리
  • Docker 네트워크 고급 설정
  • Kubernetes를 활용한 컨테이너 오케스트레이션
  • CI/CD 파이프라인에서의 Docker 활용
💡 마지막 정리: Docker는 한 번 익히면 개발 생산성을 비약적으로 향상시키는 필수 도구입니다. 꾸준한 실습을 통해 더욱 능숙한 개발자로 성장하세요.

Docker 학습 과정에서 어려움을 겪으셨거나, 추가로 궁금한 점이 있으시면 댓글로 남겨주세요. 함께 해결해나가며 더 나은 개발 환경을 만들어봅시다!

댓글 남기기