什么是Docker build context
Docker是client-server架构,理论上Client和Server可以不在一台机器上。
在构建docker镜像的时候,需要把所需要的文件由CLI(client)发给Server,这些文件实际上就是build context
举例:
$ dockerfile-demo more DockerfileFROM python:3.9.5-slimRUN pip install flaskWORKDIR /srcENV FLASK_APP=app.pyCOPY app.py /src/app.pyEXPOSE 5000CMD ["flask", "run", "-h", "0.0.0.0"]$ dockerfile-demo more app.pyfrom flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():return 'Hello, world!'
构建的时候,第一行输出就是发送build context 11.13MB (这里是Linux环境下的log)
$ docker image build -t demo .Sending build context to Docker daemon 11.13MBStep 1/7 : FROM python:3.9.5-slim---> 609da079b03aStep 2/7 : RUN pip install flask---> Using cache---> 955ce495635eStep 3/7 : WORKDIR /src---> Using cache---> 1c2f968e9f9bStep 4/7 : ENV FLASK_APP=app.py---> Using cache---> dceb15b338cfStep 5/7 : COPY app.py /src/app.py---> Using cache---> 0d4dfef28b5fStep 6/7 : EXPOSE 5000---> Using cache---> 203e9865f0d9Step 7/7 : CMD ["flask", "run", "-h", "0.0.0.0"]---> Using cache---> 35b5efae1293Successfully built 35b5efae1293Successfully tagged demo:latest
. 这个参数就是代表了build context所指向的目录
.dockerignore 文件
此文件与Dockerfile在同一目录下,内容写上要忽略的文件夹,如下面的.vscode/和env/,重新构建时就会忽略这两个文件夹
- 作用:一是提高构建镜像的速度;二是保护敏感文件等
.vscode/env/

有了.dockerignore文件后,我们再build, build context就小了很多,4.096kB
$ docker image build -t demo .Sending build context to Docker daemon 4.096kBStep 1/7 : FROM python:3.9.5-slim---> 609da079b03aStep 2/7 : RUN pip install flask---> Using cache---> 955ce495635eStep 3/7 : WORKDIR /src---> Using cache---> 1c2f968e9f9bStep 4/7 : ENV FLASK_APP=app.py---> Using cache---> dceb15b338cfStep 5/7 : COPY . /src/---> a9a8f888fef3Step 6/7 : EXPOSE 5000---> Running in c71f34d32009Removing intermediate container c71f34d32009---> fed6995d5a83Step 7/7 : CMD ["flask", "run", "-h", "0.0.0.0"]---> Running in 7ea669f59d5eRemoving intermediate container 7ea669f59d5e---> 079bae887a47Successfully built 079bae887a47Successfully tagged demo:latest
