Dockerfile使用
参考 https://www.cnblogs.com/ccbloom/p/11174186.html

写了个简单的Dockerfile来制作镜像,目录如下

root@hyn-virtual-machine:/docker/test# cat Dockerfile
###以下为最终验证正确的内容 FROM python LABEL maintainer="DaisyHYN" WORKDIR /test COPY ./123.txt /test RUN pip install pytest EXPOSE 6666 ENV NAME worrld #CMD["print("111")"]
过程中碰到的报错不少:
1.CMD指令格式有问题
更正(我这个是拿来玩玩,我就直接注释掉这行了)

CMD
-
Introduction
-
指定启动容器的默认要运行的程序,也就是PID为1的进程命令,且其运行结束后容器也会终止。如果不指定,默认是bash。
-
CMD指令指定的默认程序会被docker run命令行指定的参数所覆盖。
-
Dockerfile中可以存在多个CMD指令,但仅最后一个生效。因为一个docker容器只能运行一个PID为1的进程。
-
类似于RUN指令,也可以运行任意命令或程序,但是两者的运行时间点不同
- RUN指令运行在docker build的过程中,而CMD指令运行在基于新镜像启动容器(docker run)时。
-
-
Syntax
-
CMD command param1 param2
-
CMD ["executable","param1","param2"]
-
CMD ["param1","param2"]
- 前两种语法格式同RUN指令。第一种用法对于CMD指令基本没有意义,因为它运行的程序PID不为1。
- 第三种则需要结合ENTRYPOINT指令使用,CMD指令后面的命令作为ENTRYPOINT指令的默认参数。如果docker run命令行结尾有参数指定,那CMD后面的参数不生效。
-
2.RUN指令内部有问题
我install拼错了哈哈哈

3.COPY报错
看报错,很清楚了,只能复制Dockerfile本级别及子目录文件,不能复制父目录

COPY
-
Introduction
- 复制宿主机上的文件到目标镜像中
-
Syntax
-
COPY <src>... <dest>
-
COPY ["<src>",... "<dest>"]
- <src>:要复制的源文件或者目录,支持通配符
- <dest>:目标路径,即正创建的镜像的文件系统路径,建议使用绝对路径,否则,COPY指令会以WORKDIR为其起始路径。
- 如果路径中如果包含空白字符,建议使用第二种格式用引号引起来,否则会被当成两个文件。
-
-
Rules
- <src>必须是build上下文中的目录,不能是其父目录中的文件。
- 如果<src>是目录,则其内部的文件或则子目录会被递归复制,但<src>目录本身不会被复制。
- 如果指定了多个<src>,或者<src>中使用通配符,则<dest>必须是一个目录,且必须以 / 结尾。
- 如果<dest>事先不存在,它将会被自动创建,包括其父目录路径。
之后运行还挺顺畅

镜像制作好了之后,如下

加入LABEL内容,build一遍 ,docker build -t test:v1 ./导致镜像名称重复了(剥夺了上一个镜像的)

,再执行一遍,可以看到docker直接使用了cache

浙公网安备 33010602011771号