Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- web3.js
- React
- 비트코인
- ERC721
- Klaytn
- 클레이튼
- 정보처리기사
- 블록체인
- solidity
- 정보처리기사실기
- 페이지클론
- blockchain
- 정보처리기사실기요약
- Non-Blocking
- node.js
- github
- 2021정보처리기사실기
- it5
- 이더리움
- 콜백함수this
- 노개북
- 카카오페이지클론
- 솔리디티
- 카카오홈페이지클론
- 노마드코더
- it5분잡학사전
- git
- ERC-721
- ETH
- npm
Archives
- Today
- Total
Be lazy, Be crazy
왜 Docker인가? 본문
728x90
반응형
안녕하세요! 이번시간에는 Docker를 왜 사용하는지 알아봅시다.
그리고 이해도를 높이기위해 간단한 예제를 실습해 봅시다.
Container 왜 사용할까?
간단하게 현실에서 컨테이너를 사용하는 이유를 생각해 봅시다.
![]() |
![]() |
![]() |
![]() |
물자를 싣고 내릴 때에, 선박이 입항해 있는 시간을 획기적으로 단축 물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 대폭 감소 |
물자를 싣고 내릴 때에 선박이 입항해 있는 시간이 길다 물자를 싣고 내릴 때 필요한 인력이 많이 필요하다 |
다시말해서, "컨테이너를 사용하면 상대적으로 얻는 이점이 더 많다" 정도로 이해하고 넘어갑시다. |
Docker 왜 사용할까?
개발자들은 이와 같이 물자의 수송에 획기적인 단축을 가져다 준 컨테이너 기술을
"소프트웨어 수송, 즉 배포에 사용할 수는 없을까?" 하는 생각을 하기 시작했습니다.
그 결과로 리눅스 컨테이너(lxc)라는 것을 만들어내기에 이르렀습니다.
리눅스 컨테이너 기술은 그 자체로 훌륭하고 완성된 기술이었지만, 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 혹은 커뮤니티가 없었습니다. 2013년에 등장한 도커(Docker)는 바로 Docker Hub라는 소프트웨어 저장소와 함께 빠르게 성장했고, 그 결과 개발자들은 쉽게 애플리케이션을 포장하고, 컨테이너 방식으로 실행할 수 있게 되었습니다.
Docker - Container방식의 장점
➡️ 의존성 충돌 문제를 해결해 준다
➡️ 개발과 배포 환경을 일치시킨다
➡️ 수평 확장을 쉽게 해준다
➡️ 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
Example
어떤 애플리케이션은, 해당 애플리케이션을 실행하기 위해 반드시 어떤 환경이 구축되어 있어야 합니다. 쉽게는 윈도우용 프로그램을 실행하려면 윈도우 운영체제가 필요하듯 말입니다.
우리는 이와 같이 어떤 프로그램(A) 실행에 다른 프로그램(B)이 반드시 필요한 경우, "프로그램 A는 프로그램 B에 의존 관계를 가지고 있다"고 말합니다.
- 워드5(word5)라는 프로그램이, php라는 프로그램에 대해 의존 관계를 가질 때에, 특정 php 버전 요구
- 동일한 컴퓨터에 php를 반드시 필요로 하는 drupal이라는 프로그램을 실행 그러나 drupal이 php 6 버전 요구
- 워드프로세스 프로그램 <-> php7 || drupal 프로그램 <-> php 6 요구
- 일반적으로 한 컴퓨터에 여러 버전의 동일한 애플리케이션(php) 설치 불가
- 결국에는 php의 의존 관계를 가지고 있는 다른 두 애플리케이션(word5, dural) 중에 하나는 제대로 된 실행을 보장할 수 없습니다.
- 이런 상황을 우리는 "의존성이 충돌한다"라고 말합니다.
docker를 이용해서 해결
컨테이너 기술은 바로 이 문제를 해결합니다. 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성합니다. 즉, 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있다는 이야기입니다.
Docker - Container는 무엇을 격리하나?
컨테이너 기술을 바탕으로 한 컴퓨터 안에 여러 대의 컨테이너가 존재하고, 애플리케이션 실행 환경이 격리되어 있습니다.
하나의 컴퓨터 내에 서로 다른 버전의 php가 설치될 수 있는 것은, 컨테이너 하나하나가 애플리케이션 실행과 관련해서 높은 수준의 격리를 제공하기 때문입니다.
컨테이너는 무엇을 격리하고, 어떤 자원들을 독립적으로 소유할까요?
다음 세 가지를 기억하세요.
- 프로세스
1) 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있습니다.
2) 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
- 네트워크
1) 기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있습니다.
- 파일 시스템
1) 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
정리
"컨테이너 방식으로 애플리케이션을 실행한다"라는 개념이 아직은 잘 와닿지 않을 수 있습니다.
컨테이너 기술의 장점은 한마디로 얘기하면 다음과 같습니다.
실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다!
이는 달리 얘기하면, 애플리케이션 실행이 어떠한 환경에 구애를 받는다는 말입니다.
반응형
Comments