🛠️ Tools & IDE/Docker

[Docker] Docker란? 핵심 개념 정리 및 가상 머신(VM) 과의 차이점 & 기본 명령어

koko1177 2025. 2. 2. 16:32
반응형

 

Docker Hub (도커 허브)

https://hub.docker.com

 

 

 

1. Docker

  • Linux Container 기반의 가상화 기술을 제공하는 오픈 소스 플랫폼
  • Linux container 기반으로 만든 OS레벨 가상화 구현을 도와주는 프로그램
  • Application 패키징 툴

 

 

 

2. Docker의 핵심 개념

 - Docker는 가볍고 빠르게 Application을 구축, 배포, 실행할 수 있는 강력한 도구
 - Docker Engine을 통해 Container 관리, Docker Image를 기반으로 여러 개의 Container 실행 가능
 - 이러한 Container 기술을 활용하여 효율적이고 유연한 Application 운영 (응용 프로그램 개발, 배포 및 실행)이 가능
 - Container는 Host OS와 커널을 공유하면서도 서로 격리되어 실행, Application을 다양한 환경에서 일관성 있게 실행 가능한 장점

 

 

    2.1 Docker Engine : Docker의 핵심 엔진, Container 생성 및 관리

  • Docker Daemon(데몬) : Container 생성, 실행, 관리하는 백그라운드 프로세스
  • CLI (Command Line Interface) : 명령줄을 통해 Docker 제어 도구
  • REST API : 다른 프로그램이 Docker를 제어할 수 있도록 제공하는 인터페이스

 

 

    2.2 Docker Image : 이미 만들어진 컨테이너가 적용된 기초

  • 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 읽기 전용 템플릿
  • 특정 Application과 필요한 실행 환경 포함
  • Application과 그에 필요한 모든 의존성 (코드, 라이브러리, 설정 파일, 시스템 도구, 런타임 등)을 패키징
  • Dockerfile을 사용하여 정의됨 (*Dockerfile : Docker Image를 생성하기 위한 스크립트 파일 - Application을 구동하기 위해 필요한 파일, 프레임워크, 라이브러리, 환경 변수, 실행할 명령어 등 정의)
  • Container를 실행하기 위한 템플릿
  • 계층화되어 있어 효율적인 관리 가능 (Docker Hub와 같은 저장소에 공유 가능)

 

 

    2.3 Docker Container : Kernel 에 올라가는 Container (가상 컴퓨터)

  • Docker Image를 실행한 상태를 의미 (== Docker Image의 인스턴스)
  • 응용 프로그램을 실행할 환경 제공
  • Application과 그에 필요한 모든 의존성 (라이브러리, 시스템 도구, 코드, 런타임 등)을 패키징하여 하나의 독립적 유닛으로 다룰 수 있게 해 줌
  • Docker Image를 기반으로 생성
  • Host OS와 독립적으로 실행됨 (각 Container는 격리된 파일 시스템, 네트워크 공간을 가짐)
  • 경량화된 실행 환경 제공
  • 필요할 때 생성하고, 사용 후 삭제 가능

 

 

 

3. Docker Image 배포 과정

    1) 우리가 개발하고 있는 로컬 환경(PC)과 Server 각각에 Docker 설치

    2) Application을 구동하는데 필요한 Dockerfile 작성

    3) Docker Image 생성 (== Application 스냅샷)

    4) Docker Image를 Container 레지스트리에 업로드

    5) Server에서 Docker Image 다운로드

    6) Container 실행

 

 

 

4. Docker VS 가상 머신(VM)

Docker와 가상 머신(VM) 모두 애플리케이션을 격리하여 실행하는 기술

구분 도커 (Docker) 가상 머신(Virtual Machine)
가상화 대상 Application 운영체제 (OS)
실행 방식 Host OS 위에서 컨테이너를 실행
(프로세스 격리)
하이퍼바이저 위에서 별도의 OS를 실행
(운영체제 격리)
성능 가볍고 빠름 무겁고 비교적 느림
자원 활용 최소한의 리소스 사용 OS 별로 많은 리소스 필요
배포/부팅 속도 빠르게 배포/부팅 가능 부팅 시간이 필요하여 상대적으로 느림
이식성 높음 상대적으로 낮음

Docker는 별도의 OS(운영체제) 설치 x, 호스트 OS의 커널을 공유하며 실행

가상 머신(VM) 보다 더 가볍고 빠르게 동작 가능

 

 

 

5. Docker 기본 명령어들

Docker 버전 확인
# Docker 버전 확인
#docker --version
docker -v

 

