Docker 란?

amjong2·2023년 1월 26일

참고 및 출처

정의

Application 및 구동에 필요한 모든 것을 Packaging 할 수 있는 Tool

Application, System tools, Dependencies, 환경설정 등을 하나로 묶어서
다른 서버 및 PC에 쉽게 배포하고 구동할 수 있도록 도와주는 Tool.

Virtual Machine 과의 차이

  • VM : HyperVisor 소프트웨어 위에 무거운 OS를 올리고 그 위에 lib, binary, app 등을 올림.
  • Docker : OS를 포함하지 않고, Host OS를 공유하며 lib, binary, app 등을 담은 Contianer로 구동시킴. Container Engine (Docker Engine) 이 Host OS에 접근해서 Container가 원하는 작업을 해준다. Container 내부에는 OS가 없으므로, VM 에 비해 정말 가볍다.

Docker의 구성요소

Dockerfile

Image 를 구성하기 위한 파일들

  • Copy files
  • Install dependencies
  • Set environment variables
  • Run setup scripts

Image

Application 구동에 필요한 모든 것들

  • app.js / configuration / Assets / Dependencies... 등
  • 만들어진 이미지는 변경 불가한 상태이며, 동작중인 Application 전체를 Snapshot 해둔 이미지 라고 생각하면 됨.

Container

Image를 올려서 실행하는 환경

  • 객체지향 프로그래밍으로 생각하면, Image 가 class이고 (template) 이에 대한 인스턴스가 container라고 생각할 수 있다.

  • container에서 동작하는 application은 개별적으로 수정이 가능하지만, image에는 영향을 미치지 않는다.

Docker 이미지 배포하는 방법

1) local에서 dockerfile을 빌드해서 image를 만든다.
2) github에 push하듯이 Container Registry란 곳에 image를 push 한다

  • Container Registry는 Public, Private 두 종류로 나눌 수 있다.
  • 보통 개인적인 용도로 사용 시 Public, 회사에서는 보안적인 이유로 Private을 사용한다.
  • public : dockerhub GitHub Packages
  • private : Google Cloud aws Microsoft Azure
    3) container를 사용할 곳에서 pull 한뒤 container를 실행한다.

실습

Docker reference : https://docs.docker.com/engine/reference/builder/

  • VSCODE를 활용할 시에는 docker extension을 설치 시 dockerfile을 만들 때 문법 오류 등을 잡아주니 설치하도록 하자.

  • 이미지 배포 시에는 dockerHub 이용

Dockerfile 작성하기

Dockerfile Best practice 예제 : https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

  • FROM [baseImage] 로 base image 갖고 오기

  • dockerfile 실행 시 layer 시스템으로 구성되기 때문에, 빈번히 변경되는 파일일 수록 제일 마지막에 작성해주는게 좋음.
    => 이미지가 변경될 때 기존 이미지를 layer별로 캐싱하고 있고 아랫쪽에 작성될 수록 상위 layer에 위치하게 됨.

profile
GAAMZA

0개의 댓글