학습주제
학습내용
다른 사람이 가져다 쓰거나, 프로덕션, 테스트 환경에서 안돌아감
라이브러리 충돌
설치 프로그램 있을텐데 파일이 빠질 수도 있음.
환경설정이 안맞거나 등등.. 하나라도 안되면 안돌아감.
내 개발 환경을 그대로 패키징해서
이미지: 소프트웨어를 완전한 형태로 모든 디펜던시 라이브러리 포함한 패키징.
-> 이걸 만드는건 빌드
호스트 컴퓨터에서 실행하려면 도커 엔진 위에서 돌게됨. OS, 타 컨테이너와 별도로 분리된 공간에서 돌게됨.
다른 호스트 OS와 컨테이너와 충돌이 생기지 않음. VM과 비슷한 컨셉. 훨씬 가벼원. VM은 자체 OS를 갖고있기 떄문에 무거움. 도커는 맥 운영체제가 돌텐데 그 위에 엔진 그위에 컨테이너 다수가 돌 수 있음.
VM 각각에 본인들의 OS, 속도, 라이센스 이슈가 있음.
환경이 똑같이 않더라도, 컨테이너라는 분리된 공간을 만들어서 돌릴 수 있음.
리눅스로 돌아가게 만든 도커 이미지라면 거진 돌아감. 서버 아키텍쳐 , x86, ARM 등등에 따라 조금 차이 있음.
도커 이미지를 어떻게 넘겨주지? 이미지 레지스트리가 있음. 남에게 넘겨야 한다면 레지에 업로드 하고, 다운로드 하는 형태로 사용하게 됨. 다양한 명령들이 있음
docker-compose up 다수 컨테이너 구성된 앱이 있을 때 편리하게 사용.
소프트웨어를 일관되게 빌드하고 실행하고 배포
도커 파일에 어떤 디펜던시가 있고, 환경변수 세팅있고를 적어놓고 이걸 가지고 빌드를 하면 도커컨테이너 형태로 실행시켜줄 수 있음.
다른 사람들이 사용해야한다면 레지스트리에 업로드.
엑세스 권한이 있으면 받아서 자기의 도커 컨테이너에서 사용
서버가 프로덕션 서버일수도 있고, 개발환경, 등등
VM과 어떻게 다를까?
AWS에서 EC2가 대표적인 VM 가상 컴퓨터.
차이점: 호스트 운영체제가 있고 그 위에 하이퍼바이저라는 VM 생성 관리 소프트웨어 올라가고 그 위에 다수의 VM이 올라갈 수 있음.
VM 은 자체 OS 갖고있음. 컴퓨터마냥. 컴퓨터 하드웨어를 추상화해서 하드웨어 안에 다른 하드웨어가 존재. 몇가지 치명적 단점 있음.
윈도우 10, 레드햇 같으면 과금해야함.
OS가 별도로 있는 경우 시간이 좀 걸림. OS위에 OS가 올라가다보니 자원을 많이 잡아먹음.
장점.
VM 단에서 다수의 소프트웨어를 하드웨어 충돌이슈 없이 사용 가능.
도커 컨테이너는 약간 호환 이슈가 있을 수 있음. 말그대로 새로운 서버를 만들어냈기 때문에 VM은 문제가 없음. 소프트웨어 호환성 측면에선 좋음.
이전엔 VM를 많이 썼음.
도커 나온 뒤에는 밀려버림. VM은 호스트 단에서 배포해야하는 관점에선 필요, 서비스 관점에선 도커로 충분
자체 파일 시스템 볼륨이 있음
호스트 운영체제가 있고 도커 엔진만 돌아간다면 경량화된 형태로 컨테이너 기술이 들어감. 클라이언트라고 부름. 많은 기능들을 도커 엔진에 의존하고 있음.
맥의 경우 리눅스만 지원함. 경량화된 도커 엔진 자체가 VM이 경량화된 형태. 도커 엔진이 그냥 애플리케이션이 아니라 리눅스가 돌아가는 일종의 VM
윈도우의 경우 윈도우, 리눅스 다 지원
리눅스의 경우 리눅스 지원
결국 도커 소프트웨어는 리눅스인 경우 다 돌아감.
윈도우라면 윈도우 호스트에서만
단점 CLI 만들긴 좋은데, GUI 앱을 만들기엔 제약이 있음.
리눅스 관계된 서비스 만들어서 실행하고, 쿠버네티스에서 돌려봄
장점.
독립적 분리된 공간. 라이브러리, 모듈 충돌 없음
자원 소비가 적음. 몇백개의 컨테이너 실행가능
호스트 OS. 별도 비용 없고 빠르게 실행됨.
단점.
컨테이너 많이 쓰는게 추세가되고 몇백개 돌리다보니 이걸 관리하는게 쉽지 않음.
도커는 VM처럼 어느 운영체제 다 되는게 아니라 호스트 OS에 따라 지원 OS가 달라짐. 크로스 플랫폼이 약함. 리눅스 개발관점에선 별 문제 없음.
왼쪽 VM
유틸라이제이션, CPU, 부팅속도 오래걸림
오른쪽 도커
모든게 가벼움
다수 서비스, 다수 서버를 써야할 때 좋은 솔루션이됨. 분리 공간 제공.
같은 서버 사양이라면 도커에 비해 VM은 실행 갯수가 적어짐. 두개 비교해보면 VM은 자체 OS를 갖고 있음 guest OS라 부름. 도커는 도커 엔진만 있으면 그 위에서 돌아감 엔진은 운영체제가 아님. 매킨도시의 경우 엔진 자체가 리눅스 기반 VM임.
VM 호스트 OS - 하이퍼바이저(VM 관리자) - VM
다수 컨테이너 관리 - 쿠버네티스 - 오케스트레이션