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

标签 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 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 参数将源代码注入(inject)容器中的/app 文件夹,而不替换之前在 DockerFile 中配置的所有内容。根据official documentation ,内容应该被保留:
“/src/webapp 挂载覆盖但不删除预先存在的内容”,但事实证明,当我检查正在运行的容器时,DockerFile 挂载的内容被参数传递的 -v 文件夹内容替换。一种解决方案是将所有应用程序内容复制到容器本身,然后运行容器,但这种解决方案对于开发项目来说是不切实际的,因为应用程序中的每次更新都需要构建另一个容器。所以,我的问题是:如何构建这个容器,使主机源代码中的每个更新都反射(reflect)正在运行的容器?

最佳答案

我找到了一个解决方案,基于 this邮政。运行容器的正确方法应该是:

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 子文件夹而不是应用程序的整个根结构中安装卷,这样可以保留在构建过程中进行的所有配置。

关于git - 如何为同步源代码构建 docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38897572/

相关文章:

windows - 无法获得 git 扩展以将某些内容推送到 github SSH 问题

windows - 如何将 Git for Windows 软件安装到特定目录?

来自 repo 的 Git checkout 后 Hook

docker - Kubernetes部署的Nginx应用未呈现Web内容

docker - 更改docker根文件夹后如何查找docker.socket文件?

javascript - Grunt - 连接多个 JS 文件并观察变化

git - git -q pull 和 git pull 有什么区别?

windows - 在 Azure DevOps Windows 托管的生成代理中运行 Linux 容器

gruntjs grunt-init grunfile 抛出错误 fatal error : Arguments to path. join 必须是字符串

javascript - Grunt 一直在删除我的绝对路径