[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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바