ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker
    Back-End/Docker 2021. 9. 6. 16:00
    728x90

    Docker란?


    - 컨테이너 기반오픈소스 가상화 플랫폼이다.
    - 다양한 프로그램, 실행환경을 컨테이너로 추상화하고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해 준다.
    - 백엔드 프로그램, DBMS(MySQL 등), jenkins 등 어떤 프로그램도 컨테이너로 추상화 할 수 있고, AWS, Azure, Google Cloud등 어느 환경에서도 실행이 가능하다.

    - Host OS의 위에 Hypervisor (VMWare,KVM,Xen etc)가 깔린 후에, 그 위에 Virtual Machine이 만들어진다. Virtual Machine은 일종의 x86 하드웨어를 가상화 한 것이라고 보면된다. 그래서 VM위에 다양한 종류의 Linux나, Windows등의 OS를 설치할 수 있다. (Hypervisor는 이처럼 Virtual Machine에 자원(cpu, 메모리 등)을 할당해주는 소프트웨어이다.)

    - Docker Container 컨셉은 비슷하지만 약간 다르다. Docker도 VM 처럼 Docker Engine이 Host위에서 수행된다. 그리고, Container는 Linux 기반의 OS만 수행이 가능하다.

    - Docker는 VM처럼 Hardware를 가상화 해주는 것이 아니라, Guest OS (Container)를 Isolation해 준다. 무슨 말인가 하면, Container의 OS는 기본적으로 Linux OS만 지원하는데, Container 자체에는 Kernel등의 OS 이미지가 들어가 있지 않다. Kernel은 Host OS를 그대로 사용하되, Host OS와 Container의 OS의 다른 부분만 Container 내에 같이 Packing된다. 예를 들어 Host OS가 Ubuntu version X이고, Container의 OS가 CentOS version Y라고 했을때, Container에는 CentOS version Y의 full image가 들어가 있는 것이 아니라, Ubuntu version X와 CentOS version Y의 차이가 되는 부분만 패키징이 된다. Container 내에서 명령어를 수행하면 실제로는 Host OS에서 그 명령어가 수행된다. 즉 Host OS의 Process 공간을 공유한다.

    *참고 : 커널의 기능

    Image


    - docker에서 사용되는 개념 중, Image컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 파일을 의미한다. 예를 들어 ubuntu 컨테이너를 실행하고 싶으면 ubuntu Image를 pull 해서 실행시켜주면 된다. (몇 백 MB 하더라..)

    - 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에, 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다. 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러 개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없다. 또한 하나의 Image로 여러 개의 컨테이너를 띄울 수 있다.

    - 또한, 수 백 메가에서 수 GB 까지 하는 Image들의 크기가 부담스러울 수 있는데, 도커는 이러한 문제 보완을 위해 layer 개념을 도입한다. 여러 개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해준다다. 이미지는 여러 개의 읽기 전용 read only 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성된다. 가령 ubuntu 이미지가 A + B + C의 집합이라면, ubuntu 이미지를 베이스로 만든 nginx 이미지는 A + B + C + nginx가 된다. webapp 이미지를 nginx 이미지 기반으로 만들었다면 예상대로 A + B + C + nginx + source 레이어로 구성된다. webapp 소스를 수정하면 A, B, C, nginx 레이어를 제외한 새로운 source(v2) 레이어만 다운받으면 되기 때문에 굉장히 효율적으로 이미지를 관리할 수 있다.

    - 도커는 프로세스인가?
    https://www.44bits.io/ko/post/easy-deploy-with-docker

    도커(Docker) 입문편: 컨테이너 기초부터 서버 배포까지

    도커(Docker)는 2013년 등장한 컨테이너 기반 가상화 도구입니다. 도커를 사용하면 컨테이너를 쉽게 관리할 수 있으며, 이미지를 만들어 외부 서버에 배포하는 것도 가능합니다. 이 글은 도커를 시

    www.44bits.io



    https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

    초보를 위한 도커 안내서 - 도커란 무엇인가?

    도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

    subicura.com

    Image 만들기


    - ubuntu:18.04 image로 git이라는 container 생성
    - 해당 container bash 실행하여 git 설치
    - 설치 후 docker commit git ubuntu:git를 통해 image 생성
    - docker images로 현재 존재하는 image를 보면 이름은 ubuntu, 태그는 git인 이미지가 추가되었음을 알 수있다.


    - 이와 다른 방법으로, dockerfile을 통해 해당 과정을 진행할 수도 있다.
    - Dockerfile이 존재하는 디렉토리로 이동하여 docker build -t ubuntu:git-dockerfile . 실행


    - 이 방법은 history가 남기 때문에, 나중에 version up을 하거나 재설치를 할 때 참고할 수 있다는 장점이 있다.

    'Back-End > Docker' 카테고리의 다른 글

    웹 크롤러 프로젝트 docker-image 빌드하기  (0) 2022.04.11

    댓글

Designed by Tistory.