Free Lines Arrow
본문 바로가기
Development/Docker

[Docker] Docker 의 개념

by skahn1215 2021. 7. 21.
728x90
반응형

Docker 란?

도커의 개념을 이해한다.

도커의 쓰임새를 알아본다.

도커의 장점을 알아 본다.

도커의 구조를 파악해 본다.

 

도커의 메뉴얼을 보고 번역을 하고 스터디를 진행 했기 때문에 오역이 있을수 있습니다.

 

역사

솔로몬 하익스는 프랑스에서 PaaS 기업인 닷클라우드 안에 내부 프로젝트로서 도커를 시작했다.[39]

도커는 2013년 3월 오픈 소스로 출시되었다

 

 

 

개념

  • Docker 란 프로세스 격리 기술들을 사용해 리눅스의 응용프로그램들을 컨테이너로 실행하고
    관리하는 오픈 소스 프로젝트이다

  • 도커 컨테이너는 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 일종의 소프트웨어를 감싼다. 

  • 어떤 것들이 포함될까?
    코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 
  • 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다
  • 도커는 리눅스에서 운영체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다

  • 도커는 cgroups와 리눅스 커널기능, OverayFS, aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용한다.
  • 이를 통해 독립적인 "컨테이너"가 하나의 리눅스 인스턴스 안에서 실행할 수 있게 한다.
  • 그렇기 때문에 가상 머신을 시작하여 유지보수해야 하는 부담을 없애준다.

 

 

장점

  • 도커는 어플리케이션과 인프라를 분리 할 수 있게 해준다.
    그렇기 때문에 빠르게 소프트 웨어를 전달 할 수 있다.

  • Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있다.

  • 코드 작성과 프로덕션 실행 사이의 지연을 크게 줄일 수 있다.

 

 

 

도커를 어디에 사용할수 있을까?

 

빠르고 일관된 애플리케이션 제공 할때

  • Docker는 개발자가 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 함으로써 개발 라이프사이클을 간소화한다.
  • Docker를 사용하여 애플리케이션을 테스트 환경으로 밀어 넣고 자동 및 수동 테스트를 실행한다.

  • 개발자는 버그를 발견하면 개발 환경에서 버그를 수정하고 테스트 및 검증을 위해 테스트 환경에 다시 배포할 수 있습니다

  • 테스트 완료 후 고객에게 수정 사항을 전달하는 것은 업데이트된 이미지를 프로덕션 환경으로 밀어 넣는 것만큼 간단하다.

 

구축 및 확장 이 뛰어나다.

  • Docker의 컨테이너 기반 플랫폼은 컴퓨터의 작업이나 처리 양에 대해 높은 휴대성을 가능 하게 해준다.

  • 도커 컨테이너는 개발자의 로컬 노트북, 데이터 센터의 물리적 또는 가상 머신, 클라우드 공급자 또는 혼합 환경에서 실행될 수 있다.

  • Docker의 휴대성과 경량성을 통해 워크로드를 동적으로 관리하고 비즈니스 요구에 따라 애플리케이션 및 서비스를 거의 실시간으로 확장 또는 해체 할 수 있다.

 

동일한 하드웨어에서 더 많은 워크로드 실행

  • 도커는 가볍고 빠르다.

  • 도커는 가상 머신에 대해서 실행 가능하고 효율 적인비용을 제공한다.

  • Docker는 더 적은 리소스로 많은 작업을 수행해야 하는 고밀도 환경과 중소규모 구축에 적합하다.

 

 

 

Docker architecture

일단 그림으로 먼저 도커의 구조를 보자.

 

 

 

