Docker를 사용하여 노드의 단계별 가이드 설정하기
16373 단어 pm2nodedockerjavascript
Docker 컨테이너에서 Node JS를 설정하는 방법 이해
본문의 목표
선결 조건
Itmayzii / 개발자 노드 docker 설정
dev.to 기사의 환매 협의
View on GitHub
1. 간단한 노드 응용 프로그램 설치
우리가 Express를 사용하는 이유는 설정이 매우 간단하고 프레임워크가 매우 유행하기 때문이다.
깨끗한 디렉터리에서 NPM을 초기화하는 것부터 시작하여 이 명령을 계속 실행하고 알림에 따라 조작합시다. (알림에 입력한 내용은 이 안내서에 중요하지 않습니다.)
npm init
Express 설치npm install --save-prod express
기본 퀵 서버를 설치합니다.다음 파일은 노드 프로세스를 시작하고 포트 3000을 감청하며 Hello World를 사용합니다!노선으로 올라가다.src/index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => {console.log(`Example app listening on port ${port}!`))
2. Docker를 설치하여 노드 응용 프로그램을 실행합니다.
docker compose를 사용할 것입니다.yml 파일로 긴 Docker 명령을 입력하는 대신 Docker 컨테이너를 시작하고 중지합니다.이 파일을 여러 Docker 컨테이너의 구성 파일로 볼 수 있습니다.
docker 작성.yml
version: "3"
services:
app:
container_name: app # How the container will appear when listing containers from the CLI
image: node:10 # The <container-name>:<tag-version> of the container, in this case the tag version aligns with the version of node
user: node # The user to run as in the container
working_dir: "/app" # Where to container will assume it should run commands and where you will start out if you go inside the container
networks:
- app # Networking can get complex, but for all intents and purposes just know that containers on the same network can speak to each other
ports:
- "3000:3000" # <host-port>:<container-port> to listen to, so anything running on port 3000 of the container will map to port 3000 on our localhost
volumes:
- ./:/app # <host-directory>:<container-directory> this says map the current directory from your system to the /app directory in the docker container
command: "node src/index.js" # The command docker will execute when starting the container, this command is not allowed to exit, if it does your container will stop
networks:
app:
이 명령으로 도커 용기를 시작할 준비가 되어 있습니다.이것은 시작 프로필에 정의된 용기를 의미하며, 백엔드에서 실행됩니다. (- d)docker-compose up -d
이제 브라우저에서 localhost:3000로 이동하여 Hello World!
를 볼 수 있습니다.실행할 수 있어야 합니다
docker ps
실행 중인 docker 용기의 목록을 출력해야 합니다. 예를 들어이 용기를 관리하는 데 사용되는 docker 명령
실행 중인 모든 컨테이너 나열
docker ps
실행 중이든 안 하든 모든 용기를 보여 줍니다.docker ps -a
docker compose에서 용기를 만듭니다.같은 디렉터리의yml 파일docker-compose up -d
용기가 부두 노동자의 손에서 조립되는 것을 막다.같은 디렉터리의yml 파일docker-compose stop
docker compose에서 용기를 다시 시작합니다.같은 디렉터리의yml 파일docker-compose restart
docker 컨테이너의 로그 파일 보기docker-compose logs -f
3. 어플리케이션의 탄력성
이전에 Node를 사용한 적이 있다면, 포획되지 않은 이상과 같은 프로그램에서 오류가 발생하면 노드 프로세스를 닫는다는 것을 알 수 있습니다.이것은 우리에게 정말 나쁜 소식이다. 왜냐하면 우리의 코드에 틀림없이 버그가 있을 뿐만 아니라, 우리의 코드가 100% 오류가 없다는 것을 보장할 수 없기 때문이다.이 문제의 해결 방안은 보통 다른 프로세스로 우리의 노드 프로그램을 감시하고 종료할 때 다시 시작합니다.많은 해결 방안이 있는데 예를 들면 linux의 슈퍼visord, 영구 NPM 패키지와 PM2 등등이다.우리는 이 안내서를 위해 하나만 선택할 수 있다.
나는 PM2를 중점적으로 소개할 것이다. 왜냐하면 나는 그것에 대해 가장 익숙하기 때문에 절차 관리 이외의 다른 기능, 예를 들어 문서 감시를 덧붙인다. 이것은 우리의 다음 절에 도움이 될 것이다.
PM2 설치
npm install --save-prod pm2
PM2는 명령줄에서 사용할 수 있지만, docker compose처럼 간단한 프로필을 설정할 것입니다.긴 명령을 반복하지 않도록 yml 파일생태계.배치하다.js
const path = require('path')
module.exports = {
apps: [{
name: 'app',
script: 'src/index.js', // Your entry point
instances: 1,
autorestart: true, // THIS is the important part, this will tell PM2 to restart your app if it falls over
max_memory_restart: '1G'
}]
}
지금 우리는 부두 노동자를 바꿔야 한다.yml 파일은 색인에서 직접 시작하지 않고 PM2를 사용하여 프로그램을 시작합니다.js.docker 작성.yml(명령 옵션만 변경됨)
version: "3"
services:
app:
container_name: app # How the container will appear when listing containers from the CLI
image: node:10 # The <container-name>:<tag-version> of the container, in this case the tag version aligns with the version of node
user: node # The user to run as in the container
working_dir: "/app" # Where to container will assume it should run commands and where you will start out if you go inside the container
networks:
- app # Networking can get complex, but for all intents and purposes just know that containers on the same network can speak to each other
ports:
- "3000:3000" # <host-port>:<container-port> to listen to, so anything running on port 3000 of the container will map to port 3000 on our localhost
volumes:
- ./:/app # <host-directory>:<container-directory> this says map the current directory from your system to the /app directory in the docker container
command: "npx pm2 start ecosystem.config.js --no-daemon" # The command docker will execute when starting the container, this command is not allowed to exit, if it does your container will stop
networks:
app:
주의해야 할 것은 docker 구성 요소를 바꾸는 것입니다.yml 파일은 이미 실행된 용기에 영향을 주지 않습니다.변경 사항을 진행하기 위해서 용기를 다시 시작해야 합니다docker-compose restart
좋습니다. locahost:3000 작업 프로그램으로 돌아가야 하지만, 현재 우리의 프로그램은 오류가 발생할 때 붕괴되지 않습니다.4. 우리의 응용 프로그램을 개발하기 쉽게 하다
노드 프로세스가 시작되면 노드 프로세스를 다시 시작하기 전에 코드 변경은 사실상 아무것도 하지 않습니다. 변경할 때마다 Docker 용기를 다시 시작하는 것과 관련이 있습니다.듣자니 엉망진창이다.만약 우리가 코드를 변경할 때 노드 프로세스를 자동으로 다시 시작할 수 있다면, 이것은 이상적일 것이다.과거에 나는 파일 감시 유틸리티를 도입하고 이 파일 감시 유틸리티를 사용해서 파일이 바뀔 때 Docker를 다시 시작하거나, Nodemon을 사용하지만, Docker를 사용할 때 주의사항을 덧붙인 적이 있다.최근에 나는 PM2를 사용하여 파일이 바뀔 때 나의 노드 프로세스를 다시 시작하고 있다. 왜냐하면 우리는 이미 이전 단계에서 그것을 끌어올렸기 때문에 다른 의존항을 설치할 필요가 없다.
생태계.배치하다.js (watch 옵션만 추가)**
const path = require('path')
module.exports = {
apps: [{
name: 'app',
script: 'src/index.js',
instances: 1,
autorestart: true,
watch: process.env.NODE_ENV !== 'production' ? path.resolve(__dirname, 'src') : false,
max_memory_restart: '1G'
}]
}
NODE ENV 환경 변수를 production으로 설정하지 않으면 위의 구성 파일이 src 디렉토리를 모니터링합니다.너는 색인을 바꾸어 그것을 테스트할 수 있다.Hello World! 이외의 내용을 브라우저에서 인쇄할 수 있도록 js 파일!다시 시작하기 전에 Docker 용기를 다시 시작해야 합니다. PM2가 용기를 실행하는 방식을 바꿨기 때문입니다.docker-compose restart
노드 프로세스를 다시 시작하려면 1초가 걸릴 수 있습니다. 노드 프로세스가 언제 완료되는지 보려면 Docker 로그를 보고 PM2가 노드 프로세스를 다시 시작할 때를 결정할 수 있습니다.docker-compose logs -f
프로세스를 다시 시작할 때 비슷한 상황을 볼 수 있습니다마무리
docker run --rm -i -v <absolute-path-to-your-project-locally>:/app -w /app node:10 npm install
너는 그것을 가지고 용기에 들어갈 수 있다
docker exec -it app bash
위의 명령은 용기에 넣습니다. 그러면 npm run start 또는 npm run test 명령을 계속 실행할 수 있습니다.용기 내부에 들어가지 않으려면 다음 명령을 실행할 수 있습니다
docker exec -t app bash -c "npm run start"
Reference
이 문제에 관하여(Docker를 사용하여 노드의 단계별 가이드 설정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/itmayziii/step-by-step-guide-to-setup-node-with-docker-2mc9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)