我想爲nodejs-bower-grunt構建一個容器,但保持我的源代碼與git存儲庫同步(本例中爲Bitbucket)。這個想法是爲我的團隊提供一個容器,以便每個開發人員不需要在他們的環境中安裝這些包。與其安裝nodejs,bower和grunt來運行應用程序的前端,他們只是使用容器來管理它們並專注於源代碼。所以這是我DockerFile:如何爲同步的源代碼構建一個Docker容器?
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y nodejs npm git git-core
RUN ln -s /usr/bin/nodejs /usr/bin/node
WORKDIR /app
ADD package.json /app/
ADD bower.json .bowerrc* /app/
RUN npm install -g bower
RUN npm install -g grunt-cli
RUN npm install
RUN bower install --allow-root
CMD ["grunt", "serve"]
EXPOSE 9000
EXPOSE 35729
所以我建立容器中,然後運行使用此代碼:
docker run -ti -p 9000:9000 -p 35729:35729 -d -v /home/MY_USER/Projects/app:/app --name app --net=host my_repository/app
期待音量參數將注入的源代碼放到/應用程序文件夾中的容器沒有替換之前在DockerFile中配置的所有東西。據official documentation,內容應該保留: 「/src/webapp掛載覆蓋,但不刪除已有的內容」,但事實證明,當我檢查正在運行的容器時,掛載的內容由DockerFile替換爲由參數傳遞的-v文件夾內容。一種解決方案是將所有的應用程序內容複製到容器本身,然後運行容器,但這個解決方案對於開發項目來說是不切實際的,因爲應用程序中的每個更新都需要構建另一個容器。所以,我的問題是:我如何構建這個容器,以便主機源代碼中的每個更新都能反映正在運行的容器?
文檔說明:掛載覆蓋但不刪除已存在的內容。一旦掛載被刪除,內容可以再次訪問。第二部分也很重要。您的預先存在的內容在安裝過程中無法訪問。我不知道它是否可能(不知道應用程序),但解決方案可能是更改您的文件夾/應用程序結構。 E.G一個文件夾項目,其中包含你的package.json和bower.json ADD)+項目文件夾內的一個應用程序文件夾,用於安裝應用程序。但不知道你的情況是否可能。 – lvthillo
它已經是這樣了。文件package.json和bower.json位於應用程序的根文件夾中,並且根中的應用程序文件夾也包含所有其他應用程序文件。 – Digao
這對我來說不是很清楚。因此,package.json和bower.json位於/ app中,而您的應用程序實際上位於/ app/app/*中,或者您的意思是?當你的應用程序也在/ app中時,它會覆蓋你的package.json和bower.json – lvthillo