Develop faster. Run anywhere.
Docker: Accelerated, Containerized Application Development
Docker란 무엇입니까? | AWS (amazon.com)
도커와 도커 컨테이너의 이해
"수년 동안 애플리케이션과 종속물(종속성)을 분리해 체계화할 때 많이 사용한 방법 중 하나는 각 애플리케이션을 각각 가상 머신에 배치하는 방법이었다. 가상 머신을 이용하면, 동일한 물리적 하드웨어에서 여러 애플리케이션을 실행시키고, 소프트웨어 구성 요소 간 충돌과 하드웨어 리소스 경합을 최소한으로 유지할 수 있다. 그러나 가상 머신은 그 크기가 일반적으로 기가바이트급이다. 이식성(이동성), 소프트웨어 업데이트, 지속적인 통합과 전달(Continuous Integration, CI/ Continuous Delivery, CD) 같은 문제 해결에도 도움을 주지 못한다.
여기에 도커(Docker) 컨테이너가 필요하다. 컨테이너를 활용하면, 운영체제 커널을 공유하는 작고 가벼운 실행 환경으로 애플리케이션을 분리시킬 수 있다. 통상 메가바이트급 크기인 컨테이너는 가상 머신 보다 리소스를 훨씬 적게 사용하고, 그 즉시 시작할 수 있다. 동일한 하드웨어에서 훨씬 더 높은 밀도로 패키징할 수 있으며, 훨씬 적은 노력과 비용으로 대량 축소 및 확장할 수 있다는 장점이 있다.
즉, 컨테이너는 소프트웨어 구성 요소를 현대적인 엔터프라이즈 환경에 필요한 다양한 애플리케이션과 서비스 스택으로 통합하고, 이런 소프트웨어 구성 요소를 계속 업데이트된 상태로 유지 및 관리할 수 있는 아주 효율적이고 점진적인 메카니즘을 제공한다."
" 컨테이너에 변화를 가져온 도커
첫 번째 리눅스 컨테이너 기술인 LXC는 단일 호스트에서 여러 분리된 리눅스 시스템을 실행시키는 리눅스 운영체제 수준의 가상화 기법이다. 네임스페이스와 cgroups가 LXC를 작동하게 만든다.
컨테이너는 운영체제에서 애플리케이션을 분리시킨다. 사용자가 깔끔하고 최소화된 리눅스 운영체제를 운영하면서, 다른 모든 것을 하나 이상의 분리된 컨테이너에서 실행시킬 수 있다는 의미다. 컨테이너에서 운영체제를 분리하기 때문에 컨테이너 런타임 환경을 지원하는 모든 리눅스 서버로 컨테이너를 옮길 수도 있다.
도커는 LXC에 컨테이너의 이동성과 유연성을 높이는 몇 가지 중요한 변화를 가져왔다. 도커 컨테이너를 사용하면, 가상 머신을 사용했을 때보다 더 쉽고 빠르게 워크로드를 배포, 복제, 이동, 백업할 수 있다. 도커는 컨테이너를 실행시킬 수 있는 모든 인프라에 클라우드 같은 유연성을 제공한다.
도커는 또 특정 컨테이너에서 실행될 소프트웨어와 방식에 대한 ‘사양’인 컨테이너 이미지를 생성할 수 있는 기능을 제공한다. 개발자는 도커의 컨테이너 이미지 도구를 사용해 이미지 라이브러리를 빌드하고, 이미지들을 새 이미지로 변환하고, 로컬이나 원격 인프라에서 이미지로 앱을 런칭할 수 있다.
또 더 쉽게 컨테이너 간 동작을 조율하고, 이를 통해 컨테이너를 연결해 애플리케이션 스택을 빌드할 수 있다. 이것의 발전된 개념이 컨테이너 오케스트레이션(container orchestration)이다. 이는 쿠버네티스(Kubernetes) 같은 서드파티 제품들이 제공하지만 그 '토대'는 도커가 제공한다.
도커 개발자들은 LXC 개념을 토대로 API와 생태계를 구축, 개발자들이 컨테이너를 훨씬 더 쉽게 활용할 수 있도록 만들었다. 또 기업에는 유용성을 높였다. 마지막으로 도커 팀은 처음에는 LXC를 기반으로 도커를 개발했지만, 나중에 리브컨테이너(Libcontainer)라는 자체 런타임을 만들었다. 이 리브컨테이너는 컨테이너에 더 풍부한 서비스 계층을 제공하며, 도커 팀이 더 쉽게 리눅스와 별개로 도커 컨테이너 기술을 개발하도록 도와준다. 현재 도커는 효율적으로 컨테이너를 생성, 출하, 실행할 수 있는 리눅스나 윈도우 유틸리티다.
도커의 이점
도커 컨테이너는 기존 기술보다 더 쉽게 통합과 유지, 이동을 할 수 있는 엔터프라이즈 및 LoB 애플리케이션 빌드 방법을 제공한다.
- 도커 컨테이너, '분리'와 '조절' 기능 제공
도커 컨테이너는 앱을 서로, 그리고 기반이 되는 시스템으로부터 계속 분리시킨다. 이런 방식으로 더 깔끔한 소프트웨어 스택을 구현한다. 동시에 더 쉽게 분리된 특정 애플리케이션의 CPU와 GPU, 메모리, I/O, 네트워킹 등 시스템 리소스 사용 방식을 규정할 수 있다. 데이터와 코드를 계속 분리해 유지하는 것도 훨씬 더 쉽다.
- 이식성을 제공하는 도커 컨테이너
도커 컨테이너는 컨테이너 런타임 환경을 지원하는 모든 장치에서 실행된다. 애플리케이션을 호스트 운영체제와 연결할 필요가 없다. 따라서 애플리케이션 환경과 기반이 되는 운영 환경을 깔끔하게 최소한으로 유지할 수 있다.
원문에서 더 많은 내용을 볼 수 있다 >>
도커와 도커 컨테이너의 이해 - ITWorld Korea
쿠버네티스 [Kubernetes]
클라우드화된 애플리케이션을 빠르게 자동적으로 배포하고, 컨테이너들의 오케스트레이션(orchestration), 스케일링 등을 제공하는 컨테이너 관리 시스템.
* 오케스트레이션(orchestration)은 컴퓨터 시스템과 서비스, 애플리케이션 설정을 자동화하여 컴퓨팅 자원을 관리하고 조정하는 것으로 ‘컨테이너 오케스트레이션’은 컨테이너의 배포, 관리, 확장을 자동화하는 것을 의미한다.
기존 가상 컴퓨터(VM) 기반의 클라우드 서비스는 애플리케이션을 가상화된 서버에 배포․실행 및 개발되어 CPU, 메모리 등 많은 자원을 사용하고 가상 컴퓨터를 기동할 때 시간이 오래 걸리는 문제점들이 있었다. 이러한 문제점들을 해결하기 위해 가상 컴퓨터와 대비하여 소모 자원이 적고, 시동 시간이 짧은 컨테이너 기술이 등장하였다. 이를 기반으로 많은 수의 클라우드 서비스를 자동으로 관리하기 위한 공개 소프트웨어(OSS: Open Source Software) 프로젝트들이 나타났다. 그중 구글이 2014년에 내부적으로 사용하던 Borg 시스템을 바탕으로 만들어 공개한 OSS가 쿠버네티스다.
* 쿠버네티스는 그리스어로 ‘키잡이’를 뜻한다.
쿠버네티스는 하드웨어(HW) 등 네트워크 인프라를 내부에 자체 보유한 온프레미스(on-premise) 환경뿐만 아니라 하이브리드(hybrid), 외부 클라우드 환경에서도 운영할 수 있다. 마이크로 서비스 아키텍처(MSA: MicroService Architecture) 방식에 최적화되어 대규모 클라우드 서비스를 운영하는 데 유리하고 마이크로 서비스별로 독립적으로 실행되고 운영•관리할 수 있다.
쿠버네티스는 2015년부터 클라우드 네이티브 컴퓨팅 재단(CNCF)의 산하 프로젝트로 포함되어 구글, 마이크로소프트, 아마존 등 글로벌 기업들과 개인 개발자들이 공개 소프트웨어 방식으로 업데이트하고 관리한다. 또한 상업적 서비스가 중단되지 않도록 지속적으로 클라우드 플랫폼에 배포한다.
쿠버네티스는 기계학습(ML: Machine Learning), 심층 기계학습(deep learning), 5세대 이동통신(5G) 등 고성능 분산 컴퓨팅 환경이 필요한 기술에 활용도가 높다. 넷플릭스(Netflix), 아디다스(Adidas), 핀터레스트(Pinterest) 등의 기업들이 쿠버네티스 위에서 동영상 스트리밍, 쇼핑, 소셜 네트워킹 서비스(SNS), 게임 등의 서비스를 제공한다.
* 클라우드 네이티브 컴퓨팅 재단(CNCF: Cloud Native Computing Foundation): 쿠버네티스를 기반으로 컨테이너 애플리케이션을 운용할 때 필요한 다양한 개발자 도구들을 공동 개발하는 리눅스 재단의 오픈 소스 단체
(IT용어사전, 한국정보통신기술협회)
쿠버네티스와 컨테이너, 도커에 대한 기본 개념
"먼저 컨테이너부터 살펴보죠. 컨테이너란, 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술이에요.
여러분이 PC에 프로그램을 설치할 때를 떠올려보세요. 특정 경로에 맞춰 설치를 해야 하거나, 내 컴퓨터에 필요한 옵션을 일일이 맞춰주느라 설치 과정에서 힘들었던 경험이 있을 텐데요. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와주는 기술입니다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있어요.
컨테이너를 사용할 때 필요한 도구가 컨테이너 런타임입니다. 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구인데요. 종류도 여러 가지가 있어요. 그중 가장 유명한 것이 도커죠. 물론 도커가 사용하는 컨테이너 규격은 표준화되어 있기 때문에 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있습니다.
쿠버네티스는 컨테이너 런타임을 통해 컨테이너를 다루는 도구를 말해요. 쿠버네티스가 해 주는 일은 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등입니다. 이것을 컨테이너 오케스트레이션이라고 하죠.
Q. 쿠버네티스가 컨테이너를 다루는 도구라면 도커를 다루는 도구는 아니란 말이네요?
A. 네 앞에서 언급했듯이, 쿠버네티스의 역할은 컨테이너를 분산 배치, 상태 관리 및 컨테이너의 구동 환경까지 관리해 주는 도구이고, 도커는 컨테이너를 다루는 도구(컨테이너 런타임) 중 하나입니다. 쿠버네티스는 컨테이너를 다루기 위해 도커 이외에도 다양한 컨테이너 런타임 소프트웨어를 사용할 수 있습니다.
Q. 쿠버네티스를 검색하면 가상머신과 컨테이너 비교에 대한 그림이 매번 나오는데 이해가 잘 안돼요. 쉽게 설명해 주실 수 있을까요?
A. 음.. 어떤 그림인지 알 것 같아요. 아래 '애플리케이션 배포 환경의 변화'를 말하는 거죠?"
쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념 | 인사이트리포트 | 삼성SDS (samsungsds.com)
정적 페이지와 동적 페이지
정적 페이지 (Static Page)
데이터베이스에서 정보를 가져오거나 별도의 서버에서의 처리가 없어도, 사용자들에게 같은 내용을 보여주는 페이지.
정적인 요소에는 Html, Css, Js, Image 같은 요소들이 있습니다. Js는 클라이언트 단에서 Html과 Css 와 같은 요소들을 컨트롤 하는데 쓰입니다. 파일의 형태로 보내기 때문에 정적인 요소로 봐도 무방하다고 생각합니다.
동적 페이지 (Dynamic Page)
서버에서 데이터베이스에서 정보를 가져와서 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 해당 결과가 포함된 파일을 보여주는 페이지. 사용자들마다 다른 페이지가 보여질 수 있습니다.
웹 서버 (Web Server)
클라이언트가 요청한 정적인 콘텐츠를 HTTP 프로토콜을 통하여 제공해주는 서버.
위에서 언급한 정적 페이지를 보내줍니다. 정적인 콘텐츠 제공이 가장 큰 역할.
다른 역할으로는 동적인 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 웹 서버에서 처리할 수 없기 때문에 컨테이너(Container)로 보내주는 역할을 한다. 웹 서버 : Nginx, Appach HTTP Server, IIS
컨테이너 (Container)
동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈
사용자에 따라 보여주는 정보가 다를 때 필요함. 사용자의 요청이 들어오면 웹 서버는 정적인 요소만 클라이언트 측에 보낼 수 있고, 동적으로 처리해야 하는 부분은 처리할 수 없습니다. 컨테이너는 동적인 부분을 대신 처리해서 웹 서버에 정적인 파일로 만들어서 보내주는 모듈 (php, ejs 소스코드 처리 후 클라이언트에 전송해 줌)
WAS (Web Application Server)
웹 서버로부터 오는 동적인 요청을 처리하는 서버
웹 서버와 컨테이너를 붙여놓은 서버
웹 애플리케이션 서버(Web Application Server, 약자 WAS)는 웹 애플리케이션 과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크 이다.[1] 인터넷 상에서 HTTP 를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어 (소프트웨어 엔진)으로 볼 수 있다. 웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행이 된다. 한국에서는 일반적으로 “WAS” 또는 “WAS S/W”로 통칭하고 있으며 공공기관에서는 “웹 응용 서버”로 사용되고, 영어권에서는 “Application Server” (약자 AS)로 불린다. - 위키백과
WAS에서는 대게 먼저 데이터베이스에서 데이터를 가져옵니다. 그 다음에 원하는 데이터를 가공하여, myinfo.ejs 파일로 해당 데이터를 보내줍니다. .ejs파일에서는 node.js 에서의 변수나 정보를 사용할 수 있게 만들어 놓았습니다. 정보를 넣어야 할 곳에 데이터베이스에서 가져온 정보를 넣고, ejs 파일을 html 로 바꿔준 다음에 웹서버로 전송합니다. (node.js 의 Javascript와 클라이언트의 UI를 동적으로 보여주는 Javascript는 다른 것이니 유의해서 봐주세요!)
웹 서버는 위의 html 요소를 클라이언트에게 다시 보내주는 것이죠. WAS에 Tomcat, Jeus 같은 것들이 있다고 합니다.
시간이 괜찮다면 원문을 봐야 함 ★
웹 서버와 WAS, 컨테이너의 개념 알아보기 - Easy is Perfect (melonicedlatte.com)