기술면접 관련 및 참고하기

도커(Dokcer)가 뭔데? 도커 사용기

지팡구 2023. 3. 3. 01:31

들어가기

개발자라면 누구나 한번쯤은 도커라는 단어를 들어봤을 것이라 생각한다. 물론 도커를 사용하지 않아도 서비스를 잘 구성할 수 있지만, 분명히 그 속에서 오는 많은 제약사항들이 존재할 것이다. 그래서 직접 도커 (Docker)가 뭔지 알아보고 지금 진행중인 프로젝트에 적용해보려고 한다.

 

사실 도커 사용에 앞서 굉장히 많은 고민을 했다.

그 이유인 즉슨 우리가 지금 사용하고 있는 프로젝트에 도커를 적용하는 것이 바람직한가?에 대해 생각을 많이 해봤다.

현재까지도 도커없이 프로젝트가 잘 진행중이며 갑자기 잘 돌아가는 프로젝트의 일부분을 도커에 올려서 사용할 필요성을 못느꼈기 때문에, 굳이 도커를 사용해야하나? 라는 생각에서 시작되었다.

 

이러한 고민 와중에 한 Step 더 나아가 Nginx를 이용한 로드밸런서가 언급되었고, 언급 내용을 바탕으로  Docker에다가 project, redis, nginx까지 올려보기 위해 도커를 공부해야겠다고 생각했다.

 


도커 알아보기

1. 도커(Docker)란 ?

인터넷에 도커에 관한 정의를 찾아보면 이렇게 나와있다.

" 컨테이너 기반의 오픈소스 가상화 플랫폼 " 여기서 가장 중요한 기술은 컨테이너 기반의 기술이라 생각한다. 우리가 개발을 하면서 Network, Storage, Security 등 다양한 영역의 정책은 제 각각 다르다. 또한 실행하는 환경도 달라서 어떻게 이들간의 괴리를 극복하고 한계를 뛰어넘으며 환경을 일괄적으로 유지하게 도와줄 수있는지에서 비롯된 환경이 컨테이너라는 개념이다.

 

그래서 이 컨테이너는 모듈화되고, 컴퓨터 공간, 환경 등을 격리한 공간을 의미한다. 

 

이러한 컨테이너 기술의 특징은 다음과 같다

  • 경량화 
  • 컴퓨팅 자원
  • 구동 방식
  • 안정성

1. 경량화 ( 시스템에 대한 요구사항이 적음 )

컨테이너 기술의 가장 인기있는 이유는 경량화가 주 된 이유이다. OS 없이 프로세스와 파일 시스템을 분리하는 형태로 크기가 작고 가볍다는 장점이 있다. 그리고 가상화를 위한 하드웨어의 에뮬레이트 단계 없이, 분리된 공간을 만들어서 오버헤드 발생이 줄어든다.  그래서 컨테이너에 OS가 포함되지 않아서 크기가 수십 MB에 불과하며 운영체제에 관한 비용이 들지 않아 시간도 빠르고 비용도 현저히 적다. 그래서 마이크로 서비스 구축에 최적화 되어있다.

 

2. 컴퓨팅 자원

컨테이너에 올라간 어플리케이션은 기존의 가상 머신 방식에서 사용되는 자원이나 여러 리소스들에 대한 부하가 훨신 적은편이며, OS 위에서 하나의 어플리케이션이 동작하는 것과 같은 수준의 리소스를 사용하게 된다. 

 

3. 구동 방식

컨테이너는 모든 파일, 라이브러리 등이 패키지화 되어있어서 기존의 시스템에서 실행하는 식으로 구동 방식이 간단하다. 기존에 가상머신 방식은 특정 어플리케이션을 수행하기 위해선 가상화 머신을 띄운 뒤 자원을 할당하고, 필요한 게스트 OS를 부팅 후 어플리케이션을 수행시킨다는 점에서 큰 차이점이 있다.

 

4. 안정성

각 컨테이너를 통해서 통제되는 영역으로 구분되어 관리되지만, 호스트 OS 커널을 공유하는 구조라 장애 발생에 관해서 영향을 받을 수 있다는 점도 존재한다. 

 

 

도커는 이러한 컨테이너 기반의 기술 중 하나이다.

 

출처 : Docker

도커는 리눅스 컨테이너(LXC)기술 기반으로 기존의 컨테이너(LXC) 기술보다 이식성을 향상시키고, 더 쉽고 빠르게 워크로드를 배포, 복제 해서 백업이 가능하다. 

 

도커에서 가장 중요한 개념은 컨테이너와 이미지 라는 개념이다.

 

도커 이미지(Docker Image)는 컨테이너를 만드는데 사용되는 읽기 전용의 템플릿으로, 컨테이너 실행에 필요한 파일, 설정 값등을 포함하고 있는 도커 파일을 만든 후 DockerFfile을 빌드해 이미지를 만든다. 

이때 이미지는 컨테이너 실행에 필요한 값을 포함하고 있다고 했는데, 변하지 않는다는 특성이 있다. 

 

도커 컨테이너(Docker Container) 는 앞서 이미지를 만든 후 컨테이너를 생성하면 이미지의 목적에 맞게 파일이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생기는데, 이것을 도커 컨테이너라고 한다.

 

출처 : youtube 드림코딩님의 도커 한방에 정리에서 가지고 옴

1.2 도커 관련 정리를 하자면

 

우선 우리가 필요한 모든 것들을 도커 컨테이너 속에다 다 넣어서 컨테이너를 올리게 되면 언제 어디에서든 이 컨테이너를 받아서 사용하면 환경에 방해받지않고 애플리케이션을 구동할 수있다.( 도커 이미지라는 파일에 우리가 필요한 것을 다넣고, 우리는 이것을 도커 컨테이너에 올린다 )

 

도커를 사용하기 위해서 꼭 필요한 3가지가 있다

1. Dockerfile

  • Copy files : 어플리케이션을 구동할 때 필요한 파일들
  • Install dependencies : 어플리케이션 구동 시 필요한 라이브러리들
  • Set environment variables :  환경 변수에 관한 설정
  • Run setup scripts : 어떻게 구동해야하는지 스크립트

2. Image

  • 어플리케이션 실행 시 필요한 모든 것을 담고있음 -> 불변의 상태

3. Container

  • 만든 이미지 파일을 실행할 수있는 환경을 제공함

도커 사용하기 - 마무리

1. 우선 도커를 다운받아야 한다

2. 그 후 도커 파일을 설정해야하는데, 나는 이렇게 설정했다. ( 인터넷 참고 바람 )

FROM adoptopenjdk/openjdk11
ARG JAR_FILE=./build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar","/app.jar"]

3. 내 프로젝트를 빌드하고 build 한 파일을 docker에 이미지화 시킨다

 

명령어 : docker build . -t ( 사용할 이름)

 

4. 해당 이미지 파일을 런 시켜본다

 

명령어 : docker run (사용할 이름)

 

사실상 이 블로그에서 참고하기 보단 아래의 블로그들과 구글에 검색해서 원하는 정보를 얻는 것이 더 빠를 수 있다..

 

마무리 레퍼런스

 

http://www.opennaru.com/openshift/container/benefits-of-container/

 

컨테이너 를 꼭 사용해야 하는 이유는 ? - Opennaru, Inc.

컨테이너 는 OS를 가상화하여 여러 개의 컨테이너를 OS 커널에서 직접 실행합니다. 컨테이너는 기존의 가상화 기술보다 훨씬 가볍게 동작하며, OS 커널을 공유하고, 시작 시간이나 종료 시간이 빠

www.opennaru.com

https://m.blog.naver.com/shakey7/221600166205

 

클라우드 가상화 기술 정리 2 (컨테이너 / 도커 Docker / 리눅스 / 커널 / 라이브러리 / 바이너리 / 운

1. 컨테이너(Container) 기술 배경 - 컨테이너라는 개념은 2000년대 중반 리눅스에 내장된 LXC(LinuX...

blog.naver.com

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

https://tech.cloudmt.co.kr/2022/06/29/%EB%8F%84%EC%BB%A4%EC%99%80-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%9D%98-%EC%9D%B4%ED%95%B4-1-3-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%82%AC%EC%9A%A9%EB%B2%95/