前置知识
首先需要了解和清楚Docker是Client-Server架构
- 服务端守护进程dockerd
- REST API 程序和守护进程的桥梁
- CLI(command line interface)客户端docker
CLI就是通过REST API告诉Server(守护进程)做什么
Client Server不一定是同一主机
误区一
通常构建或演示构建镜像如下命令
1 | docker build . |
docker build .里的这个点.什么意思呢?太多不看--help
或man
手册的人想当然认为是Dockerfile文件的路径
摘录关键信息如下,可以看到指定Dockerfile是通过-f参数
1 | Usage: docker build [OPTIONS] PATH | URL | - |
当通过docker build .构建镜像时, .
的工作目录被称为build context
,翻译为’构建上下文’? 另外需知道:
- 构建过程是在Server端(Daemon)进行的
- 指定的构建上下文路径里的所有目录/文件都需要传给Docker Daemon的.所以不要把不相关的内容放到构建上下文的
路径里,会影响构建时间和镜像大小等
镜像构建测试
一个简单的Dockerfile
1 | xiaomaovps:~/test$cat Dockerfile - |
-f
指定Dockerfile,-
Dockerfile来自标准输入stdin
1 | xiaomaovps:~/test$docker build -t ubuntu:18.04 -f- . <<EOF - |
Dockerfile来自标准输入stdin
,构建上下文来自git仓库
- test.py来自git仓库
- client需支持git命令: Git仓库—>docker build Host—> Docker Daemon
1
2
3
4
5xiaomaovps:~/test$docker build -t ubuntu:18.04 -f- https://github.com/xxxx.git <<EOF -
> FROM ubuntu:18.04
> COPY test.py /tmp/
> RUN cat /tmp/hello
> EOF