⚡Docker란 무엇인가?
Docker 컨테이너는 애플리케이션의 모든 코드 및 종속성을 표준 형식으로 패키징할수 있게 해주는 컨테이너 이다. 이를 통해서 애플리케이션이 컴퓨터 환경 전반에서 빠르고 안정적으로 실행이 될수 있다. Docker 컨테이너는 라이브러리, 시스템 도구, 코드, 런타임 등 애플리케이션 실행에 필요한 모든것을 담고 있는 인기 있는 경량의 독립형 실행 컨테이너 이며, 개발자가 컨테이너화된 애플리케이션을 빠르게 빌드, 테스트 및 배포할 수 있게 해주는 소프트웨어 플랫폼이기도 하다.
⚡Docker 용어 정리
Docker
컨테이너 기술을 활용하는 앱의 개발, 제공 및 실행을 위해 설계된 소프트웨어 컨테이너 플랫폼입니다. Docker는 엔터프라이즈 에디션과 커뮤니티 에디션 이렇게 두 가진 버전으로 제공됩니다.
컨테이너
하드웨어 가상화를 제공하는 VM과 달리 컨테이너는 '사용자 공간'을 추상화함으로써 경량의 운영체제 수준의 가상화를 제공합니다. 컨테이너는 호스트 시스템의 커널을 다른 컨테이너와 공유합니다. 호스트 운영체제에서 실행되는 컨테이너는 코드와 모든 종속성을 패키지화하여 애플리케이션이 한 환경에서 다른 환경으로 빠르고 안정적으로 실행될 수 있게 해주는 표준 소프트웨어 장치입니다. 컨테이너는 영구적이지 않으며 이미지로부터 생성됩니다.
위의 이미지를 보면 Host OS 위에 가상화를 하기 위해선, Hypervisor 엔진을 올리고 그위에 GuestOS를 올려서 사용한다.
이는 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리 된다고 봐도 무방하다.
반면에 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 된다. OS 가상화를 보면 Host OS와 완전히 분리되는 장점은 있지만 OS위에 OS를 올리기 때문에 무겁고 느릴수 밖에 없다. 하지만 컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진위에서 바로 동작하며 Host의 커널을 공유 한다. 커널을 공유하게 되면 io처리가 쉽게 되어 성능의 효율을 높일 수 있습니다. 컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것이다.
물론 Container 기반이 좋은것만 있는것은 아니다. OS 가상화는 컨테이너 기반 가상화보다 더 높은 격리 레벨을 지원한다. 즉 보안적인 측면에서 유리하다는 것이다. 또한 OS 가상화의 커널을 공유하지 않는 장점 또한 있다.
커널을 공유하지 않는 만큼 멀티 OS가 가능하다는 것이다. (멀티 OS의 불가능은 Linux 위에 Window를 올리수 없다는 것)
이럼에도 Docker를 쓰는 이유는 성능향상, 뛰어난 이식성 및 유연성에 있다고 할수 있다.
Docker 엔진
컨테이너를 구축 및 실행하는 오픈 소스 호스트 소프트웨어입니다. Docker 엔진은 Oracle Linux, CentOS, Debian, Fedora, RHEL, SUSE, Ubuntu 등 다양한 Windows 서버 및 Linux 운영체제에서 컨테이너를 지원하는 클라이언트 서버 애플리케이션의 역할을 한다.
Docker 이미지
컨테이너로 실행될 소프트웨어 모음이다. 여기에는 Docker 플랫폼에서 실행할 수 있는 컨테이너 생성 지침이 포함되어 있다. 이미지는 변경할 수 없으며, 이미지를 변경하려면 새로운 이미지를 생성해야 한다.
Docker 레지스트리
이미지를 저장 및 다운로드할 수 있는 공간이다. 레지스트리는 무상태성을 갖춘 확장 가능한 서버측 애플리케이션으로 Docker 이미지를 저장 및 배포한다. 대표적으로는 dockerhub가 있으며, AWS, GCP와 같은 클라우드 사업자 또한 컨테이너 레지스티로 불리는 이미지를 보관할수 있는 저장소를 제공하고 있다.
⚡생각
위에서 설명한 내용은 도커를 구성하는 주요 요소에 대한 기본적인 설명에 대해서 적어놨다. 나의 경우 도커를 사용하면서 느낀점은 새로운 기술에 대해서 사용을 할때 이미지가 존재하는 경우 매우 편리하게 구축을 하고 테스트를 해볼수 있다는 점이였다. 내부적으로 프로젝트를 관리하는 부분도 편했고, 다양한 장점을 가지고 있다고 생각을 하고 있다. 하지만 어떤 방식으로 동작하는지에 대해서는 기본 개념에 대해서 공부할 필요성이 존재한다고 생각을 하고 있다. 공식 홈페이지 또는 구글링을 통해서 사용법에 대해서는 누구든지 쉽게 따라할수 있도록 되어있다 하지만 이슈가 발생하거나 설정을 추가한다거나 할때는 도커가 어떻게 구성되어있고, 어떻게 동작하는지 알아야지만 빠르게 에러를 캐치하고 대응이 가능하다.
'DevOps' 카테고리의 다른 글
[Git] 자주 사용하는 명령어 정리 (0) | 2022.11.11 |
---|---|
WSL2에서 Docker 구축 정리 (0) | 2022.10.02 |
[DevOps] wsl2 + Jenkins 구축 및 참조 사항 내용 정리 (0) | 2022.05.12 |
[DevOps] wsl2 + Jenkins 구축 진행 (2) (0) | 2022.05.12 |
[DevOps] wsl2 + Jenkins 구축 진행 (1) (0) | 2022.05.12 |