*️⃣ Docker를 사용해서 배포하는 이유
우리가 서버를 돌리기 위해서는 먼저 환경이 갖춰져야 한다.
새로 컴퓨터를 샀다거나 또는 새로 직원이 들어왔다고 생각해본다. 그럼 컴퓨터에 우리가 개발한 환경과 똑같이 만들어야한다.
이를위해 Node.js와 같은 언어 그리고 언어의 버전, 데이터베이스, 수 많은 node_modules를 버전을 맞춰서 설치해줘야 한다. 한두가지가 아니다.
그래서 예전 회사에서는 환경을 구축하는 과정을 하나씩 캡쳐하고, 기록해서 방법을 정리해두기도 한다. 가이드 문서가 있다고 한들 매번 이렇게 구축하는 것은 매우 번거로운 일이다. 이를 간편하게 해주는 것이 바로 도커다.
*️⃣ Docker 란?
도커는 개발 환경 요소들이 설치된 모습을 이미지로 저장한다. 저장한 이미지를 클라우드에 올린다. 이미지들이 서로 연결되서 동작하는 설정을 문서(Dockerfile)로 저장한다. 새 컴퓨터에 가서 복사한 문서의 내용대로 이미지를 다운받아 설치한다.
가상 머신과 비슷하다고 볼 수 있다. 하지만 가상머신보다 훨씬 빠르고, 자원을 효율적으로 사용한다. 왼쪽이 가상머신, 오른쪽이 도커다. 도커에는 불필요한 추가적인 운영체제 설치가 필요 없다.
도커 허브에서는 npm 다운 받는 것처럼 다른 사람들이 올려놓은 이미지를 다운로드 할 수도 있다. 또한, 한 컴퓨터에서 다른 환경의 여러 서비스를 실행해야 하는 경우, 컨테이너로 분리되어 있기 때문에 서로 독립되어 실행 될 수 있다.
이것들을 모두 간단한 명령어로 실행 할 수 있다.
*️⃣ Docker-compose의 이해
docker-compose up
명령어를 입력해서 컨테이너를 실행한다.docker-compose.yml 파일
version: "3.3" services: class_build: build: context: . dockerfile: Dockerfile ports: - 3000:3000
*️⃣ Dockerfile
Dockerfile
FROM node:16 WORKDIR /class_build/ COPY . /class_build/ RUN yarn install RUN yarn build CMD yarn start
*️⃣ 환경 변수 설정
ENV [key] [value] ENV [key]=[value]
💡 도커를 사용 이유
환경 격리
: 도커는 컨테이너라는 단위로 애플리케이션과 그 종속성을 격리시킨다. 각각의 컨테이너는 독립적인 실행 환경을 가지며, 서로 영향을 주지 않고 독립적으로 실행될 수 있다. 이를 통해 애플리케이션의 종속성 충돌을 방지하고, 애플리케이션을 더 예측 가능하게 만든다.
이식성
: 도커 컨테이너는 애플리케이션과 종속성을 패키징하여 이식성을 높인다. 어느 환경에서든 동일한 실행 환경을 제공하기 때문에, 개발 환경과 프로덕션 환경 사이의 차이를 최소화하고, 애플리케이션을 쉽게 배포하고 실행할 수 있다.
확장성
: 도커는 가상화된 컨테이너를 사용하여 애플리케이션을 확장하기 용이하게 만든다. 여러 개의 컨테이너를 사용하여 애플리케이션을 세분화하고, 필요에 따라 컨테이너를 추가하거나 제거하여 애플리케이션의 성능과 확장성을 조정할 수 있다.
효율성
: 도커는 가상화된 컨테이너를 사용하여 자원을 효율적으로 관리한다. 가상화된 컨테이너는 가볍고 빠르게 시작할 수 있으며, 호스트 운영 체제와 자원을 공유함으로써 자원의 낭비를 최소화한다.
자동화
: 도커는 인프라스트럭처를 코드로 관리하는 컨테이너 오케스트레이션 도구와 통합될 수 있다. 이를 통해 애플리케이션 배포, 확장, 관리 등을 자동화할 수 있으며, 개발과 운영의 간극을 줄여 DevOps 프로세스를 강화할 수 있다.