개발공부/CS

Docker란?

카슈밀 2025. 2. 15. 23:53
반응형

📌 Docker란? 🐳

 

**Docker(도커)**는 애플리케이션을 컨테이너(Container)로 패키징하여 실행할 수 있는 가상화 플랫폼.

쉽게 말해, 어떤 환경에서도 동일하게 실행될 수 있도록 애플리케이션과 그 실행 환경을 한 번에 묶어 배포하는 도구야! 🚀

 

📌 Docker의 핵심 개념

 

✅ 1. 컨테이너(Container)

애플리케이션과 실행 환경(라이브러리, 설정 파일 등)을 격리된 공간에서 실행할 수 있도록 만든 것.

컨테이너 덕분에 OS와 상관없이 동일한 환경을 유지하면서 실행 가능!

 

✅ 2. 이미지(Image)

컨테이너를 실행하기 위한 설정 파일 및 애플리케이션 코드가 포함된 패키지

이미지를 기반으로 컨테이너를 생성함.

예: nginx:latest, mysql:8.0, node:18

 

✅ 3. Dockerfile

이미지를 생성하기 위한 스크립트 파일

여기서 어떤 OS를 사용할지, 어떤 패키지를 설치할지, 어떤 명령을 실행할지 정의함.

 

✅ 4. Docker Hub

이미지 저장소로, 공식 및 사용자 정의 Docker 이미지를 저장하고 공유할 수 있음.

예: docker pull nginx 하면 nginx 공식 이미지를 가져옴.

 

📌 Docker vs. 가상 머신(VM) 차이점

 

비교 항목 Docker(컨테이너) 가상 머신(VM)

실행 속도 빠름 느림

용량 가벼움(수 MB~GB) 무거움(수 GB~수십 GB)

성능 거의 네이티브 성능 성능 저하 발생

실행 방식 OS 커널 공유 OS별로 별도 커널 사용

배포 빠르고 쉬움 상대적으로 복잡

 

📌 Docker는 가볍고 빠르며, 여러 환경에서도 일관된 실행 환경을 보장할 수 있음!

 

📌 Docker 기본 명령어

 

# 1️⃣ Docker 설치 확인

docker --version

 

# 2️⃣ Docker 이미지 다운로드 (ex. Nginx 웹 서버)

docker pull nginx

 

# 3️⃣ 컨테이너 실행 (nginx 실행 후 80번 포트 매핑)

docker run -d -p 8080:80 nginx

 

# 4️⃣ 실행 중인 컨테이너 확인

docker ps

 

# 5️⃣ 실행 중인 컨테이너 정지

docker stop [컨테이너 ID]

 

# 6️⃣ 컨테이너 삭제

docker rm [컨테이너 ID]

 

# 7️⃣ Docker 컨테이너 로그 확인

docker logs [컨테이너 ID]

 

📌 docker run -d -p 8080:80 nginx 실행 후 localhost:8080으로 접속하면 Nginx가 실행되는 걸 볼 수 있어! 🚀

 

📌 Dockerfile 예제 (Node.js 앱 실행)

 

📌 Dockerfile을 사용하면 동일한 환경을 어디서든 쉽게 실행 가능!

 

# 1️⃣ Node.js 18 버전 기반 이미지 사용

FROM node:18

 

# 2️⃣ 컨테이너 내부에서 작업할 디렉토리 설정

WORKDIR /app

 

# 3️⃣ package.json과 package-lock.json 복사

COPY package*.json ./

 

# 4️⃣ 의존성 설치

RUN npm install

 

# 5️⃣ 프로젝트 소스 코드 복사

COPY . .

 

# 6️⃣ 컨테이너가 실행될 때 수행할 명령

CMD ["node", "server.js"]

 

📌 이제 이 Dockerfile을 기반으로 이미지를 만들고 실행할 수 있어!

 

# 1️⃣ Docker 이미지 빌드 (이미지 이름: my-app)

docker build -t my-app .

 

# 2️⃣ 컨테이너 실행 (포트 3000 매핑)

docker run -d -p 3000:3000 my-app

 

🚀 이제 localhost:3000으로 접속하면 Node.js 서버가 실행됨!

 

📌 Docker Compose (여러 개의 컨테이너 관리)

 

Docker Compose를 사용하면 여러 개의 컨테이너를 한꺼번에 관리할 수 있어!

📌 예를 들어, Node.js + MySQL 애플리케이션을 실행할 때 사용 가능.

 

✅ docker-compose.yml 예제

 

version: '3'

services:

  app:

    image: node:18

    container_name: my-node-app

    working_dir: /app

    volumes:

      - .:/app

    ports:

      - "3000:3000"

    command: ["npm", "start"]

 

  db:

    image: mysql:8.0

    container_name: my-mysql-db

    environment:

      MYSQL_ROOT_PASSWORD: root

      MYSQL_DATABASE: mydb

    ports:

      - "3306:3306"

 

📌 실행 방법

 

docker-compose up -d  # 컨테이너 실행

docker-compose down    # 컨테이너 종료

 

🚀 이제 Node.js 앱과 MySQL DB가 동시에 실행됨!

 

📌 Docker의 장점

 

환경 일관성 유지 → “내 로컬에서는 잘 되는데?” 문제가 사라짐!

배포 자동화 → 이미지 한 번 빌드하면 어디서든 실행 가능

가벼운 실행 방식 → VM보다 빠르고 효율적

확장성 → 여러 개의 컨테이너를 쉽게 관리 가능

 

📌 Docker 요약

 

Docker는 컨테이너 기반 가상화 기술

어떤 환경에서도 동일하게 실행 가능

Docker 이미지 → 컨테이너 실행

Dockerfile을 사용하여 자동화 가능

Docker Compose로 여러 컨테이너 관리 가능

 

이제 Docker 개념이 이해됐어? 🤔

더 궁금한 게 있으면 질문해 줘! 🚀🐳

728x90

'개발공부 > CS' 카테고리의 다른 글

오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점  (0) 2025.02.16
가비지 컬렉터란?  (0) 2025.02.16
API란?  (0) 2025.02.15
TDD: 테스트 주도 개발.  (0) 2025.02.15
RESTful API?  (0) 2025.02.15