前言

docker可以通过读取Dockerfile来自动构建镜像,但使用时必须遵守一定的规范和格式.关于Dockerfile指令介绍可以点我

简介

一个docker镜像是由一堆由下至上,只能读的层构成的,上一层是在下一层的基础上构建起来的,每一层对应一个Dockerfile的指令.让我们观察下这个Dockerfile:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

每个指令创建一个层

  • FROMubuntu:18.04作为基础镜像
  • COPY 添加宿主机当前文件夹所有文件到docker容器/app目录下
  • RUN 编译/app下文件
  • CMD 当容器启动时执行的命令

当你运行一个镜像并且生成一个容器的时候,会在镜像最上面添加一层读写层.所有的操作包括文件修改,删除,新增都只发生在该读写层上面.

如果想更多的了解镜像层级关系,docker是怎么构建和存储镜像的,可以查看存储驱动

一般的建议和指导

构建最小化配置镜像

我们构建镜像,应该能快速停止,摧毁,重建,并且只需要极少的配置.其实很好理解,如果说你构建的镜像每次重新部署要配置一大堆东西,为啥还要镜像? 关于理论上的事情,大家可以参考Twelve-factor应用方法论

明白构建上下文

当你使用docker build命令时,包含Dockerfile的当前文件夹就称为构建环境(构建上下文).这个文件夹中的所有内容都会发送到docker deamon(docker的服务进程)中作为构建镜像的环境. 构建上下文案例一

  1. 创建一个文件夹作为构建上下文,并进入其中.

  2. 创建一个文件hello.txt,并写入hello world作为内容

  3. 创建Dockerfile文件,并且由它构建的镜像启动时执行cat命令

  4. 使用当前文件夹作为构建上下文,注意.表示当前文件夹

    mkdir myproject && cd myproject echo "hello" > hello.txt echo -e "FROM busybox\nCOPY /hello.txt /\nRUN cat /hello.txt" > Dockerfile docker build -t helloapp:v1 .

构建案例二 在案例一的基础上,把Dockerfilehello.txt文件分开.在使用docker build时,清除掉案例一的缓存,并指定Dockerfile文件的位置

mkdir -p dockerfiles context
mv Dockerfile dockerfiles && mv hello.txt context
docker build --no-cache -t helloapp:v2 -f dockerfiles/Dockerfile context

难点解析 echo -e表示启用转义字符,例如\n代表换行 COPY /hello.txt /把上下文环境中的hello.txt文件拷贝到镜像中,一定要注意COPY指令永远是从宿主机把文件拷贝到docker镜像中. --no-cache表示清除掉案例一的缓存 -f dockerfiles/Dockerfile context指定Dockerfile文件位置和上下文环境文件夹,一定要注意,docker build最后结尾一定是以上下文环境文件夹结尾.

当你不小心把非构建镜像必须的文件放入了上下文环境文件夹,会使得镜像变得更大,加载更慢.所以放入其中的文件一定要精简.当你在构建镜像的过程中,会出现类似下面这样的信息,显示你上下文的大小. Sending build context to Docker daemon 187.8MB

THE END
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

2024年10月

新增

新增

新增

新增

新增

新增

新增

新增

新增

新增