본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로인프라 › 컨테이너 › Docker

1. docker concepts

목차

Docker란 뭐지?

요새 구인사이트를 보거나 사람들끼리 야이기 하다보면 도커, 마이크로서비스, 데브옵스, AWS 이야기에 대해서 많이 듣는 거 같다. 그래서 도커는 도대체 뭐지? 라는 생각을 가지고 공부를 시작했다.

Docker 정의

  • 컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼으로 애플리케이션 실행에 필요한 것을 하나로 모아두고 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행환경을 구축 및 운용하기 위한 오픈소스 플랫폼이다.

프로그래머에게 Docker란

  • 도커를 설치하면 Docker 이미지를 각각의 환경에 똑같이 적용할 수 있다.

일반적인 시스템 개발 흐름

                                                         **[일반적인 시스템 개발 흐름]**

Docker를 사용한 시스템 개발 흐름

                                              **[Docker를 사용한 시스템 개발 흐름]**

laurel-docker-containers.png

컨테이너(Container)

  • host OS 상에 논리적인 구획(컨테이너)를 만들고, 애플리케이션을 작동하기 위해 필요한 라이브러리나 애플리케이션등을 하나로 모아, 별도의 서버인 것 처럼 사용할 수 있게 만드는 것.

컨테이너 장점

  • hostOS의 리소스를 논리적으로 분리시키고 여러 개의 컨테이너가 공유하여 상용한다.

  • 컨테이너는 오버헤드가 적기 때문에 가볍고 속도가 빠르다는 것이 특징.

  • OS나 디렉토리, IP주소 등과 같은 시스템 자원을 마치 각 애플리케이션이 점유하고 있는 것처럼 할 수 있다.

  • On-premise(온프래미스) : 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지 모두 수행하는 형태

커테이너와 가상머신

컨테이너가상머신
컨테이너가상머신
컨테이너는 기본적으로 Linux에서 실행되며 호스트 시스템의 커널을 다른 컨테이너와 공유합니다. 다른 실행 파일보다 더 많은 메모리를 사용하지 않고 별도의 프로세스를 실행하여 가볍다.반대로 가상 컴퓨터 (VM)는 하이퍼 바이저를 통해 호스트 리소스에 대한 가상 액세스 권한을 가진 완전한 “Guest” OS를 실행합니다. 일반적으로 VM은 대부분의 응용 프로그램에 필요한 것보다 많은 오버헤드와 리소스를 차지한다.

Docker의 기능

  • Docker 이미지 생성기능 (Build)

    • 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어 등을 하나로모아서 Docker이미지 생성
  • Docker 이미지 공유기능 (Ship)

    • Docker레지스트리에서 공유가능하며 Docker Hub에서 ubuntu나 CentOS와 같은 리눅스 배포판의 기본기능을 제공하는 베이시 이미지를 배포할 수 있다.
  • Docker 컨테이너를 작동시키는 기능 (Run)

    • 리눅스 상에서 컨테이너 단위로 서버를 작동시킨다. 그래서 Docker이미지만 있으면 어느 서버든 작동할 수 있다.

Docker Edition

  • Docker Community Edition(CE)

    • Docker사가 제공하는 무료 Docker 에디션으로 로컬환경에서 사용하는 경우 상용지원이 불필요한 환경에서 애플리케이션 환경을 이용할 때 적합.
  • Docker Enterprise Edition(EE)

    • Docker사가 제공하는 유로 에디션으로 Basic, Standard, Advanced 세 종류가 있다.
    • Basic은 지원 및 Docker Sotore에서 인증이 끝난 컨테이너, 인증이 완료된 플러그인을 제공
    • Standard는 Basic + LDAP나 Active Directory와 통합 가능한 Docker Datacenter를 이용가능
    • Advanced는 보안기능을 제공

참조

http://naver.me/IxLvWg3n https://docs.docker.com/get-started/ 완벽한 IT 인프라 구축을 위한 Docker

