코딩하고자용 블로그

Docker docs 정리 (1) - Overview 본문

Computer Science/Server

Docker docs 정리 (1) - Overview

코딩하고자용 2022. 8. 22. 23:21

본 글은 Docker docs 내용을 한글로 작성해가면서 이해하고자 하였으며, 이에 대한 결과물입니다.

글 내용 중 필자의 생각을 첨가하여 docs와 완전히 일치하지 않음을 알려드립니다.

따라서 정확한 이해를 위해 아래의 docs를 정독하시고, 참고용으로만 사용하시길 바랍니다.

https://docs.docker.com/
 

Docker Documentation

 

docs.docker.com


Docker Overview

  • Docker is open platform for developing, shipping and running application.
  • Docker는 Container라고 불리는 느슨하게 분리된(loosely isolated) 환경에서 애플리케이션을 패키징하고 실행하는 기능을 제공한다.
  • Container는 가볍고 애플리케이션을 실행하는데 필요한 모든 것을 포함하므로 호스트에 현재 설치되어 있는 것에 의존할 필요가 없다.
  • Docker는 컨테이너의 라이프사이클을 관리하기 위한 도구 및 플랫폼을 제공한다.
    • 컨테이너를 사용하여 응용프로그램 및 지원 구성요소를 개발
    • 컨테이너는 응용프로그램을 배포하고 테스트하는 단위가 됨
  • Docker는 개발자가 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 함으로써 개발 라이프사이클을 간소화한다.
    • 대리님이 하던 프로젝트를 내가 하게 되었을 때, 대리님의 PC와 똑같은 환경을 만드는 것이 번거로웠다. 하지만 이제 Docker를 이용하게 된다면, 테스트를 충분히 진행할 수 있게 된다.
    • 즉, 개발 환경(development environment)과 테스트 환경(test envrionment), 상용 환경(production environment)을 자유롭게 넘나들 수 있게 되는 것! 업데이트 된 이미지를 푸시하기만 하면 해결 된다.

Docker architecture

  • Docker daemon? dockerd. Docker 컨테이너를 제작, 실행 및 배포하는 작업을 수행(images, containers, networks, volumes 관리)
  • Docker client는 Docker daemon과 소통함
  • Docker client와 daemon은 동일한 PC에서 실행할수도 있고, 원격 Docker 데몬에 연결할 수 있다.
  • 이 둘은 UNIX 소켓 or 네트워크 인터페이스를 통해 REST API를 사용하여 통신한다.
  • 컨테이너 집합으로 구성된 응용프로그램으로 작업할 수 있는 Docker compose라는 것도 있다.
  • Docker desktop? Mac, Windows, Linux 환경을 위한 설치가 간편한 애플리케이션으로 애플리케이션과 마이크로 서비스를 구축하고 공유할 수 있다.(dockerd[docker daemon], docker[docker client], docker compose를 포함함)

  • Docker registries?
    • Docker Hub와 같은 도커 등록소로서 Docker 이미지들을 저장함. 
    • docker pull, docker run과 같은 command를 통해 필요한 이미지를 가져올 수 있고, docker push를 통해 이미지를 registry로 보낼 수 있음.(github과 같되, code를 보내는게 아닌 이미지를 보낸다고 생각하면 된다)
  • Images
    • 도커 컨테이너를 만드는 지침이 포함된 읽기 전용 템플릿(read-only template with instructions for creating a Docker container)
    • Dockerfile 변경 후 이미지 재구성 시 변경된 계층(layers)만 재구성되는데, 이 때문에 다른 가상화 기술과 비교할 때 경량화, 소형화 및 속도가 빨라지는 것이다!
  • Container
    • 실행 가능한 이미지 인스턴스(a runnable instance of image), 즉 이미지의 객체(Object)라고 생각하면 된다.
    • Docker API, CLI를 사용해 컨테이너를 생성, 시작, 정지, 복사, 삭제 할 수 있다.
    • 컨테이너가 제거되면, 영구 저장소에 저장되지 않은 상태 변경 사항이 사라짐.
  • 아래 명령을 ubuntu 환경에서 실행시켰다고 하자.
docker run -i -t ubuntu /bin/bash
  1. 로컬 환경에 우분투 이미지가 없을 시 Docker는 수동으로 pull command를 실행한것처럼 registry에서 이미지를 가져온다.
  2. docker container create -> 새 컨테이너 생성
  3. Docker는 container에 읽기-쓰기 파일 시스템(read-write filesystem)을 최종 계층으로 할당한다. 이를 통해 실행 중인 컨테이너가 로컬 파일 시스템에서 파일 및 디렉토리를 생성하거나 수정할 수 있다.
  4. 네트워킹 옵션을 지정하지 않았기 때문에 컨테이너를 기본 네트워크에 연결하는 네트워크 인터페이스를 만든다.(컨테이너에 IP 주소 할당)
  5. Docker는 container를 시작하고 /bin/bash를 실행한다. (i flag == interactively(대화식), t flag == terminal)
  6. exit command를 통해 /bin/bash 명령을 종료하면 컨테이너가 중지되지만 제거되지는 않는다.

The Underlying technology(기반 기술)

  • Go 언어로 작성되었으며, namespace라는 기술을 사용하여 컨테이너라는 격리된 작업 공간을 제공함.
  • namespace? 한 개의 특정 프로세스에 대해 시스템 리소스를 논리적으로 격리하는 기능을 뜻함.
  • 이러한 네임스페이스는 격리 계층(a layer of isolation)을 제공한다.
  • 컨테이너의 각 측면은 별도의 namespace에서 실행되며, 해당 namespace로만 접근가능하다.

'Computer Science > Server' 카테고리의 다른 글

ElasticStack에 대한 정리  (0) 2023.04.22
Docker docs 정리 (2) - Get Started  (0) 2022.08.24