[docker] 컨테이너와 도커의 이해

2024. 5. 11. 14:25·DevOps/docker

왜 도커를 리눅스에서 돌려요 ?

리눅스 커널의 기능들인 chroot, namespace, cgroup을 가지고 컨테이너를 생성하기 때문.

chroot : 독립된 공간 형성

namespace : isolate 기능 지원

cgroup : 필요한만큼 HW 지원

컨테이너 기반 기술 → 리눅스 커널

리눅스 커널이 없으면 컨테이너를 돌릴 수 없다.

window,mac os는요 ? → hypervisor를 활성화시켜서 그 위에 컨테이너를 돌리는 것 !!!

 

 

컨테이너? 컨테이너 이미지?

출처 : docker docs

 

컨테이너

  • 컨테이너는 하나의 Application 프로세스 → 각 컨테이너는 독립적으로 운영된다. 간단히 말해서 컨테이너는 앱의 각 구성 요소에 대해 격리(Isolation)된 프로세스이다.
    • 각 컨테이너는 호스트 시스템에 사전 설치된 종속성에 의존하지 않고 작동하는 데 필요한 모든 것이 존재한다.
    • 독립적으로 관리되며 하나의 컨테이너를 삭제해도 다른 컨테이너는 영향을 받지 않는다.
    • 확장성이 좋고, 배포에 용이하다.
    • 어떤 환경에서도 동일한 방식으로 작동된다.

 

컨테이너 이미지

  • 도커 이미지는 일련의 레이어로 구성된다. 새 컨테이너를 생성할 때 기본 레이어 위에 쓰기 가능한 새 레이어를 추가한다. 이 레이어를 컨테이너 레이어라고 부른다.
  • 새 파일 쓰기, 기존 파일 수정, 삭제 등 실행 중인 컨테이너에 대한 모든 변경 사항은 쓰기 가능한 이 얇은 컨테이너 계층이 기록된다.
  • 도커에서 이미지를 빌드할 때 기존 이미지에서 변경된 부분이 있다면, 바뀐 부분만 새로 이미지 레이어를 생성하게 되며 컨테이너에서 실행할 때 베이스 이미지 레이어와 바뀐 레이어를 합쳐서 실행한다.
  • 즉, 도커는 이미지를 레이어 단위로 관리하며 밑에서부터 위로 최신 변경 사항들이 레이어로 쌓이게 된다. (like stack)
  • 각각의 레이어를 재사용하여 이미지를 효과적으로 빌드하도록 설계되어 있다.

 

요약

  • 도커 호스트에서 도커 데몬 동작 중
  • 컨테이너 이미지(Read Only)는 하드디스크에 하나의 파일 형태로 저장, 각 레이어별로 파일이 각각 존재
  • 실행 → 메모리에 하나의 애플리케이션 프로세스로 실행 중 → 컨테이너라고 부름
  • 컨테이너화되면 그제서야 W/R 이 가능
  • 도커 호스트 입장에선 컨테이너는 하나의 프로세스, 컨테이너 이미지는 파일이다.

출처 : 유튜브 따배도(도커 시리즈)

 

 

 

컨테이너 및 레이어

컨테이너와 이미지의 주요 차이점은 쓰기 가능한 최상위 레이어이다. 새로운 데이터를 추가하거나 기존의 데이터를 수정하는 컨테이너에 대한 모든 쓰기는 이 쓰기 가능한 레이어에 저장된다. 컨테이너가 삭제되면 쓰기 가능한 레이어(최상위 레이어)도 삭제된다. 기본 이미지는 변경되지 않은 상태로 유지된다.

각 컨테이너에는 쓰기 가능한 자체 컨테이너 레이어가 있고 모든 변경 사항이 이 컨테이너 레이어에 저장되므로 여러 컨테이너가 동일한 기본 이미지에 대한 액세스를 공유하면서도 자체 데이터 상태를 가질 수 있다. 아래 다이어그램은 동일한 Ubuntu 15.04 이미지를 공유하는 여러 컨테이너를 보여준다.

출처 : docker docs

 

 

간단한 실습

1. 설치한 docker version 확인하기

 

2. window의 경우, hub.docker.com 로그인을 수행 필수

 

3. docker hub로부터 nginx 다운로드 테스트

 

4. 다운로드받은 docker image 확인

 

5. 실행 : docker run -d -p 80:80 —name web nginx

 

6. 실행 중인 nginx 확인

  • WSL

 

  • Docker Desktop

 

7. 실습 완료 후 nginx 제거

 

 

 


참고 자료

  • https://www.youtube.com/watch?v=gNsjVOuF2jY&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=10
  • https://docs.docker.com/storage/storagedriver/
 

About storage drivers

Learn the technologies that support storage drivers.

docs.docker.com

  • https://sjh9708.tistory.com/23#google_vignette

 

'DevOps/docker' 카테고리의 다른 글
  • 재부팅시 docker container를 자동으로 실행되도록 설정하는 방법
  • [docker] docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우
  • mariadb build 시 트러블 슈팅 해결하기 (포트 변경 및 vim 설치하기)
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도커
    오블완
    S3
    세그먼트 트리
    오프라인 쿼리
    docker image
    타입스크립트
    누적합
    TypeScript
    구간 업데이트
    점 업데이트
    컨테이너
    파이썬
    인터페이스
    CORS
    AWS
    docker
    온라인 쿼리
    삼성기출
    인덱서블 타입
    PrefixSum
    티스토리챌린지
    imos법
    백준
    interface
    Bucket
    알고리즘
    segment tree
    구간합
    인덱스 시그니처
    python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
[docker] 컨테이너와 도커의 이해
상단으로

티스토리툴바