관리 메뉴

제뉴어리의 모든것

[Section 4] [Cloud] 배포 컨테이너 - 1 본문

코드스테이츠/정리 블로깅

[Section 4] [Cloud] 배포 컨테이너 - 1

제뉴어리맨 2022. 10. 9. 04:20

위 내용은 본인의 공부를 위한 내용이므로, 정확한 정보가 아닐 수도 있습니다.

감안하여 보도록 합시다.

 

전체 항목

  • 컨테이너 기술이란?
  • 도커(Docker) 란?
  • Docker 핵심 개념
  • Docker 기본 사용법
  • Docker 사용시 기본 명령어

 

 


 

컨테이너 기술이란?

가장 이해하기 쉬운 개념은 우리가 쓰는 컴퓨터 환경처럼 컴퓨터 내부에 또다른 환경을 만든것이다.

그리고 그런 환경을 여러개 만들 수 있으며, 그렇게 만들어진 각 환경에서 특정 애플리케이션을 작동시킬 수도 있다.

그렇다면 왜 컨테이너라고 할까?

컴퓨터 위에 만들어진 여러개의 환경, 즉 컨테이너는 각각의 컨테이너와 완전히 격리되어 있다.

일상생활에서 쓰이는 컨테이너도 다른 컨테이너와는 완전히 격리 되어있는 것을 의미하듯이,

컴퓨터상에 각각의 컨테이너는 격리되어 있는 환경이므로 컨테이너라고 한다.

그렇다면 격리되어있다는게 무슨 의미일까?

당연히 물리적으로 각 컨테이너는 컴퓨터의 하드웨어적인 성능은 공유한다.

각각의 컨테이너가 독립적으로 사용하는 즉, 격리되어 사용하는 요소는 다음과 같다.

 

  • 프로세스
    각각의 컨테이너는 다른 컨테이너의 프로세스에 접근이 불가하다.
  • 네트워크
    각각의 컨테이너는 자신의 고유한 IP 주소를 가지고 있다.

  • 파일 시스템
    파일 시스템의 구조가 독립적이다.
    쉽게 말해, 윈도우를 예를 들자면 c드라이브, 내문서 이런 경로들이 컨테이너 마다 각각 갖고 있는것이다.

그렇다면 VM(Virtual Machine) 에 대해 알고 있는 사람은 의문이 들것이다.

컨테이너는 VM과 같은것인가라고.

다르다. 아래 그림을 보자

위에서 

Virtual Machine 부분 그림에

[App 1 + Bins/LIbs + Guest OS] 이 하나의 VM(가상머신)이다.

그러나 Container는

OS가 존재하지 않고 [App1 + Bins/Libs] 가 하나의 Container(컨테이너)이다.

즉, VM은 각 VM이 물리적으로 현재 PC에 존재할뿐,

컴퓨터 내부에서 별도의 OS까지 가지고 있는 정말 하나의 컴퓨터이다.(논리적으로)

반면,

컨테이너는 OS는 공유하며, 나머지 환경들만 독립적이다.

그리고 이러한 컨테이너의 "격리 환경"을 만들 수 있게 해주는 기능이

 

namespacecgroup 이라는 기능이다.

 

  • namespace: 프로세스를 독립시켜주는 가상화 기술이다. 각 컨테이너에서 실행된 프로세스가 시스템(user, 파일, 네트워크, 호스트명, 프로세스)등에 대해 독립할 수 있게 해준다.

  • cgroups: 자원(CPU, 메모리, network bandwidth)에 대한 제어를 가능하게 해주는 리눅스 커널의 기능이다.

 

 

정리하자면,

컨테이너 기술이란 호스트 PC의 OS 위에서 돌아가는 여러 프로세스 중 하나인데,

그 프로세스는 다른 프로세스들과는 독립되어진 환경이고, 그 독립되어진 환경안에 각종 애플리케이션들을 설치할 수 있게 해주면서 마치 호스트 PC와는 다른 환경처럼 사용할 수 있게 해주는 리눅스 기반의 기술이다.

 

https://techblog-history-younghunjo1.tistory.com/205

 

 

참조 : https://velog.io/@ragnarok_code/docker-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B2%A9%EB%A6%AC

 

