ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 란?
    Open Source/Docker 2019. 12. 23. 17:09
    반응형

    Docker

    대학교 막바지에 학교 연계 인턴으로 QA 시스템을 계발 하는 일을 하였다.
    이 시스템 개발에 도커를 사용하였는데, 이 당시에 처음 사용해본 서비스였다.
    처음에 도커를 사용 할 때 몇 가지 어려운 점이 있었는데, 시간이 지났지만 내용을 정리를 해본다.

    Docker 란?

    • 정의: 소프트웨어 패키지(image)를 가상화(container) 해주는 오픈 소스 프로젝트
    • 출시일: 2013년 3월에 오픈소스로 배포 되었다.
      • PaaS 기업인 dotCloud 라는 회사에서 내부 프로젝트로 시작되었다.

    Docker 는 왜 개발 되었을까?

    • 도커는 개발자가 만든 프로그램이 동작을 하기 위한 환경을 이미지화 하여 어느 서버에서든 이 이미지를 이용해 컨테이너를 실행 시키면 똑같은 환경에서 똑같은 프로그램이 동작하는 것 보장해준다.
    • 하나의 프로그램이 동작하기 위해 여러 라이브러리나 환경변수 설정 등이 필요하고, 실행하는 순서가 있을 수 있다.
      이것을 새로운 서버에 설치를 할 때 정의된 순서대로 정확하게 실행해야하는데 배포판이 변경되거나 복잡한 프로그램일 수록 설치도 오래 걸리고, 혹시 오류가 난다면 부족한게 뭔지 하나하나 디버깅 해보아야 하는 문제가 있을 수 있다.
    • 필자는 처음에 이러한 내용을 문서나, 다른 블로그의 글을 읽어도 크게 와닿지 않는 부분이였다. 당시 필자의 경험으로는 개인적으로 개발을 하는 컴퓨터 외에 다른 서버가 없어서 환경은 개발하면서 자연스럽게 구성이 되어 문제가 없었을 뿐더러, 프로그램을 돌리기 위한 환경을 다른 개발자와 공유해야 한다는 생각을 하지 못했었다.
    • 현재 업무를 하다 보니 개발한 프로그램을 다른 곳에 전달하거나 설치 하는 방법을 설명할 때 도커의 편리성을 체감하고 있다. 아마 도커를 개발한 분도 이러한 불편함을 해결하기 위해서 만든게 아닐까?

    컨테이너(Container)

    • 소프트웨어를 가상화 하여 격리된 공간에서 프로세스가 동작하게 하는 기술
    • 도커는 컨테이너 이미지를 통해 프로그램을 가상화 하는데 이 가상화 된 것을 컨테이너 라고 한다.

    • 가상 머신(Virtual Machine) 과 차이점
      • 가상머신은 hardware 자원을 가상화 하여 서버를 구성하는 것으로, 각 VM 내부에 OS, application, binary 파일, library 등이 포함되어 큰 용량을 차지한다. 부팅 속도도 느려질 수 있다.
      • 컨테이너는 작성한 코드와 관련된 것을 패키징 하는 것으로, OS kernel을 다른 컨테이너와 공유가 가능하여 VM보다 용량이 더 작다.

    이미지(Image)

    • 프로그램 실행에 필요한 라이브러리, 환경변수 등의 설치 목록과 실행 순서를 정의 해 놓은 이미지이다.

    • 각 단계 별로 이미지가 있어서, 새로운 이미지를 계속 쌓을 수 있다.
      • 위 사진은 이미지 위에 다른 이미지를 쌓으면서 새로운 이미지를 생성 할 수 있는 것을 표현하였다.
      • CentOS 이미지 + App A 이미지 + ... 이런 형식이 가능하다.
      • 이것의 이점은, 아무리 프로그램이 복잡해 지더라도 base가 되는 이미지는 변하지 않기 때문에 이미지 관리가 쉽다.
    • 이미지는 변하지 않는(immutable) 속성을 가지고 있다.
    • 컨테이너는 이 이미지에 정의된 대로 실행이 된다.
      • 하나의 이미지로 같은 여러 컨테이너를 실행 시킬 수 있다.
    • 컨테이너가 삭제 되더라도 이미지는 남아있다.

    이미지 저장소

    • Docker Hub
      • 이미지를 저장하는 저장소를 제공하는 곳
      • github 와 비슷 한 개념으로 이미지 레파지토리를 통해 접근이 가능하다면 누구든 이미지를 다운로드 받을 수 있다.
    • 개인 Docker Repository
      • 개인 서버에 private 한 레파지토리를 실행 시킬 수 있다.
      • 이것 또한 컨테이너 이며, 기반 이미지는 docker hub 에서 다운 받을 수 있다.
      • 도커 허브는 서비스의 저장 공간에 이미지를 저장 하기 때문에 인터넷이 안되는 환경이나, 보안이 중요한 환경에서는 이 방식을 사용 할 수 있다.

    Dockerfile

    • 이미지를 생성할 때 사용되는 파일로, Dockerfile = 이미지 라고 생각 할 수도 있다. (물론 docker 명령어를 통해 dockerfile -> image 로 생성해야한다.)

    • DSL(Domain-specific Language) 언어를 이용해서 이미지 구성 과정을 적는다.

    • 예제 Dockerfile

      FROM ubuntu:18.04
      COPY . /app
      RUN make /app
      CMD python /app/app.py
    반응형

    댓글

Designed by Tistory.