http://naver.me/IxLvWg3n

https://docs.docker.com/get-started/

완벽한 IT 인프라 구축을 위한 Docker

https://docs.docker.com/get-started/images/laurel-docker-containers.png

이미지와 컨테이너를 구분해 보기

이미지는 실행 파일, 라이브러리, 설정을 포함한 읽기 전용 템플릿이고 컨테이너는 이 이미지에서 시작한 실행 중이거나 중지된 프로세스와 그 쓰기 가능 계층이다. 하나의 이미지에서 여러 컨테이너를 만들 수 있다. 컨테이너 안에서 파일을 수정해도 원본 이미지가 바뀌지는 않는다. 컨테이너를 삭제하면 그 쓰기 계층의 데이터는 사라질 수 있으므로 영속 데이터에는 볼륨이나 외부 저장소를 사용한다.

flowchart LR
  D[Dockerfile] -->|docker build| I[읽기 전용 이미지]
  I -->|docker run| C1[컨테이너 A]
  I -->|docker run| C2[컨테이너 B]
  C1 --> V[외부 볼륨]
# 이미지를 받되 아직 실행하지는 않는다.
docker image pull nginx:stable
# 127.0.0.1의 8080만 컨테이너의 80번 포트로 전달한다.
docker run --name web-demo -d -p 127.0.0.1:8080:80 nginx:stable
curl -I http://127.0.0.1:8080
docker container ls
docker container rm -f web-demo

pull은 로컬 이미지 저장소에 이미지를 받는다. run은 그 이미지로 컨테이너를 생성하고 시작한다. docker container ls에는 실행 중인 컨테이너가 보이고 -a를 붙이면 중지된 것도 보인다. rm -f는 강제로 종료·삭제하므로 실습 컨테이너에만 사용한다. 이미지 태그 stable도 게시자가 갱신할 수 있는 이름이다. 재현성이 중요하면 검증한 버전 태그 또는 다이제스트를 고정한다.

가상 머신과의 경계

컨테이너는 호스트의 커널을 공유하고 네임스페이스로 프로세스·네트워크 같은 자원을 격리하며 cgroup으로 자원 사용을 제한할 수 있다. 가상 머신은 하이퍼바이저 위에서 별도 게스트 운영체제와 커널을 실행한다. 따라서 일반적으로 컨테이너의 시작과 이미지 배포가 가볍지만, 이것이 모든 성능에서 항상 우월하거나 VM 수준의 독립된 보안 경계를 제공한다는 뜻은 아니다. Docker Desktop의 macOS·Windows Linux 컨테이너는 Linux 커널이 필요하므로 내부적으로 Linux VM을 사용한다. 원문의 “이미지만 있으면 어느 서버든 작동”은 CPU 아키텍처, 커널 기능, 이미지 플랫폼, 필요한 환경 변수·스토리지·네트워크가 맞는 경우로 한정된다.

관점컨테이너가상 머신
커널호스트 Linux 커널 공유게스트 OS의 커널 사용
기본 배포 단위애플리케이션 이미지와 설정OS를 포함한 VM 이미지
상태컨테이너 쓰기 계층은 교체 가능하게 설계가상 디스크 안의 상태를 유지할 수 있음
고려할 점커널 공유와 런타임 권한, 볼륨 관리게스트 OS 패치와 상대적으로 큰 자원 비용

원문에 남은 Docker CE/EE의 세부 상품 구분은 당시의 기록이다. 오늘 제품·라이선스를 선택할 때는 Docker 제품 문서와 현재 계약 조건을 확인한다. 컨테이너는 환경을 포장해 차이를 줄일 수 있지만 데이터베이스 주소, 비밀 값, 운영체제 기능까지 자동으로 동일하게 만들어 주지는 않는다.

참고: Docker overview, 컨테이너 개념, 이미지 개념.

같은 카테고리의 글