도커(Docker)

2경빈·2025년 5월 6일

Docker

목록 보기
1/6

도커(Docker)란?

도커는 응용 프로그램과 그 실행 환경을 하나의 이미지로 패키징하고, 이를 컨테이너라는 격리된 공간에서 실행하는 오픈소스 플랫폼이다.
도커를 사용하면 개발자는 “내 컴퓨터에서는 잘 되는데?” 같은 환경 차이 문제 없이, 어디서든 동일한 실행 결과를 얻을 수 있다.


도커파일 (Dockerfile)

도커파일은 이미지를 만들기 위한 명령어 모음이다.
일종의 스크립트 파일로, FROM, RUN, COPY, CMD 등의 명령어를 통해
어떤 베이스 이미지에서 시작해서 어떤 파일을 복사하고, 어떤 명령어를 실행할지 등을 기술한다.
즉, 도커파일 = "이미지를 만드는 레시피(조리법)"이다.

도커 이미지 (Docker Image)

도커 이미지는 컨테이너를 생성하기 위한 읽기 전용 템플릿이다.
애플리케이션을 실행하는 데 필요한 코드, 라이브러리, 의존성, 환경설정 등을 모두 포함한 패키지이다.
예를 들어, Ubuntu 이미지, Node.js 이미지, Nginx 이미지 등이 있다.
즉, 이미지 = "컨테이너를 만들기 위한 설계도"이다.

도커 컨테이너 (Docker Container)

도커 컨테이너는 이미지를 기반으로 실행된 하나의 인스턴스이다.
실제 애플리케이션이 동작하는 격리된 공간이며, 독립된 프로세스로 실행된다.
컨테이너는 이미지의 내용을 복사해서 메모리 상에 올려 실행하되, 추가되는 변경 사항은 쓰기 가능한 레이어에 저장된다.
즉, 컨테이너 = "이미지를 실행한 결과물(작동 중인 프로그램)"이다.


개념 흐름 요약

  1. Dockerfile → 이미지를 만들기 위한 스크립트이다.
  2. docker build → Dockerfile을 이용해 이미지를 생성한다.
  3. docker run → 이미지를 기반으로 컨테이너를 생성하고 실행한다.

간단한 예시로 정리

  • Dockerfile 작성

    FROM node:18  
    COPY . /app  
    WORKDIR /app  
    RUN npm install  
    CMD ["node", "app.js"]
  • docker build -t my-app .my-app이라는 이미지가 생성된다.

  • docker run my-appmy-app이라는 이미지를 기반으로 컨테이너가 실행된다.


도커의 동작 원리

  1. 도커는 리눅스 커널의 기능을 활용하여 컨테이너를 실행하는 플랫폼이다.
    여기서 사용하는 리눅스 커널 기능은 다음과 같다.
  • Namespace : 프로세스, 네트워크, 사용자, 파일 시스템 등을 분리하여 격리된 환경을 제공하는 기능이다. 컨테이너마다 자신만의 독립된 환경처럼 보이게 만든다.
  • Control Groups (cgroups) : CPU, 메모리, 디스크 I/O 등 시스템 자원을 각 컨테이너마다 할당하고 제한할 수 있게 해주는 기능이다.
  1. 컨테이너는 이미지로부터 생성된 실행 단위이다.
  • 이미지는 파일 시스템과 실행 환경, 실행 파일 등을 포함한 정적인 패키지이다.
  • 컨테이너는 이 이미지를 실행시킨 실행 중인 프로세스이자 격리된 공간이다.
  1. 도커는 호스트 운영체제의 커널을 공유한다.
  • 전통적인 가상머신(VM)은 운영체제를 통째로 가상화하여 무겁지만,
  • 도커는 커널은 공유하고, 필요한 파일 시스템만 컨테이너별로 분리하여 경량화된 실행이 가능하다.
  • 이 때문에 도커는 빠르게 실행되고, 리소스 소모가 적다.
  1. 윈도우나 macOS에서도 도커는 사용 가능하다.
  • 이때는 WSL2(Windows Subsystem for Linux 2) 또는 **하이퍼바이저(Virtual Machine Manager)**를 통해 리눅스 환경을 가상으로 제공한다.
  • 결국 도커는 리눅스 커널 기반 기술 위에서만 동작 가능하기 때문에, 이런 방식으로 리눅스 환경을 흉내 내는 것이다.

도커의 주요 구성 요소

구성 요소설명
Docker Engine도커의 핵심 런타임. CLI, 데몬(dockerd), API 포함
Image실행 환경을 포함한 애플리케이션 패키지. 읽기 전용이다.
Container이미지를 실행한 인스턴스. 격리된 실행 환경이다.
Dockerfile이미지를 만들기 위한 스크립트. 명령어 모음이다.
Docker Hub도커 이미지를 공유하는 저장소이다.

ex)

“Node.js 애플리케이션을 도커로 실행한다”는 것은
Node.js 설치부터 의존성, 실행 명령어까지를 포함한 도커 이미지를 만들고,
이 이미지를 실행한 컨테이너 안에서 Node.js 서버가 돌아가도록 하는 것이다.


도커에서 자주 쓰이는 명령어들

명령어설명
docker ps실행 중인 컨테이너 목록 확인
docker images로컬에 존재하는 이미지 목록 확인
docker run컨테이너 실행
docker stop컨테이너 정지
docker exec실행 중인 컨테이너 안에서 명령 실행
docker buildDockerfile을 기반으로 이미지 생성
docker pull원격 저장소에서 이미지 가져오기
docker logs컨테이너 로그 출력

이런 명령어는 리눅스 터미널에서 기본적으로 사용할 수 있다.

profile
eggs before hatching

0개의 댓글