docker镜像的构建及dockerfile的祥解应用

  • 1.镜像的构建
  • 1.1创建一个Dockerfile
  • 1.2构建镜像
  • 1.3查看镜像的分层结构
  • 1.4镜像的缓存特性
  • 2.Dockerfile详解
  • 3.镜像加速器
  • 4.镜像优化
  • 优化nginx镜像库
  • 5.镜像常用子命令

1.镜像的构建

1.1创建一个Dockerfile


1.2构建镜像

[root@server1 docker]#docker build -t demo:v1 /root/docker/Dockerfile

1.3查看镜像的分层结构

docker history demo:v1

1.4镜像的缓存特性

2.Dockerfile详解

官方文档帮助
https://github.com/kyos0109/nginx-distroless/blob/master/Dockerfile

dockerfile的常用指令

FROM 指定base镜像,如果本地不存在会从远程仓库下载
MAINTAINER 设置镜像的作者,比如用户邮箱等
COPY 把文件从build context复制到镜像支持两种形式:COPY src dest 和 COPY [“src”, “dest”],src必须指定build context中的文件或目录
ADD 用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:ADD html.tar /var/wwwADD http://ip/html.tar /var/www
ENV 设置环境变量,变量可以被后续的指令使用:ENV HOSTNAME sevrer1.example.com
EXPOSE 如果容器中运行应用服务,可以把服务端口暴露出去:EXPOSE 80
VOLUME 申明数据卷,通常指定的是应用的数据挂在点:VOLUME ["/var/www/html"]
WORKDIR 为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建
RUN 在容器中运行命令并创建新的镜像层,常用于安装软件包:RUN yum install -y vim
CMD 与 ENTRYPOINT 这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,ENTRYPOINT不会被忽略,一定会被执行。````docker run后面的参数可以传递给ENTRYPOINT指令当作参数。Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。

ADD

[root@server1 docker]# cat Dockerfile
FROM busybox
ADD test.tar.gz /mnt 当包传上去之后会自动解压

docker build -t demo:v3 .

-it 交互式
–name指定名字
demo:v3镜像

ENV
[root@server1 docker]# cat Dockerfile
FROM busybox
ENV HOSTNAME server1
docker build -t demo:v4 .

CMD

CMD ENTRYPOINT


ctrl+d 退出交互式环境,直接结束进程
crtl+p+q 退出交互式环境,让其在后台运行 ,

VOLUME
[root@server1 docker]# cat Dockerfile
FROM busybox
VOLUME ["/data"]


[root@server1 docker]# docker volume ls
DRIVER VOLUME NAME
local df16795ac170396bc2ca2f954ed05a72877ff81e3b984a368b0917e3ecaa55ce
[root@server1 docker]# docker volume prune 没用的进行回收

[root@server1 docker]# cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
backingFsBlockDev metadata.db

docker run -it --rm nginx bash

3.镜像加速器

在网络镜像库中下载镜像时,使用镜像加速器大大提高了速度

注册阿里云,—控制台—产品与服务----镜像站服务—镜像加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

根据帮助文档操作

4.镜像优化

1.选择最精简的基础镜像
2.减少镜像的层数
3.清理镜像构建的中间产物
4.注意优化网络请求
5.尽量去用构建缓存
6.使用多阶段构建镜像

eg:

优化nginx镜像库

帮助文档

https://github.com/kyos0109/nginx-distroless/blob/master/Dockerfile

[root@server1 docker]# cat Dockerfile
FROM nginx:1.18.0 as base# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG TIME_ZONERUN mkdir -p /opt/var/cache/nginx && \cp -a --parents /usr/lib/nginx /opt && \cp -a --parents /usr/share/nginx /opt && \cp -a --parents /var/log/nginx /opt && \cp -aL --parents /var/run /opt && \cp -a --parents /etc/nginx /opt && \cp -a --parents /etc/passwd /opt && \cp -a --parents /etc/group /opt && \cp -a --parents /usr/sbin/nginx /opt && \cp -a --parents /usr/sbin/nginx-debug /opt && \cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtimeFROM gcr.io/distroless/base-debian10     COPY --from=base /opt /EXPOSE 80 443ENTRYPOINT ["nginx", "-g", "daemon off;"]



