0%

基于Dockerfile构建镜像

前置知识

首先需要了解和清楚Docker是Client-Server架构

  • 服务端守护进程dockerd
  • REST API 程序和守护进程的桥梁
  • CLI(command line interface)客户端docker

CLI就是通过REST API告诉Server(守护进程)做什么

Client Server不一定是同一主机

误区一

通常构建或演示构建镜像如下命令

1
docker build .

docker build .里的这个点.什么意思呢?太多不看--helpman手册的人想当然认为是Dockerfile文件的路径

摘录关键信息如下,可以看到指定Dockerfile是通过-f参数

1
2
3
Usage:  docker build [OPTIONS] PATH | URL | -

-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')

当通过docker build .构建镜像时, . 的工作目录被称为build context,翻译为’构建上下文’? 另外需知道:

  • 构建过程是在Server端(Daemon)进行的
  • 指定的构建上下文路径里的所有目录/文件都需要传给Docker Daemon的.所以不要把不相关的内容放到构建上下文的
    路径里,会影响构建时间和镜像大小等

镜像构建测试

一个简单的Dockerfile

1
2
3
4
5
6
xiaomao@jp-vps:~/test$cat Dockerfile
FROM ubuntu:18.04
COPY hello /tmp/
RUN cat /tmp/hello

xiaomao@jp-vps:~/test$docker build -t ubuntu:18.04 .

-f指定Dockerfile,-Dockerfile来自标准输入stdin

1
2
3
4
5
xiaomao@jp-vps:~/test$docker build -t ubuntu:18.04 -f- . <<EOF
> FROM ubuntu:18.04
> COPY hello /tmp/
> RUN cat /tmp/hello
> EOF

Dockerfile来自标准输入stdin,构建上下文来自git仓库

  • test.py来自git仓库
  • client需支持git命令: Git仓库—>docker build Host—> Docker Daemon
    1
    2
    3
    4
    5
    xiaomao@jp-vps:~/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