정의
도커는 무슨 문제 상황에서 도입해서 활용할 수 있을까?
- 도커는 컨테이너를 생성하고 관리하는 도구
- 컨테이너란 “표준화된 소프트웨어 유닛”이다.
- 컨테이너에 동일한 버전을 사용하는 종속성이 설치됐을 때, 항상 동일한 동작과 결과를 보장한다.
- 컨터이너 안에 “소프트웨어 유닛, 코드가 포함된 패키지 및 코드를 실행하는 종속성을 보관한다”
- 컨테이너를 왜 쓸까? (독립적인 표준화된 애플리케이션 패키지를 원하는 이유는?)
- 원격시스템의 종속성과 로컬/개발시스템의 종속성(버젼)이 다를때, 실행이 되지 않기 때문.
- 우리가 제품 생산에서 가지고 있는 것과 똑같은 개발 환경을 가짐으로써, 로컬/개발 환경에서의 테스트 결과를 신뢰할 수 있음.
- 팀이나 회사 내의 각각 개발 환경이 서로 다를 때.
- 프로젝트 간 서로 다른 버젼을 사용할 때.
- 원격시스템의 종속성과 로컬/개발시스템의 종속성(버젼)이 다를때, 실행이 되지 않기 때문.
가상머신 vs Docker 컨테이너
- 왜 굳이 도커를 써야 할까요?
- 재현 가능한 환경적인 문제는 버츄얼 머신으로 해결할 수 있는 것 아닐까요?
- 버츄얼 머신의 장점
- 장점으로는 분리된 환경을 생성할 수 있고
- 그 안에 환경별 구성을 가질 수 있으며
- 모든 것을 안정적으로 공유하고 재생산할 수 있지만
- 버츄얼 머신의 단점
- 여러 버츄얼 머신에서 발생하는 오버헤드.
- 여러 대인 경우, 매번 새로운 컴퓨터를 머신 내부에 설치해야 하고
- 중복 복제, 즉 낭비되는 공간이 발생하게 됩니다.
- 메모리, CPU, 또한 우리 하드 드라이브의 공간을 낭비하게 되죠.
- 도커 컨테이너의 장점
- 가볍다.
- 가상머신보다 격리 속성을 완화하여
애플리케이션 간에 운영체제를 공유
한다. 따라서 가상 머신에 설치하는 것보다 횔씬 작다.
- 가상머신보다 격리 속성을 완화하여
- 도커 이미지 기반으로 재현 가능하다.
- 구성 파일을 사용하여 컨테이너를 구성하고 그를 설명할 수 있다.
- 이미지를 다른 사람과 공유하여 모든 사람이 자신의 시스템에서 여러분의 시스템에 있는 동일한 컨테이너를 시작할 수 있도록 할 수 있다.
- 가볍다.
설치방법
MacOS
https://docs.docker.com/desktop/install/mac-install/
실습
- Docker Desktop : Docker Desktop을 실행한다.
- 코드 작성 : dockerfile 및 아래 코드를 작성한다.
- 도커 빌드 : docker build .
- 도커 컨테이너 ID 확인 : docker ps
- 컨테이너 실행 : docker run run -p 3000:3000
docker_container_own_id
- 컨테이너 중지 : 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" ]
새롭게 알게 된 점
- 도커에 관해 전반적인 내용을 복습할 수 있어서 좋았다.
레퍼런스
반응형
'CS > 기타' 카테고리의 다른 글
[마이크로서비스 아키텍처 구축] 챕터2. 마이크로서비스 모델링 방법 (0) | 2024.02.02 |
---|---|
[마이크로서비스 아키텍처 구축] 챕터1. 마이크로서비스란? (MSA 도입 전에 고려해야 하는 것들) (0) | 2024.01.19 |
[소프트웨어 아키텍처 101] 챕터 5. 아키텍처 특성 식별 (0) | 2024.01.17 |
[소프트웨어 아키텍처 101] 챕터 4. 아키텍처 특성 정의 (0) | 2024.01.17 |
[소프트웨어 아키텍처 101] 챕터 3. 모듈성 (1) | 2024.01.17 |
댓글