도커는 대표적인 컨테이너 기술이다. 나는 회사에서 모 프로젝트를 진행하면서, 온갖 가상머신에 각종 프로그램을 실행하기 위한 설정을 하고 라이브러리를 설치하면서 컨테이너 기술에 관심을 가지게 됐다.
컨테이너
GCP에서 컨테이너의 개념과 이점을 잘 설명한 글(cloud.google.com/containers/?hl=ko)이 있다. 일부를 발췌하면 아래와 같다.
컨테이너와 VM의 공통점
- 가상 머신(VM)은 호스트 운영체제에서 구동되며 그 바탕이 되는 하드웨어에 가상으로 액세스하는 Linux, Windows등의 게스트 운영체제를 의미한다.
- 컨테이너는 가상 머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해준다.
컨테이너와 VM의 차이점
- 가상 머신은 하드웨어 스택을 가상화한다.
- 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동한다. 컨테이너는 훨씬 가볍고 OS 커널을 공유하며, 시작이 훨씬 빠르고 OS 전체 부팅보다 메모리를 훨씬 적게 차지한다.
도커
작동 원리
- Docker기술은 Linux 커널과 함께 Cgroups 및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 이러한 독립성이 컨테이너의 본래 목적이다.
- 다시 말해서, 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있다.
장점
- Docker를 사용하면 컨테이너를 매우 가벼운 모듈식 가상 머신처럼 다룰 수 있다. 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있어, 애플리케이션을 클라우드에 최적화하도록 지원한다.
- Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공하므로 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있다. 또한 Docker는 이 컨테이너 환경 내에서 애플리케이션(또는 앱을 구성하는 결합된 프로세스) 배포를 자동화한다.
- 이러한 툴은 Linux 컨테이너를 기반으로 구축되어 Docker를 사용자 친화적이고 고유하게 만들어 주므로 사용자는 그 어느 때보다도 쉽게 앱에 액세스해 빠르게 배포하고 버전 및 버전 배포를 관리할 수 있다.
쿠버네티스를 사용하는 이유
- Docker는 단일 컨테이너 관리에 적합하도록 만들어져 있다. 수백 개로 세분화된 컨테이너와 컨테이너화된 앱을 점점 더 많이 사용하기 시작하면 관리와 오케스트레이션이 매우 어려워질 수 있다. 결국 모든 컨테이너 전체에서 네트워킹, 보안, 텔레메트리와 같은 서비스를 제공하기 위해서 컨테이너를 그룹화하는 용도로 쿠버네티스가 사용된다.
- 출처: www.redhat.com/ko/topics/containers/what-is-docker
도커 이미지와 도커 컨테이너
- 도커 이미지는 프로그램을 실행하는데 필요한 설정과 소프트웨어 종속성(프로그래밍 언어 런타임 및 기타 소프트웨어 라이브러리의 특정 버전 등)을 가지고 있다.
- 도커 컨테이너는 이미지의 인스턴스로 프로그램을 실행한다.
도커 실행
도커 컨테이너 생성 및 실행은 run이라는 명령어를 이용해서 이루어진다.
예를 들어서 이렇게 cmd에서 'docker run hello-world'를 입력한다고 해보자. 로컬에 hello-world라는 이미지가 없기때문에 Unable to find image 'hello-world:latest' locally 라는 문구가 나온다.
그리고 도커 클라이언트는
도커 서버(이미지가 서버에 존재한다면 서버에서 받아오고) → 도커 허브(이미지가 서버에 존재하지 않을 경우 서버에서 받아온다)
순으로 확인해서 이미지를 다운로드 하고 실행한다.
만약 hello-world라는 이미지가 로컬에 존재한다면
이렇게 바로 실행된다.
도커 애플리케이션에서도 이미지를 확인할 수 있다.
리모트 레포지터리를 확인하니 두달전에 튜토리얼을 하면서 생성했던 이미지가 보인다 ㅎㅎ.
'DevOps > Docker' 카테고리의 다른 글
[도커]docker image rm vs docker rmi (0) | 2021.06.04 |
---|---|
[도커]헷갈리는 기본 명령어(create, start, run, stop, rm) (1) | 2021.06.02 |
[도커]네트워킹 (0) | 2021.06.02 |
[도커]데이터 관리(Bind Mount, Volume, Tmpfs Mount) (0) | 2021.05.31 |
[도커]명령어 모음 (0) | 2021.05.31 |