본문 바로가기
메가IT아카데미 국기과정/도커와 쿠버네틱스

[1-1] Docker 실습 환경 구성

by 한님폐하 2022. 9. 13.

 

1. 가상 서버와 컨테이너 차이점

 1) 온프레이미스 환경

물리적 서버1 물리적 서버2 물리적 서버3
   (Apache)    (Mysql)   (Log)


 2) 가상 서버 환경

     [가상 서버1]     |      [가상 서버2]    |     [가상 서버3]
  어플리케이션 A    |   어플리케이션 B   |   어플리케이션 C
           OS           |          OS            |          OS 
        (Apache)        (Mysql)           (Log) 
────────────────────────────
     하이퍼바이저(Hyper-V, vmware)
────────────────────────────
           OS
────────────────────────────
        하드웨어
────────────────────────────


 2) 컨테이너 환경

 - 파일과 디렉토리 정보만 갖고 있는 이미지를 이용하여 컨테이너라는 단위로 가상 호스트를 생성한다.
 - 이때, 컨테이너는 실제 호스트 리눅스의 커널을 사용한다.
 - 컨테이너를 사용하면 오픈 소스를 효율적으로 사용하여 어플리케이션을 개발할 수 있으며, 안정적으로 배포가 가능하다.
 - 또한, 각각의 컨테이너들은 리눅스 커널을 사용하기 때문에 별도의 OS가 필요가 없다.
 - 그렇기 때문에 인프라 사용 효율성, 빠른 구동 시간, 불변실행 환경이라는 장점을 갖게된다.

     [컨테이너1]      |      [컨테이너2]     |     [컨테이너3]
  어플리케이션 A    |   어플리케이션 B   |   어플리케이션 C
       Bin/Lib          |        Bin/Lib        |        Bin/Lib
      (Apache)          (Mysql)           (Log) 
────────────────────────────
        리눅스(Docker)
────────────────────────────
        하드웨어
────────────────────────────


 3) 가상 서버 & 컨테이너 환경

                   [가상 서버1]                     [가상 서버2]
     [컨테이너1]      |      [컨테이너2]     |     
  어플리케이션 A    |   어플리케이션 B   |   어플리케이션 C
        Bin/Lib         |        Bin/Lib        |          OS 
────────────────────────────
     하이퍼바이저
────────────────────────────
           OS
────────────────────────────
        하드웨어
────────────────────────────


 4) 실습 환경

 - 실습 환경에서 사용하는 PC가 Windows10이기때문에 VMware 환경에서 리눅스를 설치하여 진행한다.

     [컨테이너1]      |      [컨테이너2]     |     [컨테이너3]
  어플리케이션 A    |   어플리케이션 B   |   어플리케이션 C
       Bin/Lib          |        Bin/Lib        |        Bin/Lib
────────────────────────────
    Guest OS(리눅스)
────────────────────────────
              하이퍼바이저(VMware)
────────────────────────────
 Host OS(Windows10)
────────────────────────────
        하드웨어
────────────────────────────



2. 도커

 - 컨테이너를 Build(작성), Ship(이동), Run(실행)할 수 있는 기능을 제공하는 리눅스 기반 오픈 소스 가상화 플랫폼이다.
 - 도커 구성 요소는 다음과 같이 도커 클라이언트, 도커 데몬, 이미지, 컨테이너, 레지스트리가 있다.

 1) 도커 클라이언트

 - 도커 커맨드라고하며 컨테이너를 조작하는 커맨드 라인 유저 인터페이스이다.
 - 도커 커맨드를 사용하여 컨테이너, 이미지, 네트워크, 볼륨 등의 오브젝트를 제작하여 활용할 수 있다.
 - 도커 API를 사용하여 도커 데몬에게 요청을 보내며, 대표적인 명령은 다음과 같다.

docker build 기본 이미지에 기능을 추가하여 새로운 이미지를 만들때 사용하는 명령어이다.
docker pull 레지스트리에서 이미지를 다운로드 받을때 사용하는 명령어이다.
docker run 이미지를 이용하여 컨테이너를 구동할때 사용하는 명령어이다.


 2) 도커 데몬

 - 도커 커맨드의 명령에 의해서 이미지, 컨테이너, 볼륨, 네트워크 등을 관리한다. 
 

 3) 이미지

 - 컨테이너를 구동하기 위한 읽기 전용(쓰기 불가능) 템플릿이다.
 - 즉, 컨테니어를 구동하기 위한 실행 파일과 설정 파일의 세트이다.
 - 직접 제작도 가능하며, 로컬에 이미지가 없을 경우에는 도커 레지스트리(도커 허브)로부터 다운로드를 받을 수 있다.


 4) 컨테이너

 - 이미지를 이용하여 독립적인 단위(네임스페이스/cgroup)로 실행된 하나의 프로세스를 의미한다.
 - 컨테이너는 읽기/쓰기가 가능하다. 단, 저장된 정보는 볼륨에 저장해야지만, 컨테이너 재시작시 사용이 가능하다.
 - 실행된 컨테이너는 IP 주소가 할당되며 마치 하나의 독립적인 서버처럼 동작한다. 


 5) 레지스트리

 - 컨테이너 이미지를 보관하는 저장소이다.
 - 도커는 기본적으로 도커 허브에 있는 이미지를 다운로드 받도록 설정되어 있다.

퍼블릭 레지스트리 누구나 사용할 수 있는 공개된 레지스트리이다.(도커 허브)
프라이빗 레지스트리 내부용으로 사용하는 레지스트리이며, 직접 구축해야한다.
클라우드 레지스트리 퍼플릭 클라우드가 제공하는 레지스트리이다. 
                                                    공개용도 있지만, 대부분 계정 및 과금을 이용하여 사용하도록 되어 있다.


[참고] 네임스페이스, cgroup

 - 네임스페이스는 특정 프로세스를 다른 프로세스로부터 분리시켜 같은 네임스페이스 내에서만 접근할 수 있도록 제한하는 기능이다.
 - 이를 통하여 컨테이너가 하나의 독립된 서버처럼 동작할 수 있게 한다.

 - cgroup은 컨트롤 그룹이라고하며, 프로세스별로 CPU 시간이나 메모리 사용량과 같은 자원을 감시하고 제한하는 기능이다. 



3. 이미지와 컨테이너 관계

                                  
      docker run     172.17.0.2:8080     docker stop                             docker rm        
                 ──────> [Web_A 컨테이너] ──────> [Web_A 컨테이너] ──────> 컨테이너 삭제
         |             <──────
    [A 볼륨]          docker start

#Nginx 이미지#            #컨테이너 실행중#      #컨테이너 중지#


      docker run     172.17.0.3:8090     docker stop                             docker rm        
                 ──────> [Web_B 컨테이너] ──────> [Web_B 컨테이너] ──────> 컨테이너 삭제
         |             <──────
    [B 볼륨]          docker start

'메가IT아카데미 국기과정 > 도커와 쿠버네틱스' 카테고리의 다른 글

[1-5] Docker 이미지 업로드  (0) 2022.09.13
[1-4] Docker 이미지 관리  (0) 2022.09.13
[1-3] Docker 구동  (0) 2022.09.13
[1-2] Docker 설치  (0) 2022.09.13
[목차] 도커와 쿠버네티스  (0) 2022.09.11