롸?

도커 입문 공부1 본문

WEB/Docker

도커 입문 공부1

허니버터새우깡 2021. 11. 12. 13:22

도커란?

도커(Docker)는 2013년에 등장한 컨테이너 기반 가상화 도구. 

도커는 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줌. 도커를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있다. 

 

헷갈렸던 부분 = 기존 가상화기술과 다른 점

기존에 알고 있던 가상머신(Virtual Machine)은 호스트os 위에 가상화된 하드웨어와 os를 구축함으로써, 호스트와는 다른 환경을 구축하는 방식. 하드웨어를 소프트웨어로 에뮬레이션 하는 가상머신은 시스템 분리를 통한 프로세스 격리 관점에서는 아주 후한 점수를 줄 수 있지만, 단순히 프로세스를 실행하기 위한 환경으로서는 성능이 떨어지는 것은 물론이며 용량도 매우 커지는 단점을 가지고 있다.

기존 가상머신 가상화 VS 컨테이너 가상화

 

컨테이너는 하드웨어를 소프트웨어로 재구현하는 가상화와는 달리 프로세스의 실행 환경을 격리한다. 컨테이너가 실행되고 있는 호스트 입장에서 컨테이너는 단순히 프로세스에 불과하지만, 사용자나 컨테이너 입장에서는 호스트와는 무관하게 동작하는 가상머신처럼 보이기 때문에 컨테이너형 가상화라고 부르기도 한다. 

 

컨테이너(Container) 이해하기

격리된 상황에서 실행되는 프로세스

도커 허브에서 centos 컨테이너를 실행하는 것은 다음과 같은 두 단계를 거친다.

  1. 도커 레지스트리에서 centos 이미지를 풀 받아서 로컬로 다운로드 받는다.
  2. 이 이미지를 통해서 컨테이너를 실행한다.

이 중에서 두번째 단계에 대해 좀 더 자세히 보자.

이미지는 어떤 환경이 구성되어있는 상태를 저장해놓은 파일 집합이다. 바로 이 이미지의 환경 위에서 특정한 프로세스를 격리시켜 실행한 것을 컨테이너라고 부른다. 컨테이너를 실행하려면 반드시 이미지가 있어야 한다.

 

이미지는 파일들의 집합
컨테이너는 이 파일들의 집합 위에서 실행된 특별한 프로세스

컨테이너는 docker run을 통해서 실행할 수 있으며, 셸을 실행하기 위해서는 -it 옵션을 붙이면 된다.

이렇게 실행하면 셸 프롬프트가 centos 환경에 접속한 것처럼 변화하게 된다. 마치 다른 서버에 SSH프로토콜을 사용해 접속한것 같지만 사실은 호스트OS와 격리된 환경에서 bash 프로그램을 실행했다고 이해하는 것이 더 정확하다. 때문에 컨테이너를 실행한 다음 exit 으로 셸을 종료하면 배시 셸 프로세스가 종료되어서 컨테이너도 종료가 되는 것이다.

더보기

SSH는 외부에서 접속하기 위해 설치해두는 서버 프로세스. 따라서 SSH 서버에 접속해서 셸을 사용하고 종료하더라도 SSH 서버는 그대로 살아서 다른 접속을 기다린다. 겉보기에는 비슷하지만 도커로 셸을 직접 실행해서 사용하는 것과 외부 서버에 SSH로 접속하는 것의 차이를 명확하게 이해해야 도커 컨테이너와 가상머신이 헷갈리지 않을 수 있다.

 

 

이미지와 컨테이너는 다르다.

만약에 컨테이너에서 무엇이든 설치하고 설정하고 뭘하던 간에, 이미지에는 아무런 변화도 생기지 않는다. 아주 간단한 예로 비교해보자면, 윈도우 CD로 윈도우를 설치해서 사용한다고 설치한 윈도우CD에 어떤 변화가 생기지 않는 것과 같은 이치. 이미지는 어디까지나 고정되어있는 불변한 저장매체이다. 

이미지는 불변이지만, 그 대신 도커에서 이 이미지 위에 무언가를 더해서 새로운 이미지를 만들어내는 일이 가능하다. 이미지를 기반으로 만들어진 컨테이너는 변경 가능(Mutable) 하기 때문이다. 도커의 또 하나의 중요한 특징이 바로 계층화된 파일 시스템을 사용한다는 점이다. 특정한 이미지로부터 생성된 컨테이너에 어떤 변경사항을 더하고(파일들을 변경하고), 이 변경된 상태를 새로운 이미지로 만들어내는 것이 가능하다. 도커의 모든 이미지는 기본적으로 이 원리로 만들어진다. 바로 이러한 점 때문에 도커에서는 저장소=Repository, 풀=Pull, 푸시=Push, 커밋=Commit, 차분=Diff 등 VCS에서 사용하는 용어들을 차용한 것으로 보인다.

 

 

출처 and 참고
 - https://www.44bits.io/ko/post/easy-deploy-with-docker
 - https://tech.ktcloud.com/69?category=465864
 - https://www.popit.kr/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%B2%98%EC%9D%8C-docker-%EC%A0%91%ED%95%A0%EB%95%8C-%EC%98%A4%EB%8A%94-%EB%A9%98%EB%B6%95-%EB%AA%87%EA%B0%80%EC%A7%80/

'WEB > Docker' 카테고리의 다른 글

Dockerfile 명령어 RUN, CMD, ENTRYPOINT 차이  (0) 2021.12.21
컨테이너 개념 이해하기  (0) 2021.12.06
Comments