docker
우리 회사는 docker를 쓰지는 않지만 훗날을 위해 docker를 공부하려 한다.
첨에 들었을땐 이게 뭐지 싶었는데 공부하다 보니 흥미가 가고 사용을 안 하는 곳이 거의 없다고 한다.
서버 설치는 window는 지겹도록 했고 리눅스는 윈도우 환경에서 테스트 용으로 wsl을 설치했고 aws가 전부다...
보고 하는데도 오류가 나고 계속 났지만 결국에 서버를 띄울 때 쾌감이 엄청 났던 것 같다.
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이라고 한다.
컨테이너라고 하면 화물 컨테이너가 생각나는데 그거랑 비슷하게 다양한 프로그램, 환경을 컨테이너로 추상화하고 어느 pc, 클라우드에서 실행할 수 있게 만들어졌다고 한다.
컨테이너는 가상화 기술이지만 기존과는 다른 방식이다
기존의 호스트 가상화는 OS를 가상화하는 것으로 호스트 OS(물리 머신위에 직접 동작하는 OS) 위에 게스트 OS(Host 위에서 동작하는 가상화 머신에 설치된 OS) 전체를 가상화하는 방식이다. 사용법이 간단하지만 무거운 게 단점이라고 하고(보안에는 더 좋다고 한다) VM Workstation, MS Virtual Sever, Virtual Box 등이 이에 해당한다.
하이퍼바이저(Hypervisor)란?
하드웨어의 물리적인 리소스들을 가상머신(VM)들에게 제공하고 VM과 하드웨어간의 I/O 명령을 처리한다.
※ I/O : Input Output ※
그다음은 하이퍼바이저 가상화가 있는데 호스트 OS를 필요로 하지않는 타입의 가상화이다.
전가상화와 반가상화가 있는데
전가상화는 하이퍼바이저라는 소프트웨어를 물리 하드웨어 위에 직접 작동시켜, 하이퍼바이저 위에 게스트 운영체제를 설치해서 움직이게 하는 것이다. 호스트와 다른 것은 가상머신이 독립적인 호스트처럼 작동하는 것이다. 하지만 하이퍼바이저가 모든 명령을 중재하기 때문에 성능이 느리다는 단점이 있다.
반가상화는 전가상화의 문제점인 성능 문제를 해결하기 위해 나온 기술로, 게스트 OS와 하드웨어 사이의 번역 역할을 하지 않고, 자원분배같은 관리적 문제만을 다룬다. 그래서 게스트 OS의 코드를 수정해서 가능하도록 만들어야 하는데 오픈소스인 OS만이 가능하다.
이제 도커가 해당되는 컨테이너 가상화인데, 호스트 OS위에 컨테이너관리 소프트웨어를 설치해서 논리적으로 컨테이너를 나누어 사용한다. 쉽게 물리적 서버 위에 컨테이너를 만들고 어플리케이션을 작동하기 위해 필요한 라이브러리나 애플리케이션을 하나로 모아 컨테이너 안에 집어넣어 컨테이너 하나가 별도의 서비인 것처럼 사용할 수 있게 하는 것이다.
도커에서 가장 중요한 것은 컨테이너와 이미지라는 개념인데
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다. 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너가 어떻게 돼도 이미지는 변하지 않고 남아있는다. 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있어서 의존성을 넣든 뭐를 설치할 필요가 없다. 그래서 이미지는 용량이 엄청난데 뭔가를 추가할 때마다 다운로드하면 비효율적이라 이를 해결하기 위해 레이어라는 개념을 사용한다.
기존에 ubuntu 이미지가 a+b+c라면 ubuntu이미지를 베이스로 만든 nginx이미지는 a+b+c+nginx가 된다. webapp 이미지를 nginx기반으로 만들면 위에 보이는 것처럼 위에 +가 된다, 그래서 webapp 소스를 수정하면 새로운 source 레이어만 다운로드하면 되기 때문에 효율적이다.
도커는 이미지를 만들기 위해 Dockerfile이라는 파일에 DSL언어(공부할게 많다...)를 이용하여 이미지 생성 과정을 적어서 의존성 패키지를 설치하고 그럴게 아니라 Dockerfile로 관리하면 된다.
그리고 위에 말했듯이 도커 이미지의 용량은 엄청난데 도커는 Docker hub로 무료로 관리해준다고 한다.
어쩌다 보니 설명이 길어졌는데 이 정도로만 하겠습니다.
틀릴 수도 있고 모르는 것도 아직 많은데 공부가 절실하다는 게 느껴지네요...
읽어주셔서 감사합니다