도커란? | 가상화, 컨테이너, 도커 개념, 기능

bolim·2022년 2월 15일
0
post-thumbnail

도커란?

도커를 소개하기 전에 먼저 가상화란 개념이 필요하다.

가상화

등장 배경

개발할 때, 서스 운영에 사용하는 서버에 직접 들어가서 개발하지 않는다.
Local환경에서 개발하고 완려되면 Staging서버, Production 서버에 배포한다.

개발을 진행한 local 환경과 Production 서버 환경이 다른 경우가 존재한다.
예를 들면 로컬은 윈도운, 서버는 리눅스일 때이다.

또한 로컬 환경과 서버가 같은 OS여도, 환경변수 등에 의해 서버에 올바르게 작동하지 않을 수 있다.

그래서 다양한 설정들을 README 등에 기록하고 항상 실행하도록 한다.
여기서 만약 운영하고 있는 서버가 많다면, 이 중 하나의 서버가 업데이터 되었다면 나머지 서버도 모두 업데이트를 해줘야한다.

이런 상황에서 서버 환경까지도 모두 한번에 소프트웨어화 할 수 없을까? 라는 고민이 생긴다.

여기서 나온 개념이 "가상화"이다.(소프트웨어 가상화로 한정)

가상화 장점

Research, Production 환경에서 공통적으로 사용하는 일종의 템플릿이 있으면 좋다.
그래서 특정 소프트웨어 환경을 만들고, Local & Production 서버에서 그대로 활용한다.
-> Local(개발)과 Production(운영) 서버의 환경 불일치가 해소되고
어느 환경에서나 동일한 환경으로 프로그램을 실행할 수 있으며
개발 외에 Research도 동일한 환경을 사용할 수 있다.

Container

Docker 등장 전

도커가 나오기 전 가상화 기술은 주로 VM(virtual machine)을 사용하였다.
vm을 이용하여 윈도우 안에 리눅스, 맥 안에 윈도우를 사용할 수 있다.

GCP의 Compute Engine, AWS의 EC2가 이러한 개념을 활용한 것이다.
-> 클라우드 회사에서 미리 만든 이미지를 바탕으로, Computing 서비스를 통해 사용자에게 동일한 컴퓨팅 환경을 제공한다.

여기서도 문제가 발생하는데
OS위에 OS를 하나 더 실행시키는 것이기 때문에 리소스를 많이 사용하여 '무겁다'.

그래서 Container 라는 기술이 등장한다.
Container는 VM의 무거움을 크게 덜어주면서, 가상화를 좀 더 경량화된 프로세스의 개념으로 만든 기술이다. 이 기술의 등장으로 이전보다 빠르고 가볍게 가상화를 구현할 수 있다.

도커

Intro.

도커는 위의 Container 기술을 쉽게 사용할 수 있도록 나온 도구이다.

PC방에서 고객이 게임 설치해도 재부팅하면 원래 pc방 설정값 그대로 복구된다.
도커는 이와 비슷한데, 도커 image를 만들어두고, 재부팅하면 다시 도커 image 상태로 실행되는 것과 유사하다.

개념

도커의 중요한 개념

  • Docker Image
    • 컨테이너를 실행할 때 사용할 수 있는 템플릿
    • Read Only -> 수정불가
    • 어떤 걸 설치하는 등 세트를 설정해놓은 것
  • Docker Container
    • Docker image를 기반으로 실행된 인스턴스
    • Write 가능

도커 기능

도커로 할 수 있는 일

  • 다른 사람이 만든 소프트웨어를 가져와서 바로 사용할 수 있다.
    • 예) MySQL을 도커로 실행
    • 예) 주피터 노트북을 도커로 실행
  • 다른 사람이 만든 소프트웨어 : Docker Image
    • 어느 OS에서나 동일하게 실행 가능
  • 자신만의 이미지를 만들면 다른 사람에게 공유 가능
    • 원격 저장소에 저장하면 어디서나 사용 가능
    • 원격 저장소 : Container Registry
    • dockerhub, GCR, ECR
profile
나는야 호기심 많은 느림보🤖

2개의 댓글

comment-user-thumbnail
2022년 2월 15일

혹시 시간이 된 다면 docker-compose도 알아두시면 좋을 것 같습니다.
실제 서비스에서는 하나의 컨테이너가 아니라 여러개의 같이 띄웁니다. (백엔드, 디비, 프론트 등)
이것을 한번에 관리해주는게 docker-compose입니다!

1개의 답글