-
[Docker] - Docker 기본 개념개발/Docker 2022. 7. 21. 18:22
1. Docker란?
VM환경과 유사하지만 Container 기반의 가상화 Tool입니다.
Container는 실행 환경을 독립적으로 해주며, 실행의 독립성을 확보하여 주는 OS의 격리 기술을 의미합니다.
Docker는 LXC(Linux Container)의 개념 을 가져와 사용합니다.
LXC는 Namespace + cgroup 기술을 기반으로 만들어진 것입니다.
namespace
Process를 독립시켜주는 가상화 기술입니다. ( 같은 PID를 가져도 다른 Process )
독립된 Process PID, IPC, Network, UID, Mount, UTS 가 독립적으로 존재
Cgroup
Control Group으로 Hardware resource를 배분하는 기능
독립된 프로세스에 Resource들을 할당해주는 기술로, Container에게 Resource들을 할당해주는 것입니다.
그렇게 아래 그림과 같이 VM과 차이가 발생하게 됩니다.
각 App에는 Bins/Libs가 존재하며 독립성이 확보되는 것입니다.
위와 같은 이유로 VM과 다른점이 생깁니다.
1. Process 격리성이 더 높아지고
2. Resource를 효율적으로 사용하여 Memory 사용량이 줄어듭니다.
3. Container 간에 Volume이 별도로 공유가 가능합니다. ( VM은 각 다른 OS이기 때문에 접근 불가 )
2. 왜 Docker를 사용해야 하는가?
일반적으로 한대의 Server를 사용하거나, 기존의 Server에서도 운영/배포하는데 문제가 없다면 사용해야 할 필요성을 못 느낄 수 있습니다. 그렇다면 도커가 가진 장점이 무엇이길래 Docker를 사용할까 찾아보았습니다.
정답은 = "Container"
Snowflake Server
Snowflake Server는 Os가 Install된 후 부터 소프트웨어 및 App을 업데이트하면서 매번 패치하게 된다.
이로 인해 서버는 지속적으로 업데이트 및 패치가 발생하게 되어 똑같은 서버 환경으로 구축하기 어려운 것을 의미한다.Server를 똑같은 서버 환경으로 만들기는 엄청나게 어려운 일입니다. 그래서 도커에서는 Dockerfile이라는 개념이 나오게 됩니다. 아래와 같은 이유로 실행 시점에 상관 없이 구성 시점을 고정을 할 수 있습니다.
결국 서버의 내용을 똑같게 만들 수 있습니다.
도커 파일 = 서버 운영 기록 코드화 도커 이미지 = 도커 파일 + 실행 시점
서버를 동일하게는 만들었지만, 서버에서는 완전하게 동일하게 하지 않아야 하는 부분도 존재합니다. Port , IP ..
이 부분을 Container에 추가만 해주면 됩니다.
기존에 다루기 어려웠던 서버를 이렇게 간단하게 구축이 가능할까요?
도커 파일 == 서버 운영 기록 도커 이미지 == 도커 파일 + 실행 시점 도커 컨테이너 == 도커 이미지 + 환경 변수
이렇게 함으로써, 소프트웨어의 견고함과 유연성이 추가 된것입니다.
지금까지는 서버라고 이해하기 쉽게 표현하였으나, 서버가 아니더라도 다 동일하게 해당되는 부분입니다.
게다가 내가 사용하지 않던 서버라하더라도 쉽게 사용하고 배포가 가능한것입니다.
결국 소프트웨어면 전부 위와 같이 사용이 가능한 것입니다.
- 서버 구축 과정에서 견고함과 유연성
- 다른 이가 만든 서버를 소프트웨어 사용하듯 가져다 사용 가능
- 여러 대에 배포할 수 있는 확장성
다른 분이 한 말 중에 좋은 말이라서 가져와보았습니다.
서버 배포와 운영에 도커를 꼭 써야만 하는 건 아닙니다.
하지만 지금 상황에 너무 익숙해져서 문제라고 느끼지 않는 문제는 없을까요?
수평적 확장이 자유롭나요?
서버의 견고함을 보장하면서도 동적으로 바꿀 수 있는 유연함이 존재하나요?
퇴사를 하거나 부서를 옮겨야 해서 다른 이에게 서버 운영 기록을 인계하려면 시간이 얼마나 걸릴까요?
'개발 > Docker' 카테고리의 다른 글
[Docker] - 3. Docker Command 정리 (0) 2022.08.24 [Docker] - Docker-compose (0) 2022.08.03 [Docker] - 4.Volume&Bind Mount (0) 2022.07.16 [Docker] 2. Docker 설치 & Docker-compose (0) 2022.07.03 [Docker] - 1. WSL 기본 설치 (0) 2022.07.03