如何使用已配置的应用程序文件夹创建Docker映像

时间:2019-03-06 07:17:17

标签: docker jenkins dockerfile

我的基本要求是创建docker映像并将其部署到docker注册表。

我的jenkins服务器中有一个预配置的应用程序文件夹(/ home / myfolder)(为此,我使用了ansible脚本)。然后,我需要从该文件夹创建Docker映像并将其部署到Docker注册表。

执行此操作的最佳方法是什么?请为我提供帮助,因为我是Docker的新手。

请在下面找到我的Dockerfile

  #Download base image ubuntu 16.04
  FROM ubuntu

  WORKDIR /dockerprojects



  #copy the zip file to docker folder
  COPY /wso2telcohub-4.0.0-SNAPSHOT /home/myfolder/dockerprojects/IGW/dockerCI

  COPY cp /wso2is-km-5.6.0 /home/myfolder/dockerprojects/IGW/dockerCI

  CMD [“bash”]

1 个答案:

答案 0 :(得分:0)

该Dockerfile中有一堆东西可能会横摆。我将在这里一一评论:

#Download base image ubuntu 16.04
FROM ubuntu

如果您打算使用ubuntu:16.04图片,则需要指定它。如果没有特定标签,FROM指令将查找latest标签,在这种情况下,将为您查找图像ubuntu:latest

WORKDIR /dockerprojects

此命令在docker映像中设置工作目录,以便在容器启动时,会话PWD将设置为/dockerprojects。这很重要,因为在构建过程中以及启动容器时,所有其他命令都将相对于文件结构中的该位置。

#copy the zip file to docker folder
COPY /wso2telcohub-4.0.0-SNAPSHOT /home/myfolder/dockerprojects/IGW/dockerCI

此命令会将文件/wso2telcohub-4.0.0-SNAPSHOT从构建了Docker映像的计算机“主机”复制到位置/home/myfolder/dockerprojects/IGW/dockerCI的映像中。如果图像中尚不存在该位置,则它将在位置dockerCI上创建一个名为/home/myfolder/dockerprojects/IGW/的文件。我认为这不是您想要的。

此外,您的评论指出这是一个zip文件,但似乎缺少.zip.gz之类的扩展名-我认为您未正确引用该文件。

COPY cp /wso2is-km-5.6.0 /home/myfolder/dockerprojects/IGW/dockerCI

该指令将不会执行。对于COPY指令,您无需使用“ cp”命令。但是,如果您从该行中删除了“ cp”,它将尝试将文件或目录/wso2is-km-5.6.0从主机(即文件系统根目录中的文件)复制到内部的位置/home/myfolder/dockerprojects/IGW/dockerCI产生的图像。

CMD [“bash”]

CMD指令只是将映像设置为在启动时启动新的bash外壳-这将使容器在bash命令完成后立即退出。

我感觉到要放入映像中的文件的源位置不在主机的根目录中。但可能在您提到的主机上的/home/myfolder/dockerprojects/处。我已要求您在对问题的评论中澄清图像中所需文件的位置。

更新

得到“没有这样的文件或目录”的错误意味着您在COPY指令中引用的源文件不存在。

COPY指令的工作方式如下:

COPY <sourcepath> <targetpath>

<sourcepath>是构建映像的计算机上文件的路径。除非它以/开头,否则该路径是相对于Dockerfile(或构建上下文,如果指定的话)的,则它是相对于主机上文件系统的根的。 targetpath是结果图像中所需的路径。

假设我具有以下文件夹结构:

/home/myfolder/dockerprojects/
├── Dockerfile
├── wso2telcohub-4.0.0-SNAPSHOT.zip
├── wso2is-km-5.6.0/
│   ├── anotherfile.txt

我想将路径/home/myfolder/dockerprojects/中的所有文件都放在docker映像内,路​​径/app下。我会用Dockerfile来做到这一点,

FROM ubuntu:16.04

WORKDIR /app

COPY . /app/

或者每个文件都这样:

FROM ubuntu:16.04

WORKDIR /app

COPY ./wso2telcohub-4.0.0-SNAPSHOT.zip /app/wso2telcohub-4.0.0-SNAPSHOT.zip
COPY ./wso2is-km-5.6.0 /app/wso2is-km-5.6.0

这将使我在docker映像中留下以下内容:

/app/
├── Dockerfile
├── wso2telcohub-4.0.0-SNAPSHOT.zip
├── wso2is-km-5.6.0/
│   ├── anotherfile.txt