개발 무지렁이

[Docker] 컨테이너를 생성하고 관리하는 도구인 도커(Docker)와 이미지 : 컨테이너 = 프로그램 : 프로세스 본문

Backend/Docker

[Docker] 컨테이너를 생성하고 관리하는 도구인 도커(Docker)와 이미지 : 컨테이너 = 프로그램 : 프로세스

Gaejirang-e 2023. 6. 27. 18:22

𐂂 '도커(Docker)'란 무엇일까?
'컨테이너'생성하고 관리하기 위한 '도구'다.

컨테이너란 무엇일까
애플리케이션 코드와 해당 코드를 실행하는데 필요한 종속성도구가 포함된
'표준화된 소프트웨어 유닛(small package)'이다.

🎯 목적:
동일한 코드동일한 종속성 도구가 있는
동일한 컨테이너
동일한 버전을 사용하는 동일한 런타임
항상 동일한 동작과 결과를 제공한다는 이점이 있다.
즉, 동일한 환경에서 동일한 애플리케이션실행할 수 있다.

⚠️ 컨테이너'stand alone(독립적)'으로 작동한다.
⚠️ 여기서 도커(Docker)컨테이너를 구축(생성하고 관리)하기 위한 도구일뿐이다.

똑같은 개발환경을 갖는 것은 상당한 가치가 있다.
로컬 환경, 개발 환경에만
애플리케이션동작하는데 필요한 버전(version)의 프로그램이 설치되어있다면,
이 애플리케이션호스트되어야하는 서버의 일부 원격시스템배포할 경우,
해당 원격시스템에는 해당 버전의 프로그램이 없어
더 이상 동작하지 않을 수 있다.

하지만, 특정 버전의 실행환경도커 컨테이너고정한다면
애플리케이션항상 정확한 버전에서 실행될 수 있도록 한다.
즉, 항상 같은 환경을 사용한다는 '🧩 재현성'을 구현할 수 있다.
(관리하고 설치해야하는 더 복잡한 종속성이 있는 경우 더 가치가 있다)

컨테이너를 만듦으로써 애플리케이션 코드와,
코드가 필요로하는 모든것을 포함하는 환경을 가져
어디서나 동작하는 애플리케이션을 구현할 수 있다.

⚠️ 프로젝트가 여러개인 경우, 프로젝트를 전환할 때마다 버전에 맞는 환경구성하는데 용이하다.
⚠️ 애플리케이션에 종속된 실행환경이 호스트 컴퓨터가 아닌 각각의 컨테이너에 구현되어 있게 한다.
⚠️ 캡슐화가상 운영체제를 지닌 버츄얼 머신(virtual machine)으로도 문제를 해결할 수 있지만
버츄얼 머신에서 발생하는 오버헤드(메모리, CPU, 하드 드라이브 공간)는 크다.
하나의 애플리케이션 환경 구축을 위해 조그마한 컴퓨터 전체캡슐화하는 것은 성능 상에도 좋지 않다.
  또한, 똑같은 방식으로 프로덕션(Production) 머신도 구성해야 한다.

🐋 도커 컨테이너
하나의 머신에 가상의 머신을 여러개 설치하는 것이 아닌,
운영체제(os)내장 컨테이너작동하도록 처리한다.
그 위에 도커 엔진이라는 도구를 실행한다.
도커 엔진을 기반으로 각각의 도커 컨테이너가동할 수 있다.

도커구성파일을 사용하여, 컨테이너구성하고, 이를 공유하여 재구성할 수도 있다.
또한, 이미지에 빌드하여 그 이미지공유하여, 모든 사람이 동일한 컨테이너(실행환경)를 가질 수 있도록 할 수 있다.
즉, 구성파일이미지가 있기 때문에, 공유, 재구축 및 배포가 매우 쉬워진다.
(애플리케이션실행하는데 딱 필요한 것들만 캡슐화한다)

𐁍 이미지(Image)컨테이너
이미지컨테이너블루프린트로서 (템플릿코드와 애플리케이션을 포함),
모든 설정명령 및 도구와, 모든 코드가 포함된 공유가능한 패키지를 말한다.

즉, 이미지를 기반으로 컨테이너를 만들고 실행한다.
한번만 정의해놓으면, 다른 시스템과 다른 서버에서 여러번 실행할 수 있다. (똑같은 많은 컨테이너를 만들 수 있다)
컨테이너그러한 이미지구체적인 실행 인스턴스를 말한다.(실행 애플리케이션)

도커에서 이미지와, 이 이미지실행시킨 컨테이너
프로그램과 프로그램을 실행시킨 프로세스 개념과 유사하다.

❓ 프로그램과 프로세스
: 프로그램(정적인 로직, in 디스크📀), 프로세스(실행중인 로직, in 메모리)
: 프로그램 한개를 설치하면 동시에 N개의 프로세스실행 가능하다.
Comments