ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 초보자가 작성한 Docker 정리
    카테고리 없음 2020. 6. 21. 22:29

    이번에 4학년이 되어 듣는 수업이 있다. 바로, 졸업을 알리는 종합 설계 프로젝트!

    '시큐어코딩 온라인 저지'를 만드는 것이 주제인데, 써야 하는 기술 중 Docker가 있다.

     

    아주 옛날 옛적에 프로젝트를 할 때 잠깐 써보긴 했지만, 아니나 다를까 바로 까먹었기 때문에 다시 공부도 할 겸 포스팅을 하려고 한다. 도커를 처음 접하는 분들에게 도움이 되길,,

     

     

    컨테이너 기반의 오픈소스 가상화 플랫폼, 도커

    서버에서 이야기하는 컨테이너는 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화 할 수 있고 조립 PC, AWS, Azure, Google Cloud 등 어디에서든 실행할 수 있다.

     

     

     

    먼저 도커를 사용하려면 꼭 알아야하는 두 가지에 대해 먼저 알아보자.

    1. 컨테이너(Container)

    컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.

     

    가상화 기술의 하나이지만 기존의 OS를 가상화 하는 방식과는 차이가 있다. 우리에게 익숙한 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화 하여 사용하는 방식인데, 이 방식은 무겁고 느리다. 추가적인 OS를 설치하여 가상화 하는 방법은 성능 문제가 있었고 이를 개선하기 위해 프로세스를 격리하는 방식이 등장하였다.

    리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다. 하나의 서버에 여러 개의 컨테이너를 사용하면서 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 가상머신을 사용하는 느낌이다.

     

    2. 이미지

    이미지는 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것이다.

     

    일단, 이미지는 상태 값을 가지지 않고 변하지 않는다. 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.

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

     

     

     

     

    자, 도커를 사용하기 위해 꼭 알아야 하는 두 가지에 대해 알았다면, 이번엔 도커의 특징에 대해 알아보자.

     

    1. 레이어 저장방식

    도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가에 이른다. 처음 이미지를 다운받을 때 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백메가를 다시 다운받는다면 매우 비효율적일 수밖에 없다.

     

    도커는 이런 문제를 해결하기 위해 레이어라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러 개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해준다. 이미지는 여러 개의 읽기전용(read only)레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성된다.

    컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기(read-write) 레이어를 추가한다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행 중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용한다.

     

     

    2. 이미지 경로

    이미지는 url 방식으로 관리하며 태그를 붙일 수 있다.

    ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략 가능하여 ubuntu:14.04로 사용할 수 있다.

    이러한 방식은 이해하기 쉽고 편리하게 사용할 수 있으며, 태그 기능을 잘 이용하면 테스트나 롤백도 쉽게 할 수 있다.

     

     

    3. Dockerfile

    도커는 이미지를 만들기 위해 dockerfile이라는 파일에 자체 DSL(Domain-specific language)언어를 이용하여 이미지 생성과정을 적는다.

    이것은 굉장히 간단하지만 유용한 아이디어 인데, 서버에 어떤 프로그램을 설치하려고 이것저것 의존성 패키지를 설치하고 설정파일을 만들었던 경험이 있다면 더 이상 그 과정을 블로깅 하거나 메모장에 적지 말고 Dockerfile로 관리하면 된다. 이 파일은 소스와 함께 버전 관리되고 원한다면 누구나 이미지 생성과정을 보고 수정할 수 있다.

     

     

    4. Docker Hub

    도커 이미지의 용량은 보통 수백메가로 수기가가 넘는 경우도 흔하다. 이렇게 큰 용량의 이미지를 서버에 저장하고 관리하는 것은 쉽지 않은데 도커는 Docker hub를 통해 공개 이미지를 무료로 관리해 준다.

     

     

     

     

     

    일단, 여기까지 도커를 사용하기 위한 기본 내용을 정리해 보았다.

    다음 포스팅에서는 도커를 설치하고, 사용하는 법 까지 알아보도록 하겠다!

     

     

     

     

     

     

Designed by Tistory.