https://www.katacoda.com/courses/docker 사이트에서 학습 후 정리한 내용입니다.
Dockerizing Node.js applications
FROM node:10-alpine #어떤 이미지를 빌드할것인지 정의
WORKDIR /src/app #Create app directory
#install app dependencies
COPY package.json /src/app/package.json
RUN npm install
COPY . . #Bundle app source
EXPOSE 3030
CMD [ "npm", "start" ]
1. Base Images
앞서 살펴봤듯이 모든 이미지는 기본 이미지로 시작되었다.
Node 10.0 에 대한 이미지는 node:10-alpine이다.
이것은 공식적인 이미지보다 더 작고 간소화된 알파인 기반의 빌드버전이다.
Base Image와 함께 어플리케이션이 실행되는 기본 디렉토리를 만들어야 한다.
RUN <command> : 마치 쉘에서 수행중인 것처럼 명령어를 실행할 수 있다.
WORKDIR <directory> : 작업중인 디렉토리를 지정할 수 있다.
FROM node:10-alpine
WORKDIR /src/app
2. NPM install
빌드 시간을 최소한으로 유지하기 위해
Docker는 Dockerfile에 한 줄의 실행 결과를 캐시하여
향후 빌드에서 사용한다.
무엇인가 변경된 경우, Docker는 현재와 모든 행을 무효화하여 모든 것이 최신 상태인지 확인한다.
NPM을 사용하면 package.json 파일이 변경되었을 경우에만
npm install로 재실행한다.
아무 변경이 없으면 캐시된 버전을 사용하여 배포 속도를 높일 수 있다.
다음 명령어를 Dockerfile에 추가한다.
COPY package.json /src/app/package.json
RUN npm install
만약 캐시를 사용하지 않으려면 -no-cache=true 옵션을 docker build 명령어에 추가한다.
3. Configuring Application
dependency들을 설치한 후 나머지 어플리케이션 소스 코드를 복사한다.
npm install을 실행하기 전에 코드를 복사하면 코드가 변경될 때마다 매번 실행하게 된다.
package.json만 복사하면 패키지 내용이 변경된 경우에만 실행되도록 한다.
다음 코드를 Dockerfile에 작성한다.
COPY . .
EXPOSE 3030
CMD [ "npm", "start" ]
4. Building & Launching Container
docker build -t my-nodejs-app . : 이미지 빌드
docker run -d --name my-running-app -p 3000:3000 my-nodejs-app : 빌드된 이미지 실행시키기
curl http://docker:3000 : curl을 사용해 제대로 접근하고 있는지 테스트해본다.
5. Environment Variables
Docker를 사용하면, 컨테이너를 시작할 때 환경 변수를 정의할 수 있다.
예를 들면 Node.js 응용프로그램에서 production 환경에서 실행하고 싶을 때,
NODE_ENV를 지정하여 옵션을 줄 수 있다.
-e 옵션을 사용하여 이름과 값을 -e NODE_ENV = production 과 같이 설정할 수 있다.
명령어
docker run -d --name my-production-running-app -e NODE_ENV=production -p 3000:3000 my-nodejs-app
'개발레시피 > └ 유틸' 카테고리의 다른 글
[Docker] 컨테이너 가상화 기술과 Docker (0) | 2018.12.14 |
---|---|
[Docker] 5. Data Container 만들기 (0) | 2018.11.30 |
[Docker] 3. 컨테이너 이미지 만들기 (0) | 2018.11.30 |
[Docker] 2. 정적 HTML 웹 사이트를 컨테이너로 배포해보기 (0) | 2018.11.29 |
[Docker] 1. Docker 컨테이너 배포하기 (0) | 2018.11.29 |
Comments