카테고리 없음

[새싹 금천 5기] Docker 개념 및 이해 (이노그리드_기업맟춤형 클라우드 인재 양성 캠프)

z00h 2025. 6. 16. 00:15

 

Docker 란?

애플리케이션을 ‘컨테이너’ 라는 독립된 환경으로 패키징하여 실행할 수 있도록 해주는 오픈소스 플랫폼이다.

다른 환경에서도 일관된 실행 환경을 제공하기 때문에 개발/테스트/운영 환경 간의 충돌을 크게 줄여준다.

 

Docker의 주요 구성 요소

Docker는 내부적으로 Client–Server–Repository 구조로 구성되어 있다.

클라이언트가 요청시 서버는 이미지 생성 → 컨테이너 생성

1. Client (CLI)

  • 사용자가 docker 명령어를 입력하여 서버에 요청을 보낸다.
  • 예: docker run, docker build, docker push 등

 

2. Server (Daemon)

  • 클라이언트 요청을 받아 실제 작업을 수행
  • 백그라운드에서 동작하며, dockerd라는 이름의 데몬(daemon)으로 실행된다.
  • 이미지 생성, 컨테이너 실행, 네트워크 설정, 볼륨 연결 등 주요 작업을 처리한다.

 

3. Repository (Registry)

  • 이미지 저장소 역할을 하며, 대표적인 예로는 Docker Hub가 있다.
  • 사용자는 이미지를 pull하거나 build한 이미지를 push할 수 있다.
  • 도커 허브 : 공식 도커 이미지들이 저장된 온라인 저장소이다. (GitHub같은)
  • 이미지 : 컨테이너 실행을 위한 앱, 실행환경 등을 묶어놓은 템플릿(틀), 변경되지 않는 읽기 전용 구조를 가진다.
  • 컨테이너 : 이미지를 실제로 실핸한 인스턴스이다. 서로 독립적이며 가볍고 빠르다.
  • 도커 데스크탑 : 컨테이너 상태를 시각적으로 확인하고, 로그를 모니터링하거나 이미지/네트워크 관리를 할 수 있는 GUI기반 도구

 

Docker의 동작 흐름

우리의 PC에서는 하나의 호스트에 Client, Server 모듈을 생성되어 같은 호스트 내에 서 실행된다.

터미널 도는 Dokcker Desktop GUI에서 명령 → dockerd 데몬이 이미지 생성/ 실행 등 요청 처리

 

다른 PC에서 컨테이너를 실행하고 싶다면?

다른 PC 에서 컨테이너를 실행하고 싶다면 이미지를 다른 PC로 옮긴다.

수백대의 PC에 일일이 설정까지하면서 복사를 할수 없기때문에 Registry에 저장,

다른 PC에서는 Registry에서 이미지를 가져와 실행한다.

 

도커 라이프 사이클

도커는 이미지 생성 -. 공유 → 실행 하는 세단 계의 흐름으로 동작한다.

🛠️ Build

  • 도커 이미지를 만드는 단계
  • 보통 Dockerfile을 작성해서 docker build 명령으로 이미지를 생성한다.
  • 이 이미지는 컨테이너 실행에 필요한 모든 환경(코드, 라이브러리, 설정 등)을 포함합니다.
예: docker build -t myapp:1.0 .

🚢 Ship

  • 만든 이미지를 다른 환경에서도 쓸 수 있게 Registry에 올리는 단계
  • docker push 명령으로 Docker Hub나 개인 레지스트리에 이미지를 업로드한다.
예: docker push myusername/myapp:1.0

▶️ Run

업로드된 이미지를 가져와서 컨테이너로 실행하는 단계이다.

  • docker pull로 이미지를 받고, docker run으로 컨테이너를 띄운다.

 

가상화를하는 이유

호스트 머신의 기능을 100%사용하도록 나온 개념이다.

하나의 호스트 머신 위에 여러개의 독립된 환경을 만들기 위한 기술이다.

→ 여러 PC가 충돌나지 않도록 자원을 효율적으로 쓰면서 개발, 운영을 안정적이고 유연하게 만든다.

 

하이퍼바이저 (가상머신 기반 가상화)

  • 의미:
  • 대표 도구:
  • 특징:

 

도커는 전통적인 가상화 대신 프로세스 격리 기술 사용(컨테이너 기반 가상화)

리눅스 커널 수준에서 프로세스를 격리하여 더 가볍고 빠르다.

  • cgroup:
  • namespaces:

→ 이 두 기술을 기반으로 컨테이너는 OS 전체를 가상화하지 않고, 필요한 부분만 격리한다.

 

클러스터링

  • 의미:
  • 도커 자체로는 어려움. 단일 호스트 중심의 도커는 여러 서버 간 연동 및 자동화에 한계가 있음

Docker Compose

  • 역할:
  • 예시:

쿠버네티스 (Kubernetes)

  • 역할:
  • 특징:

 

 

Docker 이미지 생성 방법

 

1. 컨테이너 상태를 이미지로 저장 (docker commit)

  • 실행 중인 컨테이너의 상태를 이미지로 저장할 수 있다.
Copy
bash

docker commit <container_id> my-custom-image
  • 장점: 빠르게 스냅샷 생성 가능
  • 단점: 반복 불가능, 어떤 내용이 들어있는지 모르기 때문에 추적 어려움 → 운영환경에서는 비추천

 

2. 컨테이너를 export 후 tar 파일을 import

  • 컨테이너 전체 파일 시스템을 .tar로 내보내고(import/export), 이를 이미지로 만들 수 있다.
bash

docker export <container_id> > my-container.tar
docker import my-container.tar my-image
  • 사용 사례: 다른 환경으로 이미지 포팅하거나, 버전 이슈 해결용
  • 단점: 메타데이터(예: 환경변수, 포트 정보 등) 손실된다.

 

3. Dockerfile을 사용해 build (가장 권장하는 방법)

  • 반복 가능하고, 버전 관리가 가능한 이미지 생성 방법이다.
  • Dockerfile에는 이미지 생성 규칙이 명시되어 있고, 이를 기반으로 docker build 명령어로 이미지를 생성한다.

dockerfile

# Dockerfile 예시
FROM python:3.11
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

 

bash

docker build -t my-python-app .
  • 장점: 코드 기반, 재사용 가능, 협업과 운영에 적합
  • 실제 서비스 배포에서 가장 많이 사용되는 방식

 

4. Registry에서 pull하거나 push로 배포/공유

  • 도커 이미지는 Docker Hub, AWS ECR, GitHub Container Registry 등 **레지스트리(Registry)**에 저장하고 공유 가능하다.
  • 이미지를 직접 생성하지 않고 pull할 수도 있고, 만들어둔 이미지를 push해서 팀원이 공유할 수 있다.
bash

docker push myusername/my-image
docker pull pengbai/docker-supermario