devops-docker"잘" 쓰기

주수호·2021년 3월 9일
0

[devops]

목록 보기
1/2

🐳 docker란?

docker icon

개념

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

  • 도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다.

  • 컨테이너는, 우리가 쉽게 생각하는 배에 싣는 화물 수송용 컨테이너와 같은 개념이다. 필요한 구성품들을 컨테이너에 담아, 격리되어진 환경을 만든다.

docker icon

풀어서 정리

  • 각 각의 컨테이너들이 자신들의 고유한 화물들을 가지고 있고, 그 컨테이너 안에 격리되어져 있다.

  • 도커 또한 하나의 고유한 컨테이너환경(오픈소스 가상화)환경으로, 원하는 형태의 컨테이너를 하나의 서버에서 독립적으로 관리가 가능하다.

docker icon


🐳 docker를 조사하게 된 계기

  • 리눅스 환경에서 개발 환경을 직접 구축해본 사람이라면, (apm , node.js, django 등) 생각보다 구축해주어야 하는 환경세팅 단계가 많다.

  • docker라는 기술을 통해서, 인프라관리 혹은 빌드작업의 어려움에서 벗어나서 안정적이고 동일한 환경의 어플리케이션 관리 + 개발 효율성 증대가 가능하게 될 것 이라고 생각한다.


🐳 Container VS VM 개념 비교하기

docker icon
Hypervisor GUEST OS유무가 가장 큰 차이다

  • 하이퍼 바이저는 각각의 머신(VM)인스턴스(GUESTOS)를 생성하는 역할을 한다. (aws, azure)
  • 각각의 VM은 기본적인 os의 구성요소 (storage, ram, network, cpu)들을 모두 가지고 있다. 컴퓨터(서버)가 가상화 되어진 것이다.

정리하자면,

VM은 하드웨어 수준의 가상화

  • 하나의 랙에 큰 서버가 있고, 우리는 그 서버의 물리적 리소스를 최대한 활용하고자 한다.
  • Hypervisor를 활용하여, 여러대의 가상 서버(VM)들을 생성해 낼 수 있도록 한다.
    => 각각의 다른 가상컴퓨터(서버)를 추가하는 개념

Container는 운영체제 수준의 가상화

  • 하나의 운영체제와 하나의 커널을 공유하여 사용하지만, 각 컨테이너는 자신만의 고유한 바이너리, 고유한 어플리케이션환경을 구축할 수 있도록 한다.
    => 각각의 독립되어지는 프로세스 환경을 추가하는 개념

VM과 컨테이너 비교하기


🐳 docker와 마이크로서비스

마이크로서비스란 어떤걸 말하는 걸까?

  • 네이버를 생각해보자. 네이버는 여러개의 서비스를 가진다.
  • 메일서버, 검색기능, 쇼핑몰, 채팅, 뉴스 등등 다양한 서비스들이 복합적으로 있는 포털사이트이다.

이러한 서비스들이 하나의 소스로 관리되어진다면 어떨까?

  • 배포, 형상관리 측면에서 매우 복잡해진다.
  • 빌드, 개발환경 구축작업이 어렵고, 빌드과정 또한 무거워 질 것이다.
  • 일부 기능에 대해서 테스트를 진행하는 것이 어려워 진다.

마이크로 서비스는 이러한 어려움을 해소하기 위해 제시하는 서비스 아키텍쳐 구조이다.

네이버를 구조화 시킨다면?
위처럼, 네이버를 서비스 단위로 쪼갤 수 있다. 하지만, 각 서버를 실제 VM단위로 관리한다면, 프로젝트 전체를 관리하는 것에 여러 문제가 생긴다.

  • 전체 서비스를 테스트 하는 것이 어렵다
  • 각각의 서버들을 따로 관리해야하기에 형상관리 배포 레벨에서 리소스가 많이 소요 되어질 수 있다.

도커는 이러한 부담감을 줄이면서, 마이크로서비스 아키텍쳐를 디자인 할 수 있다.

마이크로 서비스 아키텍쳐

  • 도커의 컨테이너 기능을 통해서 우리는 한서버 내에서 이런 구조화가 가능하다.
  • 각 각의 컨테이너를 통합하여 빌드하는 기능을 제공하기에, 서비스 컨테이너화는 마이크로 서비스 구조를 설계하는데에 매우 유용한 방법이라고 할 수 있다.

