我的基本要求是创建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”]
答案 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