docker 프로세스 격리

도커의 컨테이너 기술은 리눅스의 컨테이너(LXC)를 활용한 기술로, 컴퓨터에 독립적인 컴퓨팅 공간을 만들어낸다. 이는 기존의 VM(가상머신)과 비교하여 가상환경 구조에 근본적인 차이가 있다.

velog.io

 

 

 

도커(Docker) 란?

도커란 위에서 말한 컨테이너 기술을 사용할 수 있도록 해주는 오픈소스인 플랫폼이다.

쉽게 생각하자.

DB란 기술이 있다면, DB의 기술을 사용할수 있게 해주는 MySQL, MS-SQL 같은것이다.

즉, 그냥 소프트웨어이다.

 

 

  • Docker의 아키텍쳐

https://nearhome.tistory.com/83

 

 

 

Docker 핵심 개념

위에 있는 Docker의 아키텍쳐 그림과 같이 보는것이 이해하기에 수월하다.

 

  • Image (이미지)
    컨테이너의 틀이 되는 하나의 환경 자체를 의미한다.
    프로그래밍에 비유하자면 컨테이너 객체이고, 이미지는 클래스이다.
    그래서 이미지만 가지고 있다면 어디에서든지 컨테이너는 생성하여 똑같은 환경을 만들어 낼 수 있다.

  • Container (컨테이너)
    이미지로 인해 만들어진 하나의 환경.

  • Docker Registries (레지스트리)
    이미지들이 저장되어 있는 저장소.
    Docker Hub, Amazon ECR 와 같이 여러 저장소들이 존재한다.
    Docker CLI에서 Image를 사용하여 컨테이너를 생성하려고 할때, HOST 컴퓨터 (그냥 내 컴퓨터다) 에 해당 Image가 존재하지 않을 경우, 기본 레지스트리에서 다운받아, 다운받은 이미지로 컨테이너를 생성한다.
    쉽게 생각해서 그냥 Git Hub 같은 개념이다.

  • Docker Hub
    Docker의 공식 레지스트리 (Registries)이다

  • Dockfile
    - 이미지를 만들기 위한 스크립트 (설정파일)이다.
    - 이미지를 어떻게 만드는지에 대한 내용이 기술되어있다
    - 도커는 해당 파일의 내용을 순차적으로 읽어서 이미지를 생성한다
    - Dockerfile은 DSLDomain-specific language 이라는 자체 언어를 사용한다.

    - Dockfile 예시
FROM subicura/vertx3:3.3.1
MAINTAINER chungsub.kim@purpleworks.co.kr


ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh


EXPOSE 8080
EXPOSE 7000


CMD ["start.sh"]

 

  • Docker Client (클라이언트)
    Docker Daemon과 사용자가 상호작용할 수 있는 접점 역할을 하는 프로그램이라고 생각하면 된다.
    사용자가 docker 관련 명령어를 입력하여 받는곳이 docker client이고, 이 docker client는 해당 명령을 Docker Daemon (dockerd) 에게 전달한다. 

  • Docker Daemon (데몬)
    Docker client로부터 들어오는 명령어 (request) 를 받아서, Docker에서 사용되는 Container, Image, Registry 와
    Docker 의 네트워크 에게 전달하고 직접적으로 소통하는 역할의 프로그램이라고 생각하자.

  • Docker Objects
    Docker에서는 Container, Image, Registry 같은 개념들이 모두 Object이다.

 

 

 

참조 : https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/

 

[Docker] 개념 정리 및 사용방법까지.

 

cultivo-hy.github.io

참조 : https://learning-sarah.tistory.com/entry/Docker-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90

 

Docker 핵심 개념

1. 도커를 왜 사용해야할까? Docker는 격리된 환경에서 프로세스를 실행시키기 위해 사용하는 컨테이너 기반의 가상화 플랫폼입니다. 파이썬 패키지들에 대해서만 격리된 환경을 제공하는 Anaconda

learning-sarah.tistory.com

참조 : https://jfrog.com/knowledge-base/docker-hub-and-docker-registries-a-beginners-guide/

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

 

Docker overview

 

docs.docker.com