Back
Please upgrade your browser or check your network connection.

docker build 相关疑问解惑

2018082010275FFF5E699EC233E0F77423A10771AFBFE.jpg

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