이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Docker] 도커와 컨테이너 기술

  • 2023.03.07 09:49
  • DevOps/Docker && Kubernetes
반응형

 

 

 

도커는 컨테이너 기술을 사용해 애플리케이션의 실행 환경을 구축하는 플랫폼이다.

 

컨테이너는 호스트 운영체제 상에 애플리케이션을 작동시키는데 필요한 요소들을 모아서 별도의 서버인 것 처럼 동작하는 것을 말한다.

컨테이너 기술을 사용하지 않으면 여러 애플리케이션들이 같은 시스템 리소스를 사용하기 때문에 미들웨어나 라이브러리의 버전이 다른 경우는 각 애플리케이션이 서로 영향받을 수 있다.

 

하지만, 컨테이너를 도입하면? 

호스트 운영체제의 리소스를 분리시키고, 여러 컨테이너가 사용해 시스템 리소스를 각 애플리케이션들이 독점적으로 점유하고 있는 것 처럼 보이게 할 수 있다.

 

도커는 애플리케이션의 실행에 필요한 환경을 이미지로 취합하고, 그 이미지를 활용해 다양한 환경에서 애플리케이션의 실행 환경을 구축한다.

이미지를 템플릿으로 컨테이너를 생성하고, 인프라 환경을 컨테이너로 관리한다.

 

 

 

 

좌측은 기존 시스템 개발 흐름이고, 우측은 컨테이너 기술을 도입한 후의 시스템 개발 흐름이다.

도커는 서버 가상화 기술으로, 하나의 서버에서 애플리케이션들이 독자적인 세팅으로 작동될 수 있도록 한다.

 

 

이미지는 애플리케이션의 실행에 필요한 파일들이 저장된 디렉토리이다.

Docker 명령을 사용해서 이미지를 만들 수 있지만, CI / CD를 고려하면 Dockerfile이라는 설정 파일을 만들어 자동으로 이미지를 만드는 방법을 사용하는 편이 합리적이다.

 

이미지는 겹쳐서 사용할 수 있다.

 

A 애플리케이션을 사용할 때 a 환경이 필요하고, AB 애플리케이션을 사용할 때 a와 b환경이 필요하다고 해 보자.

a 환경은 이미지1로 구축하고 b환경은 이미지2로 구축 해 놓으면 AB 애플리케이션을 작동할 때 필요한 환경은 이미지1과 이미지2를 겹쳐서 구축할 수 있다.

즉, 이미지를 겹쳐서 하나의 이미지를 만들 수 있으니, 이를 활용해 효율이 좋은 이미지를 만드는 편이 좋다.

 

이미지를 만들 때는 Layer기반 Dockerfile 스크립트가 사용된다.

 

스크립트를 반복해서 실행할 때 전과 비교해서 변경된 내용이 없다면 캐시된 결과를 사용하지만, 수정된 부분이 있다면 그 부분부터 새로 빌드한다.

 

Dockerfile의 각 명령어들은 레이어를 생성하고, 한 번 만들어진 레이어는 캐시돼 재사용 할 수 있다.

 

FROM node 

WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

EXPOSE 80

CMD ["node" "server.js"]

 

 

따라서 최적화 할 수 있다.

소스코드가 수정되더라도 항상 npm install을 피하도록 하기 위해 package.json을 미리 복사하고 npm install을 수행한다.

이렇게 작성해두면 소스코드 수정이 있더라도 COPY . /app 부터 실행할 수 있어 효율적이다.

 

따라서 스크립트를 작성할 때 잘 수정되지 않는 부분을 앞으로 옮기는 편이 합리적이다.

 

Dockerfile의 스크립트를 작성할 때는 최적화를 고려해서 작성하고, 다른 환경에서도 애플리케이션을 배포할 수 있도록 이식성 있는 이미지를 만들자.

 

Docker Hub에는 다양한 이미지가 업로드 돼 있으니 적절한 이미지를 찾아서 사용하고, 도커를 통해 협업하는 경우 만든 이미지를 업로드하고 허브에 push하고 팀원들이 pull 받아서 개발하는 방식을 사용하자.

 

도커 허브에서도 최적화가 적용되는데... 한 번 pull 받은 이미지는 로컬 시스템에 캐시돼 run 명령어로 즉시 해당 이미지 기반 컨테이너를 실행할 수 있다.

 

run을 수행할 때 먼저 로컬 시스템의 캐시 이미지를 탐색하고, 이미지가 없는 경우 원격에서 이미지를 pull로 가져온다.

 

컨테이너가 독립된 환경에서 실행될 수 있도록 하기 위해 도커는 namespace개념을 사용한다.

(C++에서는 이름 충돌을 방지하기 위해 namespace를 사용했다)

반응형
저작자표시 (새창열림)

'DevOps > Docker && Kubernetes' 카테고리의 다른 글

[Docker] Dockerfile 프로젝트 배포하기  (3) 2023.12.06
[Docker] Docker Compose  (0) 2023.03.24
[Docker] 도커 파일 시스템과 볼륨  (0) 2023.03.09
[Docker] 도커 활용하기  (0) 2023.03.08
[Docker] 시스템 기초 지식  (0) 2023.03.06

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Docker] Docker Compose

    [Docker] Docker Compose

    2023.03.24
  • [Docker] 도커 파일 시스템과 볼륨

    [Docker] 도커 파일 시스템과 볼륨

    2023.03.09
  • [Docker] 도커 활용하기

    [Docker] 도커 활용하기

    2023.03.08
  • [Docker] 시스템 기초 지식

    [Docker] 시스템 기초 지식

    2023.03.06
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (666) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (16)
    • 👥 모각코 (6)
    • 💬 기록 (4)
    • 📚 공부 (2) N
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바