Git 如何为同步源代码构建docker容器?

Git 如何为同步源代码构建docker容器?,git,docker,gruntjs,bower,dockerfile,Git,Docker,Gruntjs,Bower,Dockerfile,我想为nodejs-bower-grunt构建一个容器,但保持我的源代码与git存储库(本例中为Bitbucket)同步。这个想法是为我的团队提供一个容器,这样每个开发人员都不需要在他们的环境中安装这些包。他们没有安装nodejs、bower和grunt来运行应用程序的前端,而是使用一个容器来管理它们,并专注于源代码。这是我的DockerFile: FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y no

我想为nodejs-bower-grunt构建一个容器,但保持我的源代码与git存储库(本例中为Bitbucket)同步。这个想法是为我的团队提供一个容器,这样每个开发人员都不需要在他们的环境中安装这些包。他们没有安装nodejs、bower和grunt来运行应用程序的前端,而是使用一个容器来管理它们,并专注于源代码。这是我的DockerFile:

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
希望VOLUME参数将源代码注入容器中的/app文件夹,而不替换DockerFile中以前配置的所有内容。根据文件规定,应保存以下内容:
“/src/webapp mount覆盖但不删除预先存在的内容”,但当我检查正在运行的容器时,DockerFile装载的内容被参数传递的-v文件夹内容替换。一种解决方案是将所有应用程序内容复制到容器本身,然后运行容器,但这种解决方案对于开发项目来说是不切实际的,因为应用程序中的每个更新都需要构建另一个容器。所以,我的问题是:如何构建这个容器,使宿主源代码中的每个更新都能反映正在运行的容器

我认为您必须从当前主映像的存储库中分别提取对容器的更改。或者,您可以使用rsync之类的工具在本地docker容器之间同步实时文件更改,然后将其推送到源代码中

我认为您必须从当前主映像的存储库中分别提取对容器的更改。或者,您可以使用rsync之类的工具在本地docker容器之间同步实时文件更改,然后将其推送到源代码中

我根据帖子找到了一个解决方案。运行容器的正确方法应如下所示:

docker run -ti -p 9000:9000 -p 35729:35729 -d -v /home/MY_USER/Projects/app/app:/app/app --name app --net=host my_repository/app

此命令告诉docker初始化容器并仅在app子文件夹而不是应用程序的整个根结构上装载卷,这样可以保留构建过程中进行的所有配置

我根据帖子找到了一个解决方案。运行容器的正确方法应如下所示:

docker run -ti -p 9000:9000 -p 35729:35729 -d -v /home/MY_USER/Projects/app/app:/app/app --name app --net=host my_repository/app

此命令告诉docker初始化容器并仅在app子文件夹而不是应用程序的整个根结构上装载卷,这样可以保留构建过程中进行的所有配置

我仍然希望看到其他开发人员如何以可行的方式处理这些问题…好的,我认为我误解了您的问题或者没有完全理解它。我仍然希望看到其他开发人员如何以可行的方式处理这些问题…好的,我想我误读了你的问题,或者我没有完全理解。文档告诉我:挂载覆盖,但没有删除预先存在的内容。卸下装载后,即可再次访问内容。第二部分也很重要。装载过程中无法访问您先前存在的内容。我不知道是否可能(不知道应用程序),但解决方案可能是更改文件夹/应用程序结构。例如,一个文件夹项目中包含你的package.json和bower.json,在项目文件夹中添加一个文件夹,其中包含你安装应用程序的应用程序。但我不知道这在你的情况下是否可能,已经是这样了。package.json和bower.json文件位于应用程序的根文件夹中,根文件夹中的应用程序文件夹也包含所有其他应用程序文件。我不太清楚。那么package.json和bower.json在/app中,而您的应用程序实际上在/app/app/*中,或者您的意思是什么?当您的应用程序也在/app中时,它将覆盖您的package.json和bower.json。docker命令的文件夹是相同的:/app。这是因为您需要运行这些命令来构建bower和节点依赖关系。但是我假设-v参数(path)正在覆盖Dockerfile构建的结构,Dockerfile应该在相同的路径中构建依赖项。虽然不是真正的覆盖,因为卸载卷时,您会看到package.json+bower.json返回其中。文档说明:装载覆盖,但不会删除预先存在的内容。卸下装载后,即可再次访问内容。第二部分也很重要。装载过程中无法访问您先前存在的内容。我不知道是否可能(不知道应用程序),但解决方案可能是更改文件夹/应用程序结构。例如,一个文件夹项目中包含你的package.json和bower.json,在项目文件夹中添加一个文件夹,其中包含你安装应用程序的应用程序。但我不知道这在你的情况下是否可能,已经是这样了。package.json和bower.json文件位于应用程序的根文件夹中,根文件夹中的应用程序文件夹也包含所有其他应用程序文件。我不太清楚。那么package.json和bower.json在/app中,而您的应用程序实际上在/app/app/*中,或者您的意思是什么?当您的应用程序也在/app中时,它将覆盖您的package.json和bower.json。docker命令的文件夹是相同的:/app。这是因为您需要运行这些命令来构建bower和节点依赖关系。但是我假设-v参数(path)正在覆盖Dockerfile构建的结构,Dockerfile应该在相同的路径中构建依赖项。虽然不是真正的覆盖,因为当您卸载卷时,您将看到package.json+bower.json返回其中。