The Docker Daemon

  • Docker 대몬(Dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은
    Docker 개체를 관리한다.

  • 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리할 수도 있습니다.

 

The Docker client

  • 도커 클라이언트(도커)는 많은 도커 사용자가 도커와 통신하는 기본 방법이다.

  • 도커 커맨드를 사용할 때 클라이언트는 도커에게 커맨드를 전송하고 도커는 받은 커맨드를 수행한다.

  • 도커 명령어들은 도커의 API 를 사용한다.

  • 도커 클라이언트는 여러개의 데몬과 통신이 가능하다.

 

Docker registries

  • 도커 레지스트리에는 도커 이미지가 저장됩니다.

  • Docker Hub는 누구나 사용할 수 있는 공용 레지스트리이다.
     - 기본적으로 Docker Hub에서 이미지를 검색하도록 구성되어 있다.

  • 개인 레지스트리를 직접 운영할 수도 있다.

  • 도커 pull 또는 run 커맨드를 사용하면 구성된 레지스트리에서 필요한 이미지를 가져온다.

  • 도커 push 를 사용하면 이미지가 구성된 레지스트리에 push 된다.

 

 

Docker object

Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 오브젝트를 만들고 사용할 수 있다.

여기서는 오브젝트들을 간단하게 살펴 보겠다.

 

1. Images

  • image는 도커 컨테이너를 만들기 위한 읽기 전용 템플릿이다.
    - 설정 파일 이라고 보면 될것 같다.

  • image는 사용자정의 가 포함된 image에 기반이 될 수도 있다.
    - ex) 이미지 외에도 어플리케이션을 실행하기 위한 아파치나 구성내용을 포함 할 수 있다.

  • 사용자 자신의 이미지를 만들 수도 있고 다른 사용자가 만들어둔 이미지를 사용할 수도 있다.

  • 이미지를 빌드 방법
    - 이미지를 빌드하고 실행하는 데 필요한 단계가 정의된 간단한 구문을 사용하여 Docker 파일을 작성한다.

  • 도커 파일의 각 명령은 이미지에 레이어를 만든다.

  • 도커 파일을 변경하고 이미지를 재구성하면 변경된 레이어만 재 빌드 된다.

  • 이는 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고, 작고, 빠르게 만드는 요인 중 하나이다.

 

2. Containers

  • 컨테이너는 실행 가능한 이미지의 객체이다.
    - 즉 어플리케이션을 실행 할 수 있는 단위 이다.

  • Docker API 또는 CLI를 사용하여 컨테이너를 작성, 시작, 중지, 이동 또는 삭제할 수 있다.

  • 컨테이너를 하나 이상의 네트워크 또는 스토리지 에 연결 하거나 컨테이너의 상태에 따라 새 이미지를 만들 수 있다.

  • 기본적으로 컨테이너는 호스의 머신이나 다른 컨테이들과 비교적 쉽게 분리 된다.

  • 컨테이너의 네트워크 저장소 또는 호스트 머신이나 다른 컨테이너의 하위 시스템들을 어떻게 격리 시킬지 제어 할 수 있다.

  • 컨테이너는 이미지 외에도 구성 옵션들로 정의 된다.

  • 컨테이너를 제거 하게 되면 저장소에 반영되지 않는 내용들은 지워진다.

 

 

 

도커 실행 예제

아래 예제는 하나의 우분투 컨테이너를 실행하는 예제이다.

docker run -i -t ubuntu /bin/bash

 

위 커맨드를 실행 했을때 다음과 같은 과정이 수행 된다.

 

  • 1. 로컬에 우분투 이미지가 없다면, 도커 는 사용자가 수동으로 docker pull ubuntu 명령어를 수행 한것 처럼
    Docker registries 에서 이미지를 가져온다.

  • 2. 도커는 새 컨테이너를 만든다.

  • 3. Docker는 읽기-쓰기 파일 시스템을 컨테이너의 최종 계층으로 할당합니다.
    - 이렇게 하면 실행 중인 컨테이너가 로컬 파일 시스템의 파일 및 디렉토리를 만들거나 수정할 수 있다.

  • 4. 네트워크 옵션을 지정하지 않으면 기본네트워크에 연결을 위한 인터페이스를 생성한다.|
    - 컨테이너에 IP 주소를 할당하는 작업이 포함 된다.
    - 기본적으로 컨테이너는 호스트 시스템의 네트워크 연결을 사용하여 외부 네트워크에 연결할 수 있다.

  • 5. 도커는 컨테이너를 시작을 수행하고 /bin/bash를 실행한다.
    - 컨테이너가 상호적으로 실행되고 터미널에 연결되어 있으므로(-i 및 -t 플래그로 인해)
    - 출력 로그가 터미널에 출력되는 동안 키보드를 사용하여 입력을 할 수가 있다.

  • 6. exit를 입력하여 /bin/bash 명령을 종료하면 컨테이너가 중지되지만 제거되지는 않는다.
    - 제거 하나거나 다시 시작 할 수 있다.

 

 

 

 

 

 

 

 

 

이외에도 앞으로 내용을 더 추가 할 예정

 

 

참고: https://docs.docker.com/get-started/overview/

 

Docker overview

 

docs.docker.com

 

728x90
반응형

'Development > Docker' 카테고리의 다른 글

[Docker] ClickHouse DB 연동  (0) 2022.04.03
[Docker] Docker 설치하기  (0) 2021.07.22

댓글