Docker - Node.js 설정: 초보자 가이드

안녕하세요, 도전하는 개발자 여러분! 오늘 우리는 Docker와 Node.js의 세계로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 모험을 단계별로 안내해드리겠습니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 우리는 기본부터 시작하고 단계를 밟아갈 것입니다. 그러니 커피(또는 차, 당신의 취향에 따라)를 한 잔 마시고, 이제 시작해봅시다!

Docker - Setting Node.js

Docker는 무엇인가요?

구체적인 내용에 들어가기 전에 Docker에 대해 이야기해보겠습니다. 새로운 집으로 이사할 때, 다양한 모양과 크기의 상자에 모든 것을 싸는 대신, 모든 것이 어디서나 트럭이나 배에 딱 맞는 표준화된 컨테이너에 담을 수 있다면 어떨까요? Docker는 소프트웨어에 대해 이와 같은 일을 합니다!

Docker는 애플리케이션과 모든 종속성을 표준화된 단위인 컨테이너로 포장할 수 있게 해주는 플랫폼입니다. 이 컨테이너는 어떤 시스템에서도 일관성 있게 실행되므로, 개발, 배송 및 애플리케이션 실행이 더 쉬워집니다.

Node.js와 Docker를 사용하는 이유는 무엇인가요?

이제 여러분은 "Node.js 애플리케이션에 Docker를 사용해야 하나요?"라는 의문이 들 수 있습니다. 그럼 작은 이야기를 들려드리겠습니다.

한때, Sarah라는 개발자가 있었습니다. 그녀는 랩톱에서 훌륭한 Node.js 애플리케이션을 개발했습니다. 그녀의 애플리케이션은 완벽하게 작동했습니다! 하지만 팀의 서버에서 실행하려고 할 때, 서버가 다운되었습니다. 문제는 무엇이었을까요? Node.js의 다른 버전과 일부 누락된 종속성 때문이었습니다. Sarah는 이 문제를 해결하려고 몇 일 동안 고생했습니다.

Sarah가 Docker를 사용했다면, 이러한 골칫거리를 피할 수 있었을 것입니다. Docker는 애플리케이션이 어디서든 - 랩톱, 동료의 데스크톱, 클라우드의 서버에서도 동일한 환경에서 실행되도록 보장합니다.

Docker를 Node.js에 설정하는 방법

좋아요, 우리는 이제 실제 설정에 손을 대보겠습니다!

단계 1: Docker 설치

먼저, 우리는 Docker를 우리의 기계에 설치해야 합니다. Docker 웹사이트로 이동하여 운영 체제에 맞는 Docker Desktop을 다운로드합니다. 설치 지침을 따라 설치를 완료하면 준비가 끝납니다!

단계 2: Node.js 애플리케이션 생성

간단한 Node.js 애플리케이션을 컨테이너화하기 위해 새로운 디렉토리를 만들고 해당 디렉토리로 이동합니다:

mkdir my-node-app
cd my-node-app

이제 간단한 package.json 파일을 생성합니다:

npm init -y

이 명령은 기본 값으로 package.json 파일을 생성합니다. 그런 다음, Express라는 인기 있는 Node.js 프레임워크를 설치합니다:

npm install express

이제 app.js라는 파일을 생성하고 다음 코드를 추가합니다:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
res.send('Hello, Docker!');
});

app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});

이 간단한 애플리케이션은 루트 URL을 방문할 때 "Hello, Docker!"를 응답하는 웹 서버를 생성합니다.

단계 3: Dockerfile 생성

이제 흥미로운 부분 - Dockerfile을 생성하는 것입니다! Dockerfile은 Docker가 우리의 컨테이너를 빌드하는 방법을 알려주는 레시피와 같습니다. 프로젝트 디렉토리에 Dockerfile (확장자 없음) 파일을 생성하고 다음 내용을 추가합니다:

# 공식 Node 런타임을 부모 이미지로 사용
FROM node:14

# 컨테이너 내 작업 디렉토리 설정
WORKDIR /usr/src/app

# package.json과 package-lock.json을 복사
COPY package*.json ./

# 종속성 설치
RUN npm install

# 나머지 애플리케이션 코드 복사
COPY . .

# 포트 3000을 컨테이너 외부에서 접근할 수 있게 설정
EXPOSE 3000

# 애플리케이션 실행 명령 정의
CMD [ "node", "app.js" ]

이를 설명하자면:

  • FROM node:14: 이는 우리가 사용할 기본 이미지를 지정합니다 - 이 경우 Node.js 버전 14입니다.
  • WORKDIR /usr/src/app: 이는 컨테이너 내 작업 디렉토리를 설정합니다.
  • COPY package*.json ./: 이는 우리의 package.json 파일을 컨테이너에 복사합니다.
  • RUN npm install: 이는 종속성을 컨테이너 내에 설치합니다.
  • COPY . .: 이는 나머지 애플리케이션 코드를 컨테이너에 복사합니다.
  • EXPOSE 3000: 이는 포트 3000을 컨테이너 외부에서 접근할 수 있게 설정합니다.
  • CMD [ "node", "app.js" ]: 이는 우리의 애플리케이션을 실행하는 명령을 정의합니다.

단계 4: Docker 컨테이너 빌드 및 실행

이제 Dockerfile이 준비되었으므로, Docker 이미지를 빌드합니다:

docker build -t my-node-app .

이 명령은 Docker 이미지를 빌드하고 my-node-app 태그를 지정합니다. 끝의 .은 Dockerfile이 현재 디렉토리에 있음을 나타냅니다.

빌드가 완료되면, 우리는 컨테이너를 실행할 수 있습니다:

docker run -p 3000:3000 my-node-app

이 명령은 우리의 컨테이너를 실행하고 컨테이너의 포트 3000을 호스트의 포트 3000으로 매핑합니다.

축하합니다! 이제 브라우저에서 http://localhost:3000을 방문하여 "Hello, Docker!"를 볼 수 있어야 합니다.

일반 Docker 명령

다음은 유용한 일반 Docker 명령 목록입니다:

명령 설명
docker build Docker 이미지를 Dockerfile로부터 빌드
docker run Docker 컨테이너를 실행
docker ps 실행 중인 컨테이너 목록
docker stop 실행 중인 컨테이너 중지
docker rm 컨테이너 제거
docker images Docker 이미지 목록
docker rmi Docker 이미지 제거
docker logs 컨테이너 로그 보기

결론

이제 여러분은 Docker를 사용하여 Node.js 애플리케이션을 설정하는 방법을 성공적으로 배웠습니다. 우리는 Docker가 무엇인지, 왜 유용한지, 그리고 Node.js 애플리케이션을 위해 Docker 컨테이너를 생성하고 실행하는 방법을 배웠습니다.

기억하시길, 새로운 기술을 배우는 것은 연습이 필요합니다. 첫 번째 시도에서 완벽하게 작동하지 않는다고 실망하지 마세요. 계속 실험하고, 언제쯤 프로로 변신할 것입니다!

마무리하면서, 저는 당신에게 작은 비밀을 공개하고 싶습니다. Docker를 처음 시작할 때, 제가 실수로 docker run 대신 docker build를 입력하고, 변화가 왜 나타나지 않는지에 대해 한 시간 동안 고민했습니다. 우리 모두 실수를 저지르는 것이 중요한 것입니다 - 그게 우리가 배우는 방법입니다!

계속 코딩하고, 배우고, 가장 중요한 것은 즐기세요! 다음에 만나기까지, 행복하게 Docker화하세요!

Credits: Image by storyset