CS/기타

[Docker & Kubernetes 실전 가이드] 1과 시작하기

Joonfluence 2024. 1. 18.

정의

도커는 무슨 문제 상황에서 도입해서 활용할 수 있을까?

  • 도커는 컨테이너를 생성하고 관리하는 도구
    • 컨테이너란 “표준화된 소프트웨어 유닛”이다.
    • 컨테이너에 동일한 버전을 사용하는 종속성이 설치됐을 때, 항상 동일한 동작과 결과를 보장한다.
    • 컨터이너 안에 “소프트웨어 유닛, 코드가 포함된 패키지 및 코드를 실행하는 종속성을 보관한다”
  • 컨테이너를 왜 쓸까? (독립적인 표준화된 애플리케이션 패키지를 원하는 이유는?)
    • 원격시스템의 종속성과 로컬/개발시스템의 종속성(버젼)이 다를때, 실행이 되지 않기 때문.
      • 우리가 제품 생산에서 가지고 있는 것과 똑같은 개발 환경을 가짐으로써, 로컬/개발 환경에서의 테스트 결과를 신뢰할 수 있음.
    • 팀이나 회사 내의 각각 개발 환경이 서로 다를 때.
    • 프로젝트 간 서로 다른 버젼을 사용할 때.

가상머신 vs Docker 컨테이너

  • 왜 굳이 도커를 써야 할까요?
    • 재현 가능한 환경적인 문제는 버츄얼 머신으로 해결할 수 있는 것 아닐까요?
  • 버츄얼 머신의 장점
    • 장점으로는 분리된 환경을 생성할 수 있고
    • 그 안에 환경별 구성을 가질 수 있으며
    • 모든 것을 안정적으로 공유하고 재생산할 수 있지만
  • 버츄얼 머신의 단점
    • 여러 버츄얼 머신에서 발생하는 오버헤드.
    • 여러 대인 경우, 매번 새로운 컴퓨터를 머신 내부에 설치해야 하고
    • 중복 복제, 즉 낭비되는 공간이 발생하게 됩니다.
      • 메모리, CPU, 또한 우리 하드 드라이브의 공간을 낭비하게 되죠.
  • 도커 컨테이너의 장점
    • 가볍다.
      • 가상머신보다 격리 속성을 완화하여 애플리케이션 간에 운영체제를 공유한다. 따라서 가상 머신에 설치하는 것보다 횔씬 작다.
    • 도커 이미지 기반으로 재현 가능하다.
      • 구성 파일을 사용하여 컨테이너를 구성하고 그를 설명할 수 있다.
      • 이미지를 다른 사람과 공유하여 모든 사람이 자신의 시스템에서 여러분의 시스템에 있는 동일한 컨테이너를 시작할 수 있도록 할 수 있다.

설치방법

MacOS

https://docs.docker.com/desktop/install/mac-install/

실습

  1. Docker Desktop : Docker Desktop을 실행한다.
  2. 코드 작성 : dockerfile 및 아래 코드를 작성한다.
  3. 도커 빌드 : docker build .
  4. 도커 컨테이너 ID 확인 : docker ps
  5. 컨테이너 실행 : docker run run -p 3000:3000 docker_container_own_id
  6. 컨테이너 중지 : docker stop docker_container_own_name
{
  "name": "docker-complete",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node app.mjs"
  },
  "repository": {
    "type": "git",
    "url": "https://git-codecommit.us-east-1.amazonaws.com/v1/repos/docker-complete-guide"
  },
  "author": "",
  "license": "ISC",
    "engines": {
    "node": ">=14.17.0 <15"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}
//app.mjs

import express from 'express';

import connectToDatabase from './helpers.mjs'

const app = express();

app.get('/', (req, res) => {
  res.send('<h2>Hi there!</h2>');
});

const connectToDatabase = () => {
  const dummyPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, 1000);
  });

  return dummyPromise;
};

await connectToDatabase();

app.listen(3000);
// Dockerfile 

FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "app.mjs" ]

새롭게 알게 된 점

  • 도커에 관해 전반적인 내용을 복습할 수 있어서 좋았다.

레퍼런스

https://www.udemy.com/course/docker-kubernetes-2022/

반응형

댓글