개발자 필수 역량인 Docker(도커)의 기초 개념부터 설치, 명령어, Dockerfile 작성, 그리고 실전 배포 방법까지 완벽하게 정리했습니다. "내 컴퓨터에선 되는데?" 문제를 해결하고 싶다면 필독하세요.
들어가며: "내 컴퓨터에서는 되는데 왜 서버에서는 안 되지?"
개발자라면 누구나 한 번쯤 겪어봤을 상황입니다. 운영체제(OS)가 달라서, 설치된 라이브러리 버전이 달라서 발생하는 지긋지긋한 환경 설정 문제. 이 문제를 해결해 준 구세주가 바로 Docker(도커)입니다.
오늘은 백엔드, 프론트엔드, 데브옵스(DevOps)를 막론하고 개발자 채용 공고에 빠지지 않는 필수 스킬, Docker의 입문부터 배포까지의 모든 과정을 알기 쉽게 정리해 드립니다.

1. 도커(Docker)란 무엇인가?
도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
쉽게 말해, '소프트웨어를 담는 표준화된 컨테이너 박스'라고 생각하면 됩니다. 이 박스(컨테이너) 안에는 코드, 런타임, 시스템 도구, 라이브러리 등 애플리케이션 실행에 필요한 모든 것이 담겨 있습니다. 따라서 어느 컴퓨터로 옮기든 박스만 열면 똑같이 실행됩니다.
가상머신(VM) vs 도커(Container)
2. 핵심 개념: 이미지(Image)와 컨테이너(Container)
도커를 이해하려면 딱 두 가지 개념만 잡으면 됩니다. 붕어빵 틀과 붕어빵에 비유해 볼까요?

3. 도커 설치 및 필수 명령어 5가지
Docker Desktop(Windows/Mac)을 공식 홈페이지에서 다운로드하여 설치한 후, 터미널에서 다음 명령어들을 실습해 보세요.
1) 이미지 다운로드 (Pull)
docker pull node:14
#nodejs 14버전 이미지를 가져옵니다.
2) 컨테이너 실행 (Run)
docker run -d -p 8080:80 --name my-web nginx
#nginx 이미지를 백그라운드(-d)로 실행하며, 로컬 8080포트와 컨테이너 80포트를 연결합니다.
3) 실행 중인 컨테이너 확인 (PS)
docker ps
#현재 돌아가고 있는 컨테이너 리스트를 보여줍니다. (-a 옵션을 주면 꺼진 것도 보임)
4) 컨테이너 중지 및 삭제 (Stop & Rm)
docker stop my-web # 중지
docker rm my-web # 삭제
5) 이미지 삭제 (Rmi)
docker rmi nginx
4. 실전: Dockerfile로 나만의 이미지 만들기
남이 만든 이미지를 쓰는 것을 넘어, 내 프로젝트를 이미지로 만들어 봅시다. 프로젝트 루트 경로에 Dockerfile이라는 이름의 파일을 만듭니다. (확장자 없음)
예시: Node.js 애플리케이션 Dockerfile
#1. 베이스 이미지 선택 (Node.js 16버전)
FROM node:16
#2. 작업 디렉토리 설정
WORKDIR /app
#3. 의존성 파일 복사 및 설치
COPY package*.json ./
RUN npm install
#4. 소스 코드 복사
COPY . .
#5. 컨테이너 시작 시 실행할 명령어
CMD ["npm", "start"]
이미지 빌드 명령어:
docker build -t my-app:v1 .
#현재 경로(.)에 있는 Dockerfile을 이용해 'my-app'이라는 이름의 v1 태그 이미지를 생성

5. 복잡한 설정을 한 번에: Docker Compose
웹 서버, 데이터베이스(DB), 캐시 서버 등을 한 번에 띄워야 한다면? docker run 명령어를 여러 번 치는 것은 비효율적입니다. 이때 Docker Compose를 사용합니다.
docker-compose.yml 파일을 작성하여 여러 컨테이너를 정의하고 실행합니다.
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
실행 명령어:
docker-compose up -d
명령어 한 줄로 웹 서버와 DB가 동시에 실행되고 서로 네트워크로 연결됩니다.
6. 도커 배포(Deployment) 프로세스
로컬에서 잘 돌아가는 것을 확인했다면, 이제 실제 서버(AWS EC2 등)에 배포할 차례입니다. 기본적인 흐름은 다음과 같습니다.
1. 이미지 빌드: 로컬에서 docker build로 이미지를 생성합니다.
2. 이미지 푸시(Push): 생성된 이미지를 Docker Hub (깃허브와 유사한 이미지 저장소)에 업로드합니다.
Tip: 최근에는 Github Actions나 Jenkins 같은 CI/CD 도구를 사용하여 코드가 업데이트되면 이 배포 과정을 자동으로 수행하도록 구축합니다.

마치며: 도커는 선택이 아닌 필수
이제 도커는 단순한 트렌드가 아니라 현대 IT 인프라의 표준이 되었습니다.
오늘 정리한 내용을 바탕으로 직접 간단한 웹 애플리케이션을 도커에 띄워보세요. 직접 타이핑해보는 것이 가장 빠른 학습 방법입니다.