[Docker 완벽 가이드] 도커 입문부터 실전 배포까지 한방에 정리하기

아이디어코드·2026년 3월 11일

WebApp

목록 보기
3/3

개발자 필수 역량인 Docker(도커)의 기초 개념부터 설치, 명령어, Dockerfile 작성, 그리고 실전 배포 방법까지 완벽하게 정리했습니다. "내 컴퓨터에선 되는데?" 문제를 해결하고 싶다면 필독하세요.

들어가며: "내 컴퓨터에서는 되는데 왜 서버에서는 안 되지?"

개발자라면 누구나 한 번쯤 겪어봤을 상황입니다. 운영체제(OS)가 달라서, 설치된 라이브러리 버전이 달라서 발생하는 지긋지긋한 환경 설정 문제. 이 문제를 해결해 준 구세주가 바로 Docker(도커)입니다.

오늘은 백엔드, 프론트엔드, 데브옵스(DevOps)를 막론하고 개발자 채용 공고에 빠지지 않는 필수 스킬, Docker의 입문부터 배포까지의 모든 과정을 알기 쉽게 정리해 드립니다.

1. 도커(Docker)란 무엇인가?

도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

쉽게 말해, '소프트웨어를 담는 표준화된 컨테이너 박스'라고 생각하면 됩니다. 이 박스(컨테이너) 안에는 코드, 런타임, 시스템 도구, 라이브러리 등 애플리케이션 실행에 필요한 모든 것이 담겨 있습니다. 따라서 어느 컴퓨터로 옮기든 박스만 열면 똑같이 실행됩니다.

가상머신(VM) vs 도커(Container)

  • 가상머신(VM): OS 전체를 가상화하므로 무겁고 부팅이 느림.
  • 도커 컨테이너: OS 커널을 공유하고 애플리케이션만 격리하므로 가볍고 빠르며 효율적임.

2. 핵심 개념: 이미지(Image)와 컨테이너(Container)

도커를 이해하려면 딱 두 가지 개념만 잡으면 됩니다. 붕어빵 틀과 붕어빵에 비유해 볼까요?

  1. 도커 이미지 (Image) = 붕어빵 틀
  • 서비스 실행에 필요한 모든 설정(코드, 라이브러리 등)이 포함된 설계도입니다.
  • 불변(Immutable)의 상태를 가집니다.
  1. 도커 컨테이너 (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 (깃허브와 유사한 이미지 저장소)에 업로드합니다.

  • docker push 사용자명/이미지명:태그
  1. 서버 접속: AWS EC2 등 배포할 서버에 SSH로 접속합니다.
  2. 이미지 풀(Pull) & 실행: 서버에서 Docker Hub에 있는 이미지를 다운로드받아 실행합니다.
  • docker pull ...
  • docker run ...

Tip: 최근에는 Github Actions나 Jenkins 같은 CI/CD 도구를 사용하여 코드가 업데이트되면 이 배포 과정을 자동으로 수행하도록 구축합니다.


마치며: 도커는 선택이 아닌 필수

이제 도커는 단순한 트렌드가 아니라 현대 IT 인프라의 표준이 되었습니다.

  • 환경 일치: 개발, 테스트, 운영 환경을 통일
  • 유연한 확장: 트래픽이 몰릴 때 컨테이너만 늘리면 됨 (Scale-out)
  • MSA(마이크로서비스) 최적화: 서비스별로 독립된 컨테이너 운영

오늘 정리한 내용을 바탕으로 직접 간단한 웹 애플리케이션을 도커에 띄워보세요. 직접 타이핑해보는 것이 가장 빠른 학습 방법입니다.

profile
아이디어코드, HW부터 AI인사이트까지 끊기지 않는 파이프라인 개발

0개의 댓글