Docker 개요

yoon__0_0·2024년 5월 2일
1

이어드림 수업

목록 보기
4/103

Docker

컨테이너 개론

  • docker는 2013년에 dotcloud에서 생성 (솔로몬 하익스)

  • container 기술은 원래 Linux에 포함된 LXC(Linux Container)라는 커널 기술을 활용한 것

  • container은 100% Linux

  • Container은 작은 가상화 sever -> micro-vm (application 단위로 구동되는 서버)

    docker history

  • 1991 ~
    - linux안에는 LXC 가 존재했고 이를 이용해서 container을 만들 수 있었음.

  • 2010 ~
    - 가상화 기술 sever base로 변경되기 시작함

  • 2013 ~ : 가상화 기술 (docker 생성)

  • 2015 ~ : 컨테이너 관리 도구 만들어짐
    - kubernetes

    why docker

    • 복잡한 Linux Application을 여러 Container로 통합하여 실행 가능 => microservice
    • 개발, 테스트, 서비스 환경을 하나로 통합하여 효율적 관리가 가능
    • Image와 container를 전세계 사람들이랑 공유할 수 있음. (https://hub.docker.com/ 에서 무료로 가능)

    Container 기술

  • VM 가상화 보다 훨씬 빠르고 가벼운 경량화 기술.

  • 경량화 기술이기 때문에 기본적으로 제공되는 명령어 (ping etc..) 및 도구들이 제공되지 않음.

  • image의 복사본과 process를 합친 것.

    • image (동적) -> 정적으로 만들기 위해
    • 물리적 경로 (/var/lib/docker)에 복사본이 생성됨.
  • process의 추상화로 ps 명령어를 통해서 조회가 가능함.

    container type

  • PID 1이 무엇이냐에 따라 차이가 존재함.

  • system container

    • os container로 pid 1이 os 이다
    • vm을 사용하는 것처럼 다양한 방법으로 사용할 수 있음.
  • appication container

    • 단일 application이 컨테이너 내에서 실행됨.

    • 주체성, 독립성, 격리성을 가짐.

    • pid 1이 해당 application이다.

    • 보통 많이 사용됨.

      가상화 (VM vs Container)



      1) VM

    • server 기반의 가상화

    • Image 기반 -> OS, package 등의 운영 환경에 필요한 파일, 데이터를 포함함 -> 패키징
      - OVF 기술을 통해 패키징을 함

      2) Container

    • 애플리케이션 기반의 가상화, 경량화

    • Image 기반 -> OS, package 등의 운영 환경에 필요한 파일, 데이터를 포함함 -> 패키징

      • OCI(open container initiative) 기술을 통해 패키징을 함
    • image는 불변, 수정 불가 -> container안에서 update 하여 새로운 이미지를 생성해야함.

      • image는 계층 구조로 생성됨.

image

  • image는 여러개의 container를 만들수 있음.
  • container 하나는 하나의 image를 가질 수 있음.
  • 다양한 image의 결합을 위해서는 base image를 기초로 하여 layer를 쌓아 새로운 나만의 image를 생성할 수 있음.

docker engine

  • container를 실행하는 것.
  • docker engine은 hostOS(ubuntu)가 가지고 있는 kerner기술 (LXC)를 공유받아서 container 화를 지원하는 Paas(Platform as Serveice , 서비스를 위한 플랫폼)
  • docker container와 host os kerner은 socket 통신을 통해 운영
  • docker는 하드웨어 가상화 없이 격리된 환경에서 실행되는 프로세스 이므로 프로세스의 표준화된 격리를 말함.

커널기술 (LXC)

1) chroot

  • container의 독립된 (pid = 1) 환경 제공 (생성), 격리성 (all deny -> iptables) 제공

2) namespace

  • 운영체제(OS)의 동작과 연관이
  • network ns, mount ns, pid ns
    - network : sandbox를 container 내부에 배치 (Max, IP, iptables, route table 등 )
  • container에 제공함

3) cgroup (contral group)

  • 자원(cpu, memory, disk, network) 할당 제공
  • from hostOS
  • container의 할당되는 기본 자원은 무제한 (unlimited)
  • 따라서 limite를 걸어줘야함. (container가 독점할 수도 있기 때문에) ==> resource limit 구현이 요구됨.

Doker engine 아키텍쳐

1) dockerd

  • docker CLI (명령어)
    • docker로 시작함. (parent command)
    • 예를 들어 docker run (container 생성) 실행시 하면 밑으로 쭉 내려가면서 실행하는 것
  • swarmkit
    • docker cluster (multi server)
    • 이와 유사한 것이 kubernetes
  • logs mgmt
    • docker가 생성하는 모든 log 관리
    • 기본값이 json 형식으로 로그 저장
  • storage mgmt
    • 저장소 = volume -> host to container 간의 공유 설정
    • 밖 데이터를 컨테이너 내부로 공유하거나 그 반대도 가능
  • linbnetwork
    • docker network = docker 0= bridge network (L2 -> Mac 주소)
    • docker0의 역할 : 모든 컨테이너의 gateway 역할
  • buildkit
    • image build (이미지 생성)
  • DCT
    • 보안 설정(무결성)
  • image mgmt
    • image 관리

2) containerd

  • runtime engine, container의 lifecycle 관리
  • runtime engine : containerd, cri-o 등 있음

3) runC

  • container 생성에 관여

3->4) socket 통신(docker.shock) -> /var/run 경로에 있음. => kerner과 통신병 역할을 수행함

4) host OS의 kerner

docker 로 놀아보기

https://www.docker.com/play-with-docker/

https://hub.docker.com/ 에 로그인이 되어있어야함.

lab environment -> set start
login 한 후 start
add new instatnce 하면 리눅스 환경이 뜨게 됨.

실습
nginx image를 다운받아서 container를 만들고 웹에 띄워보기

# nginx docker image 불러오기
docker pull nginx:1.25.3-alpine

# docker image 확인하기
docker images

# image를 컨테이너 화 하기
docker run -d -p 8001:80 --name=myweb nginx:1.25.3-alpine

# docker process 확인하기
docker ps

# web 화면에 띄울 index.html 생성
vi index.html

# index.html에서 적어줄 것
<h1> hello docker </h1>

# html 파일을 nginx 아래에 넣어주기
docker cp index.html myweb:/usr/share/nginx/html/index.html

위를 모두 실행후 위쪽에 open port 8001을 보고 8001을 눌러주면 web 화면이 하나 뜨게 되고 내가 작성한 hello world가 보이게 됨.

profile
신윤재입니다

0개의 댓글