docker build [option] PATH | URL | -
这个是docker的build的方式。
注意了这个PATH,并不是
指代 Dockerfile的位置,而只是恰好默认值是dockerfile这个名字
哪怕你的docker的构建文件名是xxx.php
,只要用-f
直接指定。都不存在文件名的问题。
重要的是里面的内容
,而不是
文件的名字。不符合格式就会报错。
Docker是 C/S架构
client/server
平时我们敲命令的时候就是在client
上面敲,然后通过Linux socket去通讯,把指令丢到server
。
然后server
去执行,并且返回信息。
同样的,去构建一个镜像也是一样的,需要把构建的文件和指令发到server才开始构建的。
docker的默认通讯socket /var/run/docker.sock
如何才能够让server去获取到files?
就是通过这个PATH,中文这边有些书是 译作 上下文 context 的
Docker 的client端会把这个目录下面的所有文件全部打包
传到server,server收到会再展开,这样子来得到需要的文件的。
所以请把你所有需要的文件或者什么包,都复制到一个文件夹里面或者子文件夹。
举个例子,在dockerfile
这么写
COPY ./xxx.py /app
这并不是要复制执行 docker build 命令所在的目录
下的 xxx.py
也不是复制 Dockerfile 所在目录
下的 xxx.py
而是复制 上下文(context) 目录
下的 xxx.py
所以像
COPY ../xxx.py /app
COPY /opt/aa/bb/cc /app
这种写法很多时候就构建的时候就不正常了。
所以别傻傻地把这dockerfile丢到一个硬盘根目录的位置进行构建,待会就整个硬盘都打包过去了。
一般的构建,就把Dockerfile 丢到项目的根目录里面,然后把需要的东西都丢到整个项目里面。在其他目录的文件,需要就复制一份过来,丢到项目里面。写dockerfile的时候就全部用相对路径,别用绝对路径。
构建的时候,直接cd到项目根目录
直接敲 docker build . -t test
-t
为镜像指定标签
-t, --tag list Name and optionally a tag in the 'name:tag' format