0부터 시작하는 Docker 공부 - Container 에 대해 알아보자

Jaehong Lee·2022년 8월 22일
0
post-thumbnail

1. Hypervisor 와 Container

  • Hypervisor 는 가상화 ( 추상화된 자원들의 묶음 ) 기술을 통해 가상 머신을 제공한다
    • Hypervisor 입장에서 VM 은 하나의 APP 이다
    • VM 은 물리 자원에 접근하기 위해 Kernel 을 2 번 거쳐야 한다
    • Hypervisor 는 물리 자원 바로 위 Kernel 에 배치되는 Type1 ( Baremetal ) , Host 의 OS 위에 배치되는 Type2 ( Host-Based Hypervisor ) 로 나뉜다

  • Container 와 같은 경우 OS 위에 Docker 가 배치되며, 이 Docker ( Engine ) 은 linux OS 의 Kernel 의 cgroup ( 자원 제한 및 격리 ) , namespace ( 작업 환경 격리 ) , chroot ( root 계정으로 변경 ) 와 같은 기능을 사용한다

2. Container 를 생성하는 법

    1. docker container run -it -d --name test01 centos:7 /bin/bash
      • run 을 통해 container 생성과 시작을 동시에 할 수 있다. 이는 생성 ( create ) 와 시작 ( start ) 를 합친 것이다
      • 사용할 이미지인 centos:7 은 local registry 에 위치해야 한다. 이 이미지는 정적 파일이다
      • --name 은 지정하지 않아도 자동으로 생성된다
      • -t 는 ssh 와 같은 컨테이너와의 연결 통로를 만들어주고, -i 는 물어보고 답하는 대화형 옵션을 부여하는 것이다. 이를 통해 /bin/bash 명령어를 전달한다. 이를 통해 /bin/bash 로 이동하여 shell 을 실행시킨다
        • /bin/bash 는 전달할 명령어 이다
      • -d 는 백그라운드에서 동작하게 해준다
        • 일반적으로 compose 에서의 서비스는 -d 가 가능한 이미지여야 한다
  1. docker compose

    • 예를 들어, 위와 같은 환경을 만들때, 다수의 컨테이너를 한 번에 간편하게 배포할 때는 docker compose 를 사용할 수 있다
    • docker-compose.yaml 파일에 version ( docker compose 의 version ) , services ( 하위에 Container 들을 작성 - services 는 Container 들의 묶음 ) , networks , volumes 를 정의해야 한다

3. Image 와 Container

  • 이미지는 layer 로 구성된다. 사용자가 이미지에 추가 사항을 더해서 업로드하면, 이미지 전체가 저장되는 것이 아닌 추가된 layer 만 저장된다. 사용자가 이미지 이름만 변경하여 업로드 하면, 이미지 전체가 저장되는 것이 아닌, 이미지에 link 되는 것이다

  • 이미지로 배포된 컨테이너는 read only 부분과 write 가 가능한 부분으로 나뉘어진다. 이미지의 내용은 read only 부분이며, 배포 후 컨테이너에서 수정이 불가능하다. write 부분은 영구적으로 저장이 불가능하다. 이 부분을 영구적으로 저장하려면, 외부 볼륨과 mount 해서 사용 해야 한다

4. blue green deployment

  • 블루 그린 배포란 애플리케이션 이전 버전에 있던 트래픽을 이전 버전과 거의 동일한 버전으로 점진적으로 이전하는 애플리케이션 모델로, 이때 두 버전 모두 실행 상태를 유지한다 ( Hot-Standby )
  • 이전 버전은 블루이고, 새 버전은 그린이다
  • selector 를 통해 외부 사용자가 블루로 접속하게 할지, 그린으로 접속하게 할지 설정할 수 있다

5. Registry & Repository 인증

registry 안에 다수의 repository 가 존재한다

registry 에는 public / private / local 이 존재한다

  • local

    myweb:1.0 ( [repository name]:[tag] )

  • public

    gildong/myweb1.0 ( push 할 때 인증 정보 확인 - docker login )

  • private

    10.10.10.10:5000/myweb:1.0 ( push 할 때 인증 정보 확인 - docker login https://10.10.10.10 )

profile
멋진 엔지니어가 될 때까지

0개의 댓글