택시짱의 개발 노트

Docker 공부.. 본문

카테고리 없음

Docker 공부..

택시짱 2020. 11. 17. 17:40

Docker과 VM의 차이

  • Docker의 컨테이너는 같은 독립된 프로세스를 이용하여 kernel을 공유 하는 반면, VM의 경우 하드웨어의 독립을 이용하여 독립된 kernel 공간을 가진 OS를 생성해 가상화 기능을 제공 한다.

VM

  • VM 이란?
    • VM은 호스트 OS위에 게스트 OS를 가상화 하여 사용하는 방식이다.
      게스트 OS는 호스트 OS의 자원을 할당 받아 Hperviosr를 이용해 가상화 하게 된다. Hypervisor는 호스트 시스템에서 다수의 게스트OS를 구동할 수 있게 해주는 소프트웨어 이다.
장점
    1. 호스트 OS와 게스트 OS의 완전한 독립이 가능
      • 완전한 독립이 가능 하기 때문에 window os에서 linux의 가상화가 가능함
단점
  1. 속도의 저하
    • 호스트 OS와 리소스 분할하여 OS위에 OS를 설치하기 때문에 속도가 저하 된다.

Docker

  • Docker 란?
    • 리눅스의 Container 기술을 이용해 가상머신처럼 하드웨어의 자원을 완전히 가상화 하지 않고 프로세스들만을 격리시켜 빠르게 어플리케이션 환경을 구축 및 배포할 수 있게 해주는 기술

Docker image

  • Docker image 란?
    • Docker image는 Container 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지않고 변하지 않는다. Container는 image를 실행한 상태라고 볼 수 있다. 같은 image에서 여러개의 Container를 실행할 수 있고 Container가 변해도 image는 변하지 않는다.

Docker Container

  • Docker Container 란?
    • 컨테이너란 격리된 공간에서 프로세스가 동작하는 기술이다. 기존의 가상화 기술은 OS를 가상화 했지만 컨테이너는 프로세스를 격리하는 방식이다. 단순히 프로세스를 격리시키기 때문에 다른 가상화 방식보다 가볍고 빠르다.

장점

    1. 성능상의 이점
      • 도커는 실행에 필요한 파일과 라이브러리만을 포함하고 OS를 새로 설치할 필요가 없으므로 가볍고 성능의 저하가 거의 없다
    1. 빠른 운영환경 구성
      • 미리 사용자들이 만들어 둔 이미지(개발환경)를 다운받아 실행만 하면 해당 환경을 구축할 수 있다.
    1. 관리의 용이
      • 이미지 만을 관리 배포하면 되므로 운영환경의 관리가 용이하다
    1. 확장성
      • 한번 만들어낸 이미지를 이용하여 여러 서버들에서 사용가능하다.

Dockerfile의 선언문

  • FROM : 어떤 이미지를 기반으로 할지 설정
  • MAINTAINER : 이미지 작성자 정보
  • RUN : 이미지에서 스크립트나 명령 실행
  • CMD : 컨테이너가 시작되었을 때 스크립트나 명령 실행
  • ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트나 명령 실행( docker run 에서 처리 방식이 다름 )
  • EXPOSE : 호스트와 연결할 포트 번호 설정
  • ENV : 환경 변수 설정
  • ADD, COPY : 이미지에 파일 추가
  • VOLUME : 데이터를 호스트에 저장하도록 설정
  • USER : 명령을 실행할 사용자 계정 설정
  • WORKIR : 명령을 실행할 디텍터리 설정
  • ONBUILD: FROM 으로 이미지가 사용될 때 실행할 명령 설정

CMD 와 ENRYPOINT의 차이점

  • CMD와 ENTRYPOING란 무엇인가

    • ENRYPORINT와 CMD는 해당 컨테이너가 수행하게 될 실행 명령을 정의하는 선언문 이다. 즉, 컨테이너가 무슨 일을 하는지 결정하는 최동 단계를 정의하는 명령이라고 생각하면 된다. 그렇기 때문에 Dockerfile의 가장 마지막 부분 쯤에 Entrypoint또는 CMD를 선언하게 된다.
  • CMD와 ENTRYPOINT 차이점

    • CMD와 ENTRYPOINT의 가장 큰 차이점은 바로 컨테이너 시작시 실행 명령에 대한 Default 지정 여부 이다.
      만약 ENTRYPOINT를 사용하여 컨테이너 수행 명령을 정의한 경우, 해당 컨테이너가 수행될 때 반드시 ENTRYPOINT에서 지정한 명령을 수행되도록 지정 된다.
      하지만, CMD를 사용하여 수행 명령을 하는 경우에는, 컨테이너를 실행할때 인자값을 주게 되면 Dockerfile에 지정된 CMD 값을 대신하여 지정한 인자값으로 변경하여 실행되게 된다.
  • CMD와 ENTRYPOINT의 올바른 사용 방법

      1. 컨테이너가 수행될 때 변경되지 않을 실행 명령은 CMD 보다는 ENTRYPOINT로 정의하는게 좋다.
      1. 메인 명령어가 실행시 default option 인자 값은 CMD로 정의해 주는게 좋다.
  • 결론. ENTRYPOINT는 컨테이너 시작시 무조건 실행이 되어야 하는 명령를 설정할때 사용하고, CMD는 변경이 될수도 있는 명령어에서 default 값으로 설정하여 사용하는 것이 좋다.
반응형
Comments