Docker Image 다운로드
# Docker Image 다운
# 태그는 필수 x
docker pull {이미지명}:{태그}        # ex) docker pull python:3

 

컴퓨터 내 Docker Image 확인
 # 컴퓨터 내 Docker Image 확인
 docker images

 

Docker Image로 Container 생성
# Docker Image로 Container 생성
docker create {옵션} {이미지명}:{태그}        # ex) docker create -it python

 

만들어진 Container 시작 (Docker Image에 CMD로 지정해 놓은 작업시키기)
# 만들어진 Container 시작 (Docker Image에 CMD로 지정해놓은 작업 시키기)
docker start {컨테이너 id 또는 이름}

 

Container로 들어가기 (Container 내 CLI 이용)
# Container로 들어가기 (Container 내 CLI 이용)
docker attach {컨테이너 id 또는 이름}

 

Docker Image를 다운 받아(없을 시에만) 바로 Container 실행하여 진입
# Docker Image를 다운 받아(없을 시에만) 바로 Container 실행하여 진입
docker run {이미지명}:{태그}          # ex) docker -it run python:3

 

옵션 설명
-d 데몬으로 실행(뒤에서 - 안 보이는 곳(백그라운드)에서 알아서 돌라고 하기)
-it 컨테이너로 들어갔을 때 bash로 CLI 입출력을 사용할 수 있도록 해 줍니다.
--name {이름} 컨테이너 이름 지정
-p {호스트의 포트 번호}:{컨테이너의 포트 번호} 호스트와 컨테이너의 포트를 연결합니다.
--rm 컨테이너가 종료되면{내부에서 돌아가는 작업이 끝나면} 컨테이너를 제거합니다.
-v {호스트의 디렉토리}:{컨테이너의 디렉토리} 호스트와 컨테이너의 디렉토리를 연결합니다.

 

동작 중인 Container 재시작
# 동작 중인 Container 재시작
docker restart {컨테이너 id 또는 이름}

 

Docker Container의 내부 쉘에서 빠져나오기 (Container 종료)
# Docker Container의 내부 쉘에서 빠져나오기 (Container 종료)
exit		# or Ctrl + D

 

Docker Container의 내부 쉘에서 빠져나오기 (Container 종료 x)
# Docker Container의 내부 쉘에서 빠져나오기 (Container 종료 x)
Ctrl + P, Q

 

동작 중인 Container 확인
# 동작 중인 Container 확인
# 동작 중이 아닌 Container 들도 모두 확인 : -a 옵션
docker ps

 

Container 삭제
# 컨테이너 삭제
docker rm {컨테이너 id 또는 이름}

# 모든 컨테이너 삭제
docker rm `docker ps -a -q`

 

Docker Image 삭제
# Docker Image 삭제
# Container가 있을 시 강제 삭제 : -f 옵션
docker rmi {옵션} {이미지 id}

 

모든 Container와 이미지 등 Docker 요소 중지 및 삭제
# 모든 Container와 이미지 등 Docker 요소 중지 및 삭제

# 모든 컨테이너 중지
docker stop $(docker ps -aq)

# 사용되지 않는 모든 도커 요소(컨테이너, 이미지, 네트워크, 볼륨 등) 삭제
docker system prune -a

# 아래를 복붙하여 함께 실행하면 편리
docker stop $(docker ps -aq)
docker system prune -a

 

 

Dockerfile로 Docker Image 생성
# Dockerfile 로 Docker Image 생성
# Dockerfile 파일이 있는 디렉토리 기준
# 마지막의 . 이 상대주소
docker build -t {이미지명} .

 

Docker Compose 실행
# Docker Compose 실행
# 여러 개의 Docker 컨테이너를 쉽게 관리 및 실행하는 명령어
# docker-compose 파일이 있는 디렉토리 기준
# 백그라운드에서 데몬으로 실행되도록 하려면 : -d 옵션
docker-compose up

 

 

더보기

Docker Docs 명령어

docker | Docker Docs

 

Docker 명령어 참고

https://www.yalco.kr/36_docker/

 

 

생활코딩 유튜브 Docker 입문

https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=2

 

생활코딩 유튜브 Docker Image 생성

https://www.youtube.com/watch?v=0kQC19w0gTI

 

드림코딩 유튜브 Docker 

https://www.youtube.com/watch?v=LXJhA3VWXFA&t=162s

 

얄팍한 코딩 유튜브 Docker

https://www.youtube.com/watch?v=hWPv9LMlme8

 

반응형