주말 프로젝트가 Docker를 탐색하는 것이었고 간단한 node.js 프로젝트가 좋을 것이라고 생각했습니다. "실시간 편집"이란 호스트 시스템에서 파일을 조작하고 가능한 한 적은 노력으로 도커 컨테이너가 변경 사항을 즉시 반영하는 것을보고 싶습니다.node.js를 Docker와 함께 작동하도록 "라이브 편집"을 수행하는 방법
Dockerizing a Node.js web app 부드럽게 진행된 다음 인터넷 검색 및 스래 싱이 시작되었습니다. 나는 이제 다음 알고 있다고 생각 : 나는 ADD
방법은 nodejs 자습서에 언급 사용하는 경우 ADD
이 (docker run
에서하지) docker build
에서 완전히 충족되기 때문에
가, 나는 라이브 편집 할 수 없습니다.
내가
-v `pwd`:/usr/src/app
같은과 노드 프로젝트의 디렉토리를 마운트하는 경우 (-v
이docker run
인수 있기 때문에 볼륨이 채워 할 빌드시 사용할 수 없습니다)node_modules
이 존재하지 않거나 때문에, 그것은 실행되지 않습니다 또는 호스트의 프로젝트 디렉토리에node_modules
을 미리 채울 필요가 있습니다.이 디렉토리는 올바르게 느끼지 않으며 OS 호환성 문제가있을 수 있습니다.
내 신기한 스레 싱은 각자의 단점이나 명백한 오류가있는 세 번의 시도로 증류 할 수 있습니다.
1) ADD
을 사용하는 Node.js 튜토리얼은 완벽하게 작동하지만 "실시간 편집"은 없습니다. 나는 이것이 내가 필요로하는 것이어야한다는 기대를 가지고 있지는 않지만 최소한 기본 배선이 있고 작동하고 있음을 증명했다.
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
2) 노드 종속성을 Dockerfile에서 전역으로 빌드 해보십시오. 이것은 덜 시원하지만 합리적인 것으로 보였습니다 (의존성을 자주 바꿀 것으로 예상하지 않기 때문에). 그러나, 그것은 또한 간단하게 작동하지 않았고, 정말로 나를 놀라게했습니다. 빌드시
FROM node:argon
RUN npm install -g express
WORKDIR /usr/src/app
# which will be added via `docker run -v...`
EXPOSE 8080
3), ADD
에만 임시 위치에 package.json
하고, 다음, 호스트의 프로젝트 디렉토리에 그 이동 후 -v `pwd`:/usr/src/app
와 프로젝트의 디렉토리를 마운트 설정할 수 node_modules
. 이게 효과가 있었다면 나는 nodemon
을 추가하려고했고 이론적으로 내가 원하는 것을 가지고있었습니다. 이것은 나에게 가장 영리하고 상식적인 것으로 보였지만, 이것은 단순히 효과가 없었습니다. 필자는 호스트 디렉토리 사용 권한을 포함하여 수정을 시도하는 것에 약간의 기쁨을 느끼고 기뻐했습니다.
FROM node:argon
WORKDIR /usr/src/app
# Provides cached layer for node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN cp -a /tmp/node_modules /usr/src/app/
EXPOSE 8080
나는 몇 가지 기본 개념을 이해하지 못하는 날의 여러 인스턴스가 의심하지만 난 주위에 검색 때로는 추가 프로젝트 요구 사항에 의해 복잡하게 서로 다른 접근 방식이 많이가 있었다처럼 보였다. 나는 아마 어리석게도 그것을 단순하게 유지하려고 노력했다. :)
통계 :
- 맥 OS에서 실행 10.10
- 도커 1.12.0-RC2-beta17 (최신 글을 쓰는 시점에서)
- Kitematic 0.12.0 (최신 글을 쓰는 시점에서)
- Node.js 4.4.7
UPDATE (글을 쓰는 시점에서 사전 6 최신) : 내가 함께 배울 시도했다 일부를 끌어 시도, 나는 다음과 같은 일 더 나은 행운을 했어. 이제 빌드되지만 docker run -v `pwd`:/usr/src/app -p 49160:8080 -d martink/node-docker3
은 계속 실행되지 않습니다. 그러나 나는 Kiteomatic에서 "Run"과 "Exec"을 할 수 있고 쉘에서는 node_modules
이 잘 보이고 바른 위치로 옮겨졌으며 수동으로 node server.js
을 수행하고 기쁨을 가질 수 있음을 알 수 있습니다.
FROM node:argon
# Copy over the host's project files
COPY . /usr/src/app
# This provides a starting point, but will later be overridden by `-v`, I hope
# Use this app directory moving forward through this file
WORKDIR /usr/src/app
# PULL TOGETHER `NODE_MODULES`
## Grab the package.json from the host and copy into `tmp`
COPY package.json /tmp/package.json
## Use that to get `node_modules` set up in `tmp`
RUN cd /tmp && npm install
## Copy that resulting node_modules into the WORKDIR
RUN cp -a /tmp/node_modules /usr/src/app/
EXPOSE 8080
나는 내가 이것을 실행할 때
- 가 어떻게
server.js
시작을해야합니까 ... 내 질문에 지금까지 깍 것 같아요? - "실시간 수정 사항"은 어떻게 볼 수 있습니까 (
nodemon
으로 시작할 수 있습니까?).