■ What is Docker?
1.도커란? (Docker)
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
일반적으로 컨테이너라 함은, 선박에 선적하는 수송용 박스를 많이 떠올린다.
도커에서 사용하는 컨테이너 또한 동일하다.
수송용박스에 전자기기, 신발, 옷 등 다양한 화물을 넣을수 있듯, 도커 컨테이너에는 웹서버, 데이터베이스, 프로그램 등을 추상화 하여 실행 할 수 있다.
2.컨테이너란? (Container)
컨테이너란 격리된 공간에서 프로세스가 동작하는 기술이다. 가상화의 하나지만 기존 방식과 차이가 있다.
기존 가상화는 OS를 가상화 하는 방법이다. OS는 CPU, Memory, Disk를 전 영역을 가상화하여 서비스를 제공한다.
하지만 단점으로는 해당 방법을 사용 할 경우 성능 측면에서 떨어지게 된다.
전가상화, 반가상화든 결국 성능문제가 발생하고, 이를 개선하기위해 프로세스를 격리하는 방식이 등장한다.
3.LXC? (리눅스 Container)
리눅스에서는 리눅스 컨테이너가 존재한다. CPU와, Memory를 프로세스가 필요한 만큼만 추가로 사용하고 성능적인 측면에서 손실이 없다. ( RFC 확인 테스트 자료 확인 )
따라서 Docker가 처음으로 Container 개념을 사용한 것아니다. 이미 리눅스에서는 Cgroups, namespace를 이용한 LXC(Linux Container)가 존재 했다.
도커는 LXC를 기반으로 0.9버전 자체적인 libcontainer 기술을 사용하였고, 추후 runC 기술로 병합된다.
4.Docker image
컨테이너 다음 중요한 개념은 image이다.
image는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 파일이다. Windows OS를 설치 한다고 가정 했을 때 USB 혹은 .iso 파일로 모든 데이터가 갖춰진 상태, 즉 OS를 바로 설치하고 바로 실행 할 수 있는 상태인 파일을 image라 정의한다.
도커의 이미지 사이트 2 곳 (클릭 시 이동)
1) DockerHub로 이미지 관리
2) GitHub로 이미지 관리
5.Docker image 관리
위와 같이 image는 중요한 역할을 한다. 이미지의 관리는 Layer라는 개념을 도입하여 관리하고 있는데, 왜 필요한가?
순정 Ubuntu 이미지에 nginx를 설치를 완료했다. 다른 곳에서 해당 이미지를 다운 받아야 하는데 시간도 많이 소요가 될 뿐더러 계속 해서 image가 누적이 된다면 훗날에 다운로드 받는데에만 상당한 시간이 소요 될 것이다. 따라서, 구간 별 이벤트가 발생한 image가 있으면 해당 이미지를 업로드 하여 손쉽게 재사용이 가능하게 만들어주는 기능이다.
이미지의 URL 방식으로 관리하며, 태그를 붙일 수 있다.
■ 요약 정리
Docker를 쉽게 듣다 보니 Container = Docker로 인지를 하고 있었다. 추가로 최근에 나온 신기술이라고 생각을 했지만, 알고보면 옛날에 다 구현이 되어 있고 현대에 잘 활용하고 있는 기술이다. 마치 블록체인 같은 느낌을 받았고, Docker가지고 몇가지 테스트 및 비교 자료를 만들 예정이다.
커널를 기반으로 물리 리소스를 최소화 하면서 사용하며, 이미지로 관리도 용이한 Docker
Linux 보다 Windows OS에 더 익숙한 나에겐 시간이 좀 필요해 보인다.
[참고]
1) https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
2) https://www.samsungsds.com/kr/insights/docker.html
3) https://velog.io/@yange/Kubernetes-container-runtime%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
4) https://ikcoo.tistory.com/189
학습 후 작성된 글입니다.
설명이 잘 못 된 부분이 있다면,
너그럽게 이해 부탁드립니다.
+댓글로 알려주세요!
+글이 도움이 되셨다면 하단 ❤️ Click!
+소통 환영합니다!