什么是Docker build context

Docker是client-server架构,理论上Client和Server可以不在一台机器上。

在构建docker镜像的时候,需要把所需要的文件由CLI(client)发给Server,这些文件实际上就是build context

举例:

  1. $ dockerfile-demo more Dockerfile
  2. FROM python:3.9.5-slim
  3. RUN pip install flask
  4. WORKDIR /src
  5. ENV FLASK_APP=app.py
  6. COPY app.py /src/app.py
  7. EXPOSE 5000
  8. CMD ["flask", "run", "-h", "0.0.0.0"]
  9. $ dockerfile-demo more app.py
  10. from flask import Flask
  11. app = Flask(__name__)
  12. @app.route('/')
  13. def hello_world():
  14. return 'Hello, world!'

构建的时候,第一行输出就是发送build context 11.13MB (这里是Linux环境下的log)

  1. $ docker image build -t demo .
  2. Sending build context to Docker daemon 11.13MB
  3. Step 1/7 : FROM python:3.9.5-slim
  4. ---> 609da079b03a
  5. Step 2/7 : RUN pip install flask
  6. ---> Using cache
  7. ---> 955ce495635e
  8. Step 3/7 : WORKDIR /src
  9. ---> Using cache
  10. ---> 1c2f968e9f9b
  11. Step 4/7 : ENV FLASK_APP=app.py
  12. ---> Using cache
  13. ---> dceb15b338cf
  14. Step 5/7 : COPY app.py /src/app.py
  15. ---> Using cache
  16. ---> 0d4dfef28b5f
  17. Step 6/7 : EXPOSE 5000
  18. ---> Using cache
  19. ---> 203e9865f0d9
  20. Step 7/7 : CMD ["flask", "run", "-h", "0.0.0.0"]
  21. ---> Using cache
  22. ---> 35b5efae1293
  23. Successfully built 35b5efae1293
  24. Successfully tagged demo:latest

. 这个参数就是代表了build context所指向的目录

.dockerignore 文件

此文件与Dockerfile在同一目录下,内容写上要忽略的文件夹,如下面的.vscode/env/,重新构建时就会忽略这两个文件夹

  • 作用:一是提高构建镜像的速度;二是保护敏感文件等
  1. .vscode/
  2. env/

九、Dockerfile技巧-合理使用.dockerignore - 图1

有了.dockerignore文件后,我们再build, build context就小了很多,4.096kB

  1. $ docker image build -t demo .
  2. Sending build context to Docker daemon 4.096kB
  3. Step 1/7 : FROM python:3.9.5-slim
  4. ---> 609da079b03a
  5. Step 2/7 : RUN pip install flask
  6. ---> Using cache
  7. ---> 955ce495635e
  8. Step 3/7 : WORKDIR /src
  9. ---> Using cache
  10. ---> 1c2f968e9f9b
  11. Step 4/7 : ENV FLASK_APP=app.py
  12. ---> Using cache
  13. ---> dceb15b338cf
  14. Step 5/7 : COPY . /src/
  15. ---> a9a8f888fef3
  16. Step 6/7 : EXPOSE 5000
  17. ---> Running in c71f34d32009
  18. Removing intermediate container c71f34d32009
  19. ---> fed6995d5a83
  20. Step 7/7 : CMD ["flask", "run", "-h", "0.0.0.0"]
  21. ---> Running in 7ea669f59d5e
  22. Removing intermediate container 7ea669f59d5e
  23. ---> 079bae887a47
  24. Successfully built 079bae887a47
  25. Successfully tagged demo:latest