개발 환경 때문에 며칠을 허비한 경험이 있으신가요? Docker를 익히면 “내 컴퓨터에서는 잘 됐는데”라는 말을 영원히 하지 않게 됩니다. 이 가이드를 따라하면 30분 안에 첫 Docker 컨테이너를 실행하고, 어떤 환경에서든 동일하게 작동하는 애플리케이션을 배포할 수 있습니다.
Docker를 마스터하면 개발 환경 구성 시간을 90% 단축하고, 배포 과정에서 발생하는 오류를 거의 제로로 만들 수 있습니다.
Docker 시작 전 준비사항
Docker 학습을 위해 다음 사항들을 미리 준비해두세요:
- Windows 10/11 Pro, macOS, 또는 Linux 운영체제
- 최소 4GB RAM (8GB 권장)
- 기본적인 터미널/명령 프롬프트 사용법
- 텍스트 에디터 (VS Code 권장)
Step 1: Docker 설치하고 첫 실행하기
Docker 공식 웹사이트에서 운영체제에 맞는 Docker Desktop을 다운로드하세요. 설치 과정은 일반 프로그램과 동일하지만, 설치 후 시스템 재부팅이 필요합니다.
- docker.com에서 Docker Desktop 다운로드
- 관리자 권한으로 설치 실행
- 설치 완료 후 시스템 재부팅
- 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로 커스텀 이미지 만들기
실제 개발에서는 자신만의 애플리케이션을 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
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 학습 과정에서 어려움을 겪으셨거나, 추가로 궁금한 점이 있으시면 댓글로 남겨주세요. 함께 해결해나가며 더 나은 개발 환경을 만들어봅시다!
댓글 남기기