도커란
리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
계속 바뀌는 서버 환경과 개발 환경에 빠르게 대응할 수 있는 서버 플랫폼이다.
만약 PC 하나에 클라이언트와 웹서버 DB서버를 구성해야 된다면 어떻게 진행할 수 있을까??
아마도 PC의 저장공간은 나눈 뒤 각각 OS를 설치해서 한 가지만 선택하려 구동하는 멀티부팅 방식으로 구성해야 될 것이다. 아니면 AWS로 서버를 대여하던지 버추얼머신같은 가상머신을 이용해야 될 것이다.
위의 3가지 방법 모두 많은 리소스 발생한다. 또한 AWS 만 제외하곤 둘다 호스트 서버의 자원을 나눠 써야 됨으로 성능 저하를 일으킨다.
도커는 가상머신과 비슷한 개념으로 이해해도 좋다.
가상머신의 그림처럼 구성할 경우 웹서버와 DB서버를 만들기 위해 OS를 설치해야 되는 번거러움이 존재한다 또한 로컬의 리소스를 잡아먹기 때문에 성능적으로도 안 좋을 것이다.
여기서 도커와 가상머신의 차이점이 명확하게 드러난다.
도커는 컨테이너라는 독립된 영역에 필요한 환경을 구성할 수 있고 공유해야 될 부분은 호스트 커널을 공유해서 사용할 수 있다.
(OS를 같이 사용함으로 성능 및 저장공간에 여유가 존재함)
즉, 도커의 컨테이너 안에는 애플리케이션을 실행할 때 필요한 라이브러리와 실행파일만 존재하기 때문에 오직 작은 용량만으로도 컨테이너를 이미지로 만들 수 있다.
도커의 장점
프로젝트 별로 각각 다른 개발환경을 요구한다면 아마 컴퓨터에 요구하는 프로그램들은 다 설치하고 설정 값들을 별로도 변경하면 사용해야 될 것이다.
이때 도커를 사용하면 위에서 언급한 불편함을 최소한으로 줄일 수 있다.
1. 애플리케이션의 독립성
-> 호스트 OS와 다른 컨테이너와도 독립된 영역을 보장함으로 충돌이 발생할 가능성이 없다.
2. 서버 배포의 간소화
-> 컨테이너 내부에 작업한 후 배포를 하려면 도커 이미지로 패키지를 만들어 운영서버로 전달하기만 하면 된다.
3. 마이크로서비스 구조로 변경 쉬움
-> 컨테이너 하나당 하나의 기능만을 제공하는 모듈로 만들어서 부하가 많은 모듈은 여러 개로 더 만들고 하는 조정이 가능하다.
기본 용어 설명
앱스토어에서 앱 프로그램을 다운로드 받아 실행하듯이 도커 허브에서 이미지를 pull 받아서 run을 통해 실행시키는 방식이다.
도커를 이해하기 위한 기본 네트워크 개념
먼저 host라는 OS에 컨테이너로 웹서버를 구성할 수 있습니다. 각각의 컨테이너는 독립된 영역임으로 호스트와 별개로 File System과 별도의 Port를 갖고 있습니다.
호스트에 도커허브를 통해 httpd 이미지를 pull 받은 뒤 run을 통해 실행시킬 수 있는데 이때 -p 옵션을 통해 호스트의 포트와 컨테이너의 실행 애플리케이션의 포트를 연결해줍니다. (=port forwarding)
이렇게 포트를 연결하여 실행해주면 클라이언트에서는 호스트의 웹서버 도메인을 통해 웹서버의 파일에 접근 및 데이터를 응답받을 수 있습니다.
만약 컨테이너가 갑자기 삭제되면 어떻게 될까??
아마 작업했던 웹서버가 모두 사라지고 처음부터 다시 작업을 해야 될 것이다.
이때 만약 호스트 File System과 컨테이너 File System이 연결되어 있어 호스트에서 파일을 변경하면 바로 컨테이너에 반영되는 등 서로 동기화가 되어있다면 소스코드에 대한 버전 관리 및 개발 작업을 하기도 쉽고 보다 안전한 개발환경을 구축할 수 있을 것이다. 그러므로 컨테이너가 삭제되는 불의의 사고가 발생하더라도 유연하게 대처할 수 있다.
참고 강의
https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=1
'IT > 서버' 카테고리의 다른 글
MSA 개념 (0) | 2023.01.29 |
---|---|
Docker Compose를 이용하기 (0) | 2022.02.14 |
Docker Push (DockerHub, GitHub) (0) | 2022.02.14 |
Docker Commit & Build (0) | 2022.02.05 |
[AWS] EC2 Linux에 Docker 설치하기 (1) | 2021.12.19 |