🐳 경험해보고 느낀 docker의 좋은 점

  • 매번 개발 서버를 손수 빌드할 필요가 전혀 없다.
    docker명령어 한 줄이면 원하는 어플리케이션 서버를 손쉽게 빌드가능하다.

  • 컨테이너 빌드자체를 진행하면서 생기는 사전이슈들 (example) 프레임워크의 라이브러리 버젼 호환성 문제, 장고의 마이그레이션 충돌) 등과 같은 문제에 대해 사전 확인이 가능해 진다.

  • 가상서버단위가 아닌 컨테이너 단위로, 자신이 원하는 형태의 서비스 아키텍쳐 구성이 가능하다.

  • docker-hub에 다양한 기술스택의 official컨테이너들이 존재하고, 이를 활용하여 취향에 맞는 개발환경, 어플리케이션 환경을 만들 수 있다.

docker-hub-official


🐳 경험해보고 느낀 docker의 안 좋은 점

  • 특정 개발환경에 대한 이해도가 없으면, dockerfile스크립트를 작성하는 것이 힘들다.

  • 소스의 형상관리에 더하여 dockerfile의 관리가 함께 요구되어진다.
    (배포 환경 설정에 대한 형상 관리도 개발되어지는 내용에 따라 반영이 되어져야 함)

  • 이해도 없이 배포되어지고 있는 컨테이너를 스크립트 분석없이 빌드하여 컨테이너에서 사용하게 되는 경우, 추후 빌드문제가 생겼을 때에 원인을 해결하는 것이 매우 힘들다.
    (도커환경은 개발팀에서 직접 만드는 것이 정신건강에 이롭다)


실습

🐙 docker 설치하기

window버젼 10 이상 (필요)
x64 시스템의 경우: 버전 1903 이상, 빌드 18362 이상
ARM64 시스템의 경우: 버전 2004 이상, 빌드 19041 이상

최신자 버젼에서는 윈도우 전용 docker어플리케이션을 공식 홈페이지를 통해서 사용 할 수 잇다.

docker-win-ver

우분투 18.04 이상 (권장)

공식 페이지에서는 ubuntu 터미널 명령어를 통해 안정화 버젼을 설치할 수 있도록 친절히 설치안내 페이지를 제공한다.

우분투에서 도커 설치하기

🐙 시연하기 전에 : dockerfile 알아보기

dockerfile이란?

  • 도커에서 실제 컨테이너환경을 만들 때 쓰는 컨텍스트 파일이다.

  • 익숙한 용어로 말하면 설계도와 같은 느낌인데, 가장 기본적인 이미지의 구성단계라고 생각하면 좋다.

docker build . 를 실행하게 되면, 현재 디렉토리 내에 있는 dockerfile을 읽어들여 이미지 파일을 생성한다.

만들어진 이미지파일을 docker run 명령어 통해 자신이 설계한 형태의 컨테이너 환경을 사용 할 수 있다.

🐙 시연하기 전에 : docker-compose 알아보기

docker-compose란?

  • 도커에서 만들어진 별도의 컨테이너들을 한번에 빌드하고, 의존성을 만들 수 있도록 설정하는 docker명령어 이다.

  • 보통 메인이 되어지는 어플리케이션 서버는 dockerfile로 별도의 컨테이너로 관리하고, 나머지 데이터베이스, 별도의 캐싱처리를 하는 서버 (redis)의 경우에는 공식 컨테이너를 활용하여, 한번에 빌드를 하는 방식으로 개발을 진행한다.

참조한 링크들

도커 기본 개념 짚고 넘어가기
https://pearlluck.tistory.com/119?category=854935

가볍게 vm과 container비교하기
https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd

도커 컴포즈
https://www.44bits.io/ko/post/almost-perfect-development-environment-with-docker-and-docker-compose#%EB%8F%84%EC%BB%A4-%EC%BB%B4%ED%8F%AC%EC%A6%88%EB%A1%9C-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0

profile
항상 준비하는 엔지니어

0개의 댓글