方案二.清理镜像构建的中间产物,使用多阶段构建镜像,选择最精简的基础镜像

[root@server1 docker]# cat Dockerfile
FROM rhel7 as build
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.18.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.18.0
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel &> /dev/null && ./configure &> /dev/null && make &> /dev/null && make install &> /dev/null && rm -fr /mnt/nginx-1.18.0 && yum remove -y gcc make &&  yum clean allFROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

5.镜像常用子命令

images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建镜像
build 从Dockerfile构建镜像
tag 给镜像打标签
search 搜索镜像
pull 从仓库拉取镜像
push 上传镜像到仓库
rmi 删除镜像

docker镜像的构建及Dockerfile的详解应用,镜像加速器,镜像优化相关推荐

  1. Docker入门与实践之 Dockerfile 语法详解

    一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...

  2. Dockerfile命令详解之 COPY

    许多同学不知道Dockerfile应该如何写,不清楚Dockerfile中的指令分别有什么意义,能达到什么样的目的,接下来我将在容器化专栏中详细的为大家解释每一个指令的含义以及用法. 专栏订阅传送门h ...

  3. Dockerfile指令详解镜像构建实例说明

    Dockerfile使用总结 Dockerfile是用来构建镜像的文本文件,里面包含了一条条用于构建镜像所需的指令和说明. Dockerfiel文件中的每一层指令都是描述如何在上一层的基础上进行该层的 ...

  4. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  5. Dockerfile 指令详解1

    Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...

  6. linux开发 | 根文件系统构建实验及过程详解

    <2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解> 第一部分.章节目录 2.19.1.根文件系统的构建路线 2.19.2.busybox的移植实战 2.19. ...

  7. Docker之Dockerfile 指令详解

    闲话不多说,dokerfile常用指令解析奉上 FROM 作用:指定基础镜像,必须放在DOckerfile的第一行,表示从哪个baseimage开始构建 格式: FROM <image>: ...

  8. docker多个容器一起打包_详解Docker 容器基础系统镜像打包

    因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具.根据这个思路,我们就可以构建一个自己的容器基础系统镜像. 构建标准的 Li ...

  9. Docker学习——Dockerfile 指令详解(五)

    2019独角兽企业重金招聘Python工程师标准>>> 我们已经介绍了 FROM (指定基础镜像) , RUN(执行命令) ,还提及了 COPY , ADD ,其实 Dockerfi ...

最新文章

  1. 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
  2. 阿里云前端周刊 - 第 11 期
  3. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
  4. DeprecationWarning Mongoose mpromise (mongoose's default promise li
  5. Linux系统vi编辑器执行命令,linux下vi编辑器命令
  6. android 恢复短信 失败,解决安卓手机发送短信失败的方法
  7. Oracle 获取本周、本月、本季、本年的第一天和最后一天
  8. jQuery 基础教程 (三)之jQuery的选择器
  9. ASP.NET WebAPi之断点续传下载(上)
  10. faiss python安装_faiss入门
  11. 无约而来WIN8 PRO WMC X64 201306
  12. 药品管理系统java_基于Java的药品管理系统
  13. PyQt5,资源文件 .qrc 的使用
  14. 机器学习与控制:ADMM的ODE模型与基于Lyapunov的收敛分析
  15. 飞鱼星路由器如何限制外网访问服务器网站,飞鱼星路由器怎么访问指定网站
  16. 《精益创业》读书笔记
  17. 简单计算空气质量指数
  18. 题解报告——星际战争
  19. 人际间亲密关系可能呈现函数式变化
  20. Linux计划任务与日志管理

热门文章

  1. python画一个点_python – 如何绘制一个数据点?
  2. 驱动程序安装方法大全(转)
  3. pup与数据库链接常用方法
  4. 【Laravel3.0.0源码阅读分析】消息类型配置文件mime.phps
  5. echarts圆柱形柱状图 源码_jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】...
  6. 树莓派用网线连接笔记本获取IP,使用putty登录
  7. STL 算法vector/set集合-交集,并集,差集,对称差
  8. 抖音上炫酷的网红文字时钟
  9. 独家分享PC端和无线端直通车质量得分快速提高的技巧!
  10. Linux发展史简介