[개발환경 구성] Docker란?

DYKO·2022년 11월 17일
0

개발환경구성

목록 보기
1/3

🔗 Docker docs : 공식 문서 및 설치 경로, 가이드를 볼 수 있습니다.

Docker로 개발환경 구성하기 1탄

새로 산 노트북에 개발환경을 구성을 해야해서 겸사겸사 공부할 겸 Docker를 사용해 환경을 구성해보려고 한다. 2년 전에 회사에선 윈도우를 사용해서 WSL을 활용해서 Docker를 구성해보다가 중간에 사내 사용 불가 프로그램으로 확정되어 그냥 설치 도중에 삭제해버렸었다. 이후 까맣게 잊고 있다가 새로 산 노트북에 Spring Boot를 실습해볼겸 MySQL 서버를 도커를 이용해 구성하기로 결정했다.

Docker를 설치하기 전, 먼저 Docker가 무엇이고 왜 해당 플랫픔을 활용하는지에 대한 내용을 정리하였다.


💡 Docker란?

Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼

VM 가상화 vs 컨테이너 기반 가상화

  • VM 가상화
    기존 VM 가상화 플랫폼은 호스트와 완벽하게 분리되는 장점이 있지만, 그만큼 무겁고 느림
    더 높은 격리 레벨을 지원해서 보안적인 측면에서 더욱 유리하며, 커널을 공유하지 않아 멀티 OS가 가능함

  • 컨테이너 기반 가상화
    기존 OS를 가상화 시키는 VM 가상화 플랫폼과 달리 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식
    즉, 컨테이너 기반 가상화는 호스트의 커널을 공유하기 때문에 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 함
    커널 공유 시, I/O처리가 쉽게 되어 성능의 효율을 높일 수 있는 반면 멀티 OS는 불가함

Docker Image와 Docker File

  • Docker Image: 컨테이너를 실행할 수 있는 실행 파일, 설정 값 등을 담은 것

  • Docker File: 이미지 생성의 출발점, 이미지를 구성하기 위한 명령어들을 작성한 파일로서 해당 파일을 실행하게 되면 컨테이너에 설정한 이미지들이 구성되게 됨

    FROM jdk8:latest
    
    WORKDIR /app
    
    RUN mkdir /app/nexus-2.14.9-01
    RUN mkdir /app/sonatype-work
    RUN yum -y install httpd
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_181
    ENV PATH=$JAVA_HOME/bin:$PATH
    ENV CLASSPATH=.
    
    EXPOSE 3411
    ADD run.sh /app/
    
    CMD["/app/run.sh"]

💡 Docker를 사용하는 이유

독립된 개발 환경 보장

  • 가상화를 통해 컨테이너를 분리하기 때문에 컨테이너 내부에서 어떤 작업을 하던 Host OS에 영향을 주지 않음

비교적 가볍고 빠른 성능과 유동적인 자원성

  • 위에서 설명한 것과 같이, Host OS의 커널을 공유하고 자원만 분리하여 사용하는 것이므로 I/O 처리가 쉽게 되어 성능의 효율을 높일 수 있음
  • 새롭게 OS 커널을 생성하는게 아니기 때문에, 가상화 환경마다 사용할 수 있는 자원을 고정으로 정하지 않고 유동적으로 변경할 수 있음

도커 이미지와 도커 파일을 통해 실행 시점에 상관없이 여러 컨테이너를 동일한 환경으로 구성

  • 운영 환경과 개발 환경을 모두 동일하게 맞춤으로써 라이브러리 버전 이슈 등을 사전에 방지
  • 운영 환경에서의 눈송이 서버(Snowflakes Server) 방지
    • 눈송이 서버란?
      여러 개의 운영 서버에서 각 서버마다 운영 기록이 달라 환경(OS 버전/패키지 버전 등)이 완벽하게 같지 않은 서버들이 존재하는 상황

쉽게 Scale Out 을 할 수 있는 유연성

  • 이미 만들어 둔 이미지를 이용하여 서버를 늘리거나 더 좋은 서버로 이전할 때도 패키지 등을 새로 하나씩 설치하지 않고도 동일한 환경을 구성할 수 있음


참고문헌

왜 굳이 도커(컨테이너)를 써야 하나요?
Docker의 개념 및 핵심 설명

profile
엔지니어가 되는 그 날 까지!

0개의 댓글