构建时如何将代码放入Docker映像

时间:2018-10-31 07:26:38

标签: docker dockerfile

我想在构建代码时将代码克隆到docker image

我正在考虑在git clone时传递ssh密钥,这是行不通的。下面是我正在使用的命令,显示权限被拒绝

ssh-agent bash -c 'ssh-add /home/username/.ssh/id_rsa.pub my keys;  git clone ssh://git@location.git'

我无法通过https使用克隆

还说,如果代码是在图像上克隆的,那么我们可以在容器上运行时拉一下它吗?

2 个答案:

答案 0 :(得分:1)

我认为方法是

在您的构建机器中

  1. git clone <repo>
  2. git archive --format=tar.gz <commit_hash/branch> --output=code.tar.gz
  3. docker build

在Dockerfile中,您必须添加

ADD code.tar.gz <directory>

这将确保您没有在容器中添加任何.git内容,并且它的大小将尽可能小。

答案 1 :(得分:1)

所以这里有两个真实的范例:

  1. 我正在本地计算机上工作。 在这种情况下,您很有可能已经将代码检出到本地计算机上。在这里,只需使用COPY指令即可将整个文件夹放入到容器中。无需担心git或任何类似的东西。

  2. 我正在由构建服务器执行构建 在这种情况下,让构建服务器签出代码,然后执行与上述相同的操作是有意义的。我们只是将签出的代码复制到图像中

最后,另一种适用于动态语言(如PHP,JS等)的替代方法是不要将代码放入映像中,而是在运行时将代码安装到容器上。

让我们以PHP为例。如果网络服务器正在/ var / www / html中查找代码,则可以这样运行图像:

docker run -d --name {containername} -p 80:80 -p 443:443 -v /my/dir/where/code/is:/var/www/html {your base image}

以上内容将创建图像,但会将您的本地目录传递到/ var / www / html目录,这意味着您在本地进行的任何更改都将显示在容器的源代码中。在作曲家稳定之前,Vagrant和docker的早期阶段就更明显地使用了此功能。