도커(Docker)란?, 핵심개념, 장단점, 기본명령어

🐳 도커(Docker)란?

  • Docker는 애플리케이션을 컨테이너(container)라는 단위로 실행할 수 있도록 도와주는 가상화 기술입니다.
  • 컨테이너를 사용하면 애플리케이션과 필요한 모든 환경(라이브러리, 설정 파일 등)을 하나로 묶어 어디서든 동일한 환경에서 실행할 수 있습니다.

 
 
 


💡 Docker의 핵심 개념

 

1️⃣ 컨테이너(Container)

  • 애플리케이션과 실행에 필요한 모든 요소(코드, 라이브러리, 설정 등)를 포함한 독립적인 환경
  • 가상 머신(VM)과 달리 OS 전체를 포함하지 않고, 경량화된 실행 방식을 가짐
  • 어디서 실행해도 동일한 환경 보장 (Windows, Mac, Linux 상관없이 실행 가능)

 

2️⃣ 이미지(Image)

  • 컨테이너를 실행하기 위한 설정된 파일 시스템과 애플리케이션을 포함한 패키지
  • 여러 개의 레이어(layer)로 구성되며, 변경이 필요할 경우 새 레이어를 추가하는 방식
  • Docker Hub 또는 개인 저장소에 업로드 가능

 

3️⃣ Dockerfile

  • 컨테이너를 만들기 위한 설정 파일
  • 컨테이너를 생성할 때 실행할 명령어, 환경 변수, 설치 – 패키지, 실행 프로그램 등을 지정
  • docker build 명령어를 통해 이미지 생성 가능

 

4️⃣ Docker Hub

  • 공식적으로 Docker 이미지를 공유하는 클라우드 기반 저장소
  • 다양한 운영 체제, 개발 프레임워크, 데이터베이스 등의 공식 Docker 이미지를 제공
  • 웹사이트 URL: https://hub.docker.com

 

5️⃣ Docker Compose

  • 여러 개의 컨테이너를 한 번에 실행하기 위한 오케스트레이션 도구
  • docker-compose.yml 파일을 이용해 웹 서버, 데이터베이스, 캐시 서버 등을 한꺼번에 실행 가능

 
 
 


💎 Docker의 장점

 

1️⃣ 환경 일관성 유지

  • 개발 환경, 테스트 환경, 배포 환경이 모두 동일하게 유지됨 (더 이상 “내 로컬에서는 잘 되는데?” 없음!)
  • 개발자가 코드를 실행하는 환경과 실제 서버 환경이 동일하므로 예측 가능한 동작 가능

 

2️⃣ 가벼운 컨테이너 (vs 가상 머신)

  • 가상 머신(VM)은 각각 별도의 OS를 설치해야 하지만, Docker 컨테이너는 호스트 OS의 커널을 공유하기 때문에 훨씬 가볍고 빠름
  • VM보다 메모리 사용량이 적고, 실행 속도가 빠름

 

3️⃣ 빠른 배포 및 확장

  • 컨테이너 기반의 애플리케이션을 손쉽게 복사하고 여러 서버에서 실행 가능
  • 마이크로서비스 아키텍처(MSA)와 궁합이 잘 맞음

 

4️⃣ 의존성 문제 해결

  • 특정 애플리케이션이 요구하는 라이브러리, 패키지, 설정 값을 컨테이너 안에서 완전히 독립적으로 유지 가능
  • 예: Python 3.7 기반 프로젝트와 Python 3.9 기반 프로젝트를 동시에 실행 가능

 

5️⃣ 다양한 운영 체제 지원

  • Docker 이미지를 만들면 Linux, Windows, Mac 어디에서든 실행 가능
  • 클라우드, 로컬, 서버 어디서든 배포 가능

 
 
 


⚠️ Docker의 단점

 

1️⃣ GUI 애플리케이션 지원이 어려움

  • Docker는 CLI(Command Line Interface) 환경에서 실행되므로, GUI 기반의 프로그램 실행은 어려움

 

2️⃣ 성능 저하 가능성

  • 네이티브 실행보다는 약간의 성능 저하가 발생할 수 있음
  • 특히 디스크 I/O, 네트워크 속도가 중요한 애플리케이션에서는 성능 문제를 고려해야 함

 

3️⃣ 초기 학습 필요

  • Docker를 처음 접하는 개발자에게는 Dockerfile, Compose, 네트워크 설정 등이 어렵게 느껴질 수 있음
  • 컨테이너 간의 네트워크 연결, 데이터 볼륨 관리 등을 익히는 데 시간이 걸림

 
 
 


🖥️ Docker 기본 명령어

 

1. Docker 설치 확인

docker --version

 

2. Docker 컨테이너 실행

  • hello-world 컨테이너를 실행하여 정상적으로 설치되었는지 확인
docker run hello-world

 

3. 실행 중인 컨테이너 확인

  • 현재 실행 중인 컨테이너 목록 조회
docker ps

 

4. 종료된 컨테이너 포함한 전체 목록 확인

docker ps -a

 

5. 컨테이너 중지

docker stop [컨테이너 ID]

 

6. 컨테이너 삭제

docker rm [컨테이너 ID]

 

7. 모든 컨테이너 강제 삭제

docker rm -f $(docker ps -aq)

 

8. Docker 이미지 목록 확인

docker images

 

9. Docker 이미지 삭제

docker rmi [이미지 ID]

 

10. Docker Compose 실행

  • docker-compose.yml 파일을 기반으로 여러 개의 컨테이너를 실행
docker-compose up -d

 

11. Docker 컨테이너내부로 파일복사

docker cp 로컬경로 아이디:컨테이너내부경로
  • 예시 (로컬의 run.sh파일을 컨테이너내부의 /tmp로 복사):
$ docker ps                     # 컨테이너 아이디 확인
CONTAINER ID   IMAGE      COMMAND                ...
1060abab28f6   server     "bash -c 'server…"     ...
$ docker cp run.sh 1060:/tmp    # 파일 복사
Successfully copied 337kB to 1060:/tmp

 

 

 


🏁 결론

  • Docker는 애플리케이션을 쉽고 빠르게 배포할 수 있도록 도와주는 컨테이너 기술입니다.
  • 가벼우면서도 환경 일관성을 유지할 수 있어 개발, 테스트, 운영 환경에서 매우 유용하게 활용됩니다.

✅ Docker가 필요한 경우

  • 여러 개발 환경(Windows, Mac, Linux)에서 동일한 환경을 유지해야 할 때
  • 배포 자동화를 원할 때
  • 여러 개의 애플리케이션을 컨테이너로 관리하고 싶을 때
  • 마이크로서비스 아키텍처(MSA) 기반의 애플리케이션을 구축할 때

💡 Docker는 현대 소프트웨어 개발에서 필수적인 도구 중 하나이며, DevOps, CI/CD(지속적 통합/배포)에도 자주 사용됩니다! 🚀

 
 
 

참고자료

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다