본문 바로가기

리액트 네이티브

[Docker 실습] 동빈나 강좌

https://www.youtube.com/watch?v=HbKCxBFT2wk&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx 

 

 

 

https://khj93.tistory.com/entry/Docker-Docker-%EA%B0%9C%EB%85%90

 

[Docker] Docker의 개념 및 핵심 설명

  Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다. 현재 Docker 0.9버전 부터는 직접 개발한 libcontainer 컨테이너를 사용하고 있다.  가상화를 사용하는 이유

khj93.tistory.com

 

 

 

 

 

 

Docker가 꼭 MSA를 위한 기술은 아닙니다. 테스트, 스테이징, 배포 등 여러 용도로도 사용할 수 있습니다.

단, 중요하게 봐야할 관점은 Docker를 사용하면 IaC(Infrastructure as Code)가 가능 하다는 점이라고 생각합니다.

이제 앞으로 여러 실습들을 진행하면서 Docker로 컨테이너를 만들어서 사용해 보면… 그냥 애플리케이션을 담은 가상화된 공간? 분리된 공간? 혹은 운영체제 위에 운영체제? 그냥 이정도로 보일 수 있습니다.

그런데 Docker의 진짜 큰 힘은 인프라를 코드화해서 관리할 수 있다는 점 입니다.

 

 

Docker를 이해하는데 있어서 Container에 대한 이해가 필요 합니다.

컨테이너는 Host OS 상에서 리소스를 논리적으로 구분하여 마치 별도의 서버인 것 처럼 사용할 수 있게 하는 기술 입니다. 이게 논리적으로 구분한다는게 중요한데… 물리적으로 구분하지 않기 때문에 쉽게 없애고 다시 생성하고 할 수 있는 것 입니다. 이런 면에서 가볍다고 표현할 수 있습니다.

예시가 정확하지는 않지만… 쉽게 비유를해서 생각해보면 건물(물리적 리소스)에서 벽을 치고 공간을 구분해서 음식점, 술집, 부동산, PC방, 사우나 등 용도에 따라 전기세, 수도세, 자리세(논리적 리소스)를 각각 사용한 만큼 내고 같은 이름의 직원을 고용해도 구분하기 쉬운 것 처럼 각 컨테이너들은 할당 받은 리소스를 이용하고 같은 포트를 사용해도 구분이 가능합니다.(건물을 분리하는 것은 어렵지만… 내부 공간은 인테리어를 통해 바꾸는 것은 쉽다는 가정)

컨테이너는 목적에 따라 논리적인 구분들 두고 사용한다.

이렇게 구분해서 컨테이너를 사용하는 이유는 아래와 같다.

  • 여러 애플리케이션에서 사용하고 있는 라이브러리나 미들웨어의 버전에 대한 충돌을 회피
  • 이식성과 확장성이 좋다
    • 컨테이너 이미지 그대로 의존성 없이 다른 환경에서 실행 가능
    • 컨테이너를 여러 개 실행해서 이중화 가능
  • 다양한 운영 환경을 지원할 수 있다
    • Windows 환경에서 Linux를 실행하거나 그 반대도 가능

 

 

 

 

 

Docker이미지

컨테이너를 생성하는 Base가 되는 것이 이미지 입니다. 이미지는 컨테이너를 실행하는데 필요한 모든 것을 포함하고 재사용이 가능하다. 약간 클래스와 인스턴스의 개념이나, 붕어빵 틀과 붕어빵으로 생각하면 쉽게 접근할 수 있다.

 

 

 

 

애플리케이션을 컨테이너화 했을 때 개발과 배포의 흐름이 매우 간단해져서 빠르게 진행될 수 있는 것을 확인할 수 있습니다. 서버의 운영체제나 미들웨어의 의존성에 대해 걱정할 필요없이 Docker만 설치되어 있다면 모든 것이 해결됩니다.

더불어 컨테이너에 대한 관리를 Dockerfile, docker-compose나 더 나아가 kubernetes를 사용하면 인프라가 코드화되어 편리하게 관리할 수 있다.

이렇게 편한데 Docker가 인기 없을 이유가 없다.