docker镜像及构建

虚悬镜像(无标签,仓库名的镜像)

docker pull或者build,新旧镜像同名,旧的镜像的名字就变成<none>了,这种旧的镜像可以批量删除掉

列出docker中所有的虚悬镜像

docker image ls -f dangling=true

虚悬镜像清除

docker image prune

中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。

docker image ls -a

镜像加速

vi /etc/docker/daemon.json
添加如下json格式配置,

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

配置后重启服务

systemctl daemon-reload
systemctl restart docker

运行镜像,容器退出后删除该容器

本地调试时十分有用
在运行指令后加上参数 --rm
docker run --rm xxx

Dockerfile 构建镜像

FROM

from 用于指定基础镜像,作为自己镜像的底层,新的镜像在这个层的上面做修改
这个是必备的指令,而且是第一条指令
比如操作系统镜像,ubuntu,debian,centos,fedora,alpine
推荐用的是debian,
大致的理由应该是:适合服务器的操作系统,基础核心小,长期运行稳定,而且经过了生产环境的大量实践
可以考虑现在的最新稳定版本bullseye,或者用buster,stretch也行。

FROM scratch

这个scratch是docker里面的特殊镜像,表示空白镜像。
有一些相关的文档记录了构建Go语言编写的程序镜像的时候,可以用这个空白镜像,减少镜像的体积。
参考文档:

https://www.jianshu.com/p/daebace9f52c

RUN

用于执行命令行命令
注意点:可以在一起顺序执行的命令,写在一个RUN命令中,因为一个RUN,镜像就会建立一层,多次RUN会导致产生
很多层的镜像,会增加镜像的臃肿程度
可以用&&将要执行的命令串联起来,可以用\进行换行

RUN sed -i 's#xxx#xxx#g' /etc/apt/sources.list \
         && mkdir -p /usr/local/work

COPY

copy 源路径 目标路径
copy指令将构建上下文的目录中的指定文件,复制到新的一层镜像的目标路径位置
源路径可以匹配通配符,批量拷贝多个文件到目标路径中
copy的时候,默认会把文件的读写执行等权限以及文件修改时间保留与源文件一致

ADD

add也是复制文件到目标路径中,但是功能会复杂一些

  • add的源路径可以是url,docker会自动下载文件,然后复制
  • add的源文件如果是压缩文件会自动解压缩
    一般来说用copy会更好,除非以上两种情况

CMD

用于指定容器运行的服务
一般写法为exec形式,shell形式会被包装为 sh -c的形式执行,主体对象就变成了sh,
sh执行结束,容器也就结束了
所以一般来说类似的写法为 CMD ["可执行文件","参数1",“参数2”]

CMD ["./customer-service","arg1","arg2"]

ENTRYPOINT

与CMD的作用是一样的,好的地方是可以在镜像构建完成以后,在后面补充参数
个人觉得生产环境不推荐,隐藏的增加了镜像使用的复杂度,感觉启动方式越简单越好

ENV

定义环境变量,后续命令中就可以使用,一些很长的名称,路径或者版本号什么的可以用这个替换下
这个变量定义好以后,容器中的env也会生效
有一个不算坑的坑

ENV VERSION 1.0
RUN echo 'aaa$VERSIONbbb'
RUN echo "aaa$VERSIONbbb"

第一个不会被替换为环境变量,要用双引号
这个是shell的引号特性
单引号会忽略所有特殊字符
双引号忽略的字符不包括$\`

ARG

ARG USERNAME=lvhuxu
RUN echo ${USERNAME}
ARG 是在构建时参与替换的,容器启动后环境变量中不会生效
ARG的变量在多个阶段构建中要重新定义,每一个FROM后,ARG都会失效

VOLUME

VOLUME /data
这个属于匿名挂载,一般用的少,这个挂载到的主机数据在容器关闭后就没了,只是为了以防大量数据写入容器存储层
一般重要的数据存储要使用命名挂载

EXPOSE

申明启动的端口,不会实际生效,没啥用

WORKDIR

WORKDIR /dist/sbin
指定工作目录,后续的各层的当前目录将改为指定的目录

USER

指定当前用户

ONBUILD

ONBUILD xxx命令
在自己构建是不会执行,生成的镜像被其他dockfile引入时,则执行,一般用于定制继承镜像

LABEL

可以给镜像添加元数据,可以用inspect查看到,可以写自己或公司的名字,联系方式等,给你做的镜像打个label

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • Docker 镜像加速器 概述 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Do...
    索伦x阅读 678评论 0 3
  • Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。 获取...
    烟雨乱平生阅读 554评论 0 0
  • 获取镜像 查看镜像列表 虚悬镜像 上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均...
    苏康申阅读 226评论 1 2
  • 获取镜像 用法: 例如:docker pull ubuntu:18.04 启动容器 简要的说明一下上面用到的参数:...
    埋没随百草阅读 421评论 0 0
  • 获取镜像 获取镜像的命令格式如下: 参数说明如下: Docker Registry 地址:格式一般是 <域名/IP...
    第9号当铺阅读 444评论 0 0