[Docker] Docker란 ?

2025. 1. 9. 15:08·Cloud

 

Docker

컨테이너라고 부르는 운영체제 수준의 가상화방식으로 SW를 배포하는 방식을 사용하는 PaaS 제품
  • PaaS : Platform as a Service, 애플리케이션, 데이터 단계만 사용자가 관리하는 서비스
  • 운영체제 위에 도커 설치 → 도커는 컨테이너 단위로 애플리케이션을 실행함
    • 컨테이너들은 서로 격리되어 있으므로 독립성을 보장함

 

컨테이너

SW를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 한데 모아 격리시킨 후 실행가능한 패키지로 만든 것

  • 서로 다른 컨테이너는 격리된 환경에서 작동 → 서로 충돌하지 않음
  • 소프트웨어 시스템을 구축할 때 최소 구성 요소로 분할하여 구축하는 방식인 마이크로서비스 아키텍처의 기반이 됨
  • 동일한 운영체제 위에서 작동하면 컨테이너는 서로 통신 가능

 

가상화

컴퓨터에서 활용하는 리소스를 추상화하는 개념을 의미함

  • 여러 개의 가상 머신을 생성함 → 단일 컴퓨팅 자원을 여러 개의 논리적인 자원으로 나누어 동작시킴

 

도커 구성 요소

  • 도커 클라이언트 : docker-cli, 우분투에서 실행하는 터미널, dockerd API 사용하여 명령 내립, 도커 데몬과 통신함
  • 도커 데몬 : dockerd, 백그라운드에서 실행되는 데몬 프로세스에 해당함, 도커 API 요청을 수신하고 객체를 관리함
  • containerd: 오픈소스 컨테이너 런타임, 컨테이너의 생명주기 모두 관리함
  • runc : 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임, 실제 컨테이너 실행만 담당
  • containerd-shim : containerd와 runc 사이에서 작동하는 중간 프로세스에 해당, 컨테이너 실행을 조정함

 

도커 기초 개념

  • 도커 이미지
    • 컨테이너 형태로 소프트웨어를 배포하기 위해 필요한 모든 요소를 실행할 수 있는 포맷
    • 컴파일 및 빌드한 패키지
    • 의존성 고려할 필요가 없음
    • 경량화된 패키지이므로 비교적 작은 용량으로도 제 역할을 수행함
    • 도커 이미지를 통해 동일한 환경을 가진 여러 개의 컨테이너를 생성할 수 있음
    • 이미지는 여러 레이어로 구성되어 있고 도커 허브와 같은 중앙 저장소에 저장되어 관리됨
  • 도커 컨테이너
    • 도커 이미지를 실행할 수 있는 인스턴스
    • 도커 이미지로부터 생성됨
    • 컨테이너는 자체적으로 파일 시스템을 가지고 있음
    • 각 컨테이너는 독립적으로 실행됨
    • 컨테이너는 도커 엔진과 운영체제를 공유함 → 컨테이너는 도커 엔진이 설치되어 있는 호스트 운영체제를 이용함

 

도커 이미지 명령어

# 도커 이미지 다운로드
docker image pull {이미지 이름:태그이름}

# 이미지 삭제
docker image rm {이미지명}

# Dockerfile로부터 이미지 빌드
docker image build

# 사용하지 않는 이미지 삭제
docker image prune

 

도커 컨테이너 명령어

# 이미지를 컨테이너로 실행
docker container run {이미지명}

# 중지 중인 컨테이너 실행
docker container start {컨테이너 ID}

# 도커 컨테이너 목록 확인
docker container ls -a

# 컨테이너 내부 접속
docker container run -it {이미지명}

# 컨테이너 내부 접속
docekr container attach {컨테이너 ID}

# 실행 중인 컨테이너에 명렁어 실행
docker container exec

# 실행 중인 컨테이너 멈추기
docker container stop {컨테이너 ID}

# 컨테이너 삭제
docker container rm {컨테이너 ID}

 

Dockerfile

도커 이미지를 생성하기 위한 지시사항들을 포함하는 텍스트 파일

  • 도커 이미지를 구성하는 과정을 자동화하고, 이미지가 어떻게 빌드되어야 하는지 세부 사항을 정의할 수 있음
  • 이미지 빌드를 반복 가능하게 하고, 버전 관리 시스템을 통해 이미지 구성을 관리하기 편함
  • 도커 이미지 저장
    1. 도커 파일 빌드
      • 도커 파일은 이미지 빌드 과정이 완전히 재현 가능함
      • 이미지 구성을 쉽게 유지보수 할 수 있음
    2. 컨테이너 커밋
      • 커밋으로 생성된 이미지는 해당 컨테이너의 변경 사항만을 포함하므로, 컨테이너 커밋을 통해 생성된 이미지를 다른 환경에서 재현하기 힘듦
      • 프로세스가 런타임 중 수행한 변경 사항을 포함할 수 있기에 이미지의 일관성, 안전성이 보장되지 않음
      • 실행 중인 컨테이너의 파일 시스템 변경 사항을 그대로 포함하므로 이미지 크기가 커질 수 있음

 

Dockerfile 작성

  1. 베이스 이미지 선택
    • 기존 이미지를 기반으로 시작하는데, 이를 베이스 이미지라 함
  2. 필요한 파일 및 명령 추가
    • 베이스 이미지 위에 필요한 파일과 명령을 추가함
    • 파일 복사, 환경 변수 설정, 응용 프로그램 설치 등의 작업
  3. 작업 디렉토리 설정
    • 이미지 내에서 작업 디렉토리를 설정하여 파일을 추가하거나 명령을 실행하는 위치를 지정함
  4. 병렬 실행
    • 이미지 내에서 실행할 명령을 정의함
    • RUN, CMD, ENTRYPOINT 등의 명령어
  5. 포트 노출
    • 이미지가 실행될 때 개발할 포트를 지정함
    • EXPOSE 명령을 사용하여 컨테이너 내부에서 개방할 포트를 명시함
  6. 이미지 메타데이터 설정
    • 이미지의 메타데이터를 설정함

명령어 설명 예시

FROM 베이스 이미지 지정 FROM ubuntu:20.04
WORKDIR 작업 디렉토리 설정 WORKDIR /usr/src/app
ENV 환경 변수 설정 COPY app /usr/src/app
COPY 호스트 파일 시스템에서 파일이나 디렉토리를 이미지 내부로 복사 COPY app /usr/src/app
ADD COPY와 유사하지만 추가 기능을 지원함 / URL로부터 파일을 다운로드하거나 압축 파일을 풀 수 있음 ADD https://example.com/file.txt/app/
RUN 컨테이너 내에서 실행할 명령어 정의 / 패키지 설치, 파일 복사, 응용프로그램 빌드 등 RUN apt-get update
EXPOSE 컨테이너가 개방할 포트 지정 EXPOSE 80
CMD 컨테이너가 실행될 때 실행할 명령어 지정 CMD [”npm”, “start”]
ENTRYPOINT 컨테이너가 실행될 때 항상 실행할 명렁어 ENTRYPOINT [”npm”,
”start”]    
VOLUME 호스트와 컨테이너 간 볼륨을 공유 VOLUME /data

 

Dockerfile 예시

# 베이스 이미지 선택
FROM node:14

# 작업 디렉토리 설정
WORKDIR /app

# 애플리케이션 종속성 설치
COPY package.json package-lock.json /app/
RUN npm install

# 애플리케이션 파일 추가
COPY . /app/

# 포트 노출
EXPOSE 3000

# 컨테이너 실행 시 실행될 명령
CMD ["npm", "start"]

 

Dockerfile 빌드

  • 도커 이미지를 빌드하기 위해 사용하는 명령어 : docker buile [옵션] 경로
  • 옵션
    • -t : 빌드된 이미지에 태그를 지정
    • -f : 사용할 도커파일의 경로를 지정
    • -q : 빌드 진행 상황 메시지를 출력하지 않음
    • —build-arg : 도커 파일 내에서 ARG 지시문에 전달할 빌드 인자를 지정
  • 빌드 예시
docker build -t my-node-app .
반응형

'Cloud' 카테고리의 다른 글

코드형 인프라 (IaC)란?  (0) 2025.05.28
[IaC] Terraform을 사용한 AWS 인프라 배포 자동화  (1) 2025.01.22
[k8s] EKS에서 Karpenter 사용하기 (2)  (1) 2025.01.05
[k8s] EKS에서 Karpenter 사용하기 (1)  (0) 2025.01.05
[k8s] karpenter란?  (2) 2025.01.04
'Cloud' 카테고리의 다른 글
  • 코드형 인프라 (IaC)란?
  • [IaC] Terraform을 사용한 AWS 인프라 배포 자동화
  • [k8s] EKS에서 Karpenter 사용하기 (2)
  • [k8s] EKS에서 Karpenter 사용하기 (1)
ssu_dev
ssu_dev
  • ssu_dev
    ssu
    ssu_dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (98)
      • Cloud (10)
      • HCI (2)
      • Algorithm (54)
      • Programming (13)
      • Computer Science (5)
      • System (6)
      • Trouble Shooting (6)
      • Work (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 인기 글

  • 태그

    투포인터
    Stack
    node scaling
    Deque
    자료구조
    OS
    플로이드 워셜
    구현
    bfs
    dfs
    K8s
    Java
    EKS
    docker
    sort
    BOJ
    Pod Scheduling
    cs
    Karpenter
    priorityqueue
  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ssu_dev
[Docker] Docker란 ?
상단으로

티스토리툴바