使用卷時,Docker向主機文件系統寫入速度很慢。這讓NodeJS中的任務像npm install
非常痛苦。我如何排除node_modules
文件夾的卷,所以構建速度更快?如何在使用卷時提高Docker構建的速度
回答
衆所周知,Docker在macOS上安裝的卷支持緩慢(click here for more info)。對於我們的節點開發人員來說,這意味着啓動您的應用程序非常緩慢,因爲必需的node install
命令。好吧,這裏有一個快速的小技巧來解決這個問題。
首先,快速瀏覽一下項目:
長話短說,我映射我的項目的根(./
)一切容器的容積之一。這允許我使用小部件,例如gulp.watch()
和nodemon
自動重啓項目,或者在我修改文件時注入任何新代碼。
這是實際問題的50%!
由於該項目的根被映射到容器內工作目錄,調用根......這實際上是主機文件系統上創建npm install
原因node_modules
。這就是Docker的非常緩慢的安裝量在這個項目中起到的作用。原樣,只要五分鐘等待您的項目出現,一旦你發出docker-compose up
。
「您的Docker設置必須錯誤!」
正如你所看到的,Docker對於這個lil'項目來說是相當有價值的。
首先,你們「OLE Dockerfile:
FROM ubuntu:16.04
MAINTAINER "Fred Lackey" <[email protected]>
RUN mkdir -p /var/www \
&& echo '{ "allow_root": true }' > /root/.bowerrc \
&& apt-get update \
&& apt-get install -y curl git \
&& curl -sL https://deb.nodesource.com/setup_6.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g bower gulp gulp-cli jshint nodemon npm-check-updates
VOLUME /var/www
EXPOSE 3000
,當然,心愛的docker-compose.yml
:
version: '2'
services:
uber-cool-microservice:
build:
context: .
container_name: uber-cool-microservice
command:
bash -c "npm install && nodemon"
volumes:
- .:/var/www
working_dir: /var/www
ports:
- "3000"
正如你所看到的,因爲,是這個測試項目是瘦,意思是說,並按預期工作....除了npm install
是slooooooooooooo。
在這一點上,呼籲npm install
完成全部項目的依賴要安裝的到卷,正如我們都知道,是主機文件系統。這是痛苦來臨的地方。
「那麼你提到的'技巧'是什麼?
如果我們能不必映射到該卷的項目的根目錄中受益,但不知何故排除node_modules
並允許它被寫入到碼頭工人工會是文件系統的容器內。
根據Docker的文檔,排除卷裝載文件夾是不可能的。這是有道理的,我猜。
但是,它實際上可能是是!
這個把戲?簡單!一個額外卷裝!
通過添加一個線到Dockerfile
:
FROM ubuntu:16.04 MAINTAINER "Fred Lackey" RUN mkdir -p /var/www \ && echo '{ "allow_root": true }' > /root/.bowerrc \ && apt-get update \ && apt-get install -y curl git \ && curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get install -y nodejs \ && npm install -g bower gulp gulp-cli jshint nodemon npm-check-updates VOLUME /var/www VOLUME /var/www/node_modules EXPOSE 3000
...和一個一行到docker-compose.yml
文件...
version: '2' services: uber-cool-microservice: build: context: . container_name: uber-cool-microservice command: bash -c "npm install && nodemon" volumes: - .:/var/www - /var/www/node_modules working_dir: /var/www ports: - "3000"
這就是它!
在你錯過了的情況下,我們說:
VOLUME /var/www/node_modules
和
- /var/www/node_modules
你說什麼!?!?
總之,額外的卷會導致Docker在容器(文件夾等)中創建內部掛鉤並等待掛載。由於我們是從來沒有掛載文件夾,我們基本上欺騙碼頭進入只是寫入容器內的文件夾。
最終的結果是我們能夠掛載我們的項目的根,利用工具,如gulp.watch()
和nodemon
,一邊寫的node_modules
內容到更快的聯合文件系統。
快速注重:
node_modules
:
出於某種原因,在使用這種技術,碼頭工人仍然會項目的根目錄下創建文件夾node_modules
,主機文件系統上。它根本不會寫入它。
- 1. 如何提高在eclipse中構建android項目的速度?
- 2. NetBeans中的JavaFX Ant構建腳本:如何提高構建速度?
- 3. 使用Docker是否顯着提高IO和處理速度?
- 4. 提高速度
- 5. 提高速度
- 6. 如何提高網頁速度在drupal
- 7. 如何讓Docker Compose構建速度更快?
- 8. 如何提高iPad的定位速度?
- 9. 如何提高db4o的查詢速度?
- 10. 如何提高Python代碼的速度
- 11. 的Android如何提高下載速度
- 12. 如何提高java的性能速度?
- 13. 如何提高更新ssis的速度
- 14. 如何提高MPI_scatter/MPI_gather的速度?
- 15. 如何提高scrapy的下載速度?
- 16. 如何提高webpack的執行速度?
- 17. 如何提高代碼的速度?
- 18. 如何提高matlab的速度
- 19. 如何提高Webclient.UploadFileAsync函數的速度?
- 20. 你如何提高LoginAuthentication的速度?
- 21. 如何提高python腳本的速度
- 22. 如何提高python繪圖的速度?
- 23. 如何提高VBA代碼的速度
- 24. 如何提高clang_complete的完成速度?
- 25. 如何提高vs2010的編譯速度
- 26. 如何提高此代碼的速度?
- 27. 如何提高UIWebView的滾動速度?
- 28. 如何提高CGContextDrawPath/drawInContext的速度:
- 29. 如何提高tchart refresh()的速度?
- 30. 如何提高Hive的速度