Docker基础入门学习~DockerFile解析

DockerFile是什么?

D o c k e r F i l e 是 用 来 构 建 D o c k e r 镜 像 的 构 建 文 件 , 是 由 一 系 列 命 令 和 参 数 构 成 的 脚 本 \color{red}DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 DockerFileDocker

构建三步骤

  1. 编写DockerFile文件
  2. docker build生成 镜像文件
  3. docker run 运行镜像文件

文件案例

推荐网站:https://hub.docker.com/
在这里插入图片描述

FROM scratch
MAINTAINER https://github.com/CentOS/sig-cloud-instance-images
ADD centos-6-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20181006"

CMD ["/bin/bash"]

DockerFile构建过程

基础知识

每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交

执行DockerFile的大致流程
  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令知道所有指令都执行完成

小总结

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

  • Dockerfile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件的运行态。
    Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
    在这里插入图片描述

1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
3 Docker容器,容器是直接提供服务的。

Dockerfile体系结构(保留字指令)

− F R O M : 基 础 镜 像 , 当 前 新 镜 像 基 于 哪 个 镜 像 , 基 本 所 有 的 镜 像 都 会 带 上 该 关 键 字 \color{red} - FROM:基础镜像,当前新镜像基于哪个镜像,基本所有的镜像都会带上该关键字 FROM
s c r a t c h 是 最 基 础 的 镜 像 , 类 似 于 j a v a 的 o b j e c t \color{red} scratch是最基础的镜像,类似于java的object scratchjavaobject
− M A I N T A I N E R : 镜 像 维 护 着 的 姓 名 和 邮 箱 地 址 \color{red} - MAINTAINER:镜像维护着的姓名和邮箱地址 MAINTAINER
− R U N : 容 器 构 建 时 需 要 运 行 的 命 令 \color{red} - RUN:容器构建时需要运行的命令 RUN
− E X P O S E : 当 前 容 器 对 外 暴 露 的 端 口 \color{red} - EXPOSE:当前容器对外暴露的端口 EXPOSE
− W O R K D I R : 指 定 创 建 容 器 后 , 终 端 默 认 登 录 进 来 的 工 作 目 录 , 一 个 落 脚 点 \color{red} - WORKDIR:指定创建容器后,终端默认登录进来的工作目录,一个落脚点 WORKDIR
− E N V : 用 来 构 建 镜 像 过 程 中 , 设 置 环 境 变 量 \color{red} - ENV:用来构建镜像过程中,设置环境变量 ENV
− A D D : 将 宿 主 机 目 录 下 的 文 件 拷 贝 进 镜 像 且 A D D 命 令 会 自 动 处 理 U R L 和 解 压 t a r 压 缩 包 \color{red} - ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 ADD宿ADDURLtar
− C O P Y : 类 似 于 A D D 拷 贝 文 件 和 目 录 到 镜 像 中 , 但 是 不 会 自 动 解 压 \color{red} - COPY:类似于ADD拷贝文件和目录到镜像中,但是不会自动解压 COPYADD

COPY src dest
COPY["src", "dest"]

− V O L U M E : 容 器 数 据 卷 , 用 于 数 据 保 存 和 持 久 化 工 作 \color{red} - VOLUME:容器数据卷,用于数据保存和持久化工作 VOLUME
− C M D : 指 定 一 个 容 器 启 动 时 要 运 行 的 命 令 \color{red} - CMD:指定一个容器启动时要运行的命令 CMD
【注意】当DockerFile中有多个CMD时,只有最后一个生效,其他的都会被覆盖,且CMD会被docker run之后的参数替换
在这里插入图片描述
− E N T R Y P O I N T : 指 定 一 个 容 器 启 动 时 要 运 行 的 命 令 , 与 C M D 一 样 , 它 多 个 生 效 , \color{red} - ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样,它多个生效, ENTRYPOINTCMD
且 会 被 d o c k e r r u n 之 后 的 参 数 追 加 \color{red}且会被docker run之后的参数追加 dockerrun
− O N B U I L D : 当 构 建 一 个 被 集 成 的 D o c k e r f i l e 时 运 行 命 令 , 父 镜 像 在 被 子 集 成 后 父 镜 像 的 o n b u i l d 被 触 发 \color{red} - ONBUILD:当构建一个被集成的Dockerfile时运行命令,父镜像在被子集成后父镜像的onbuild被触发 ONBUILDDockerfileonbuild

保留字小总结

在这里插入图片描述

入门小案例

自定义Linux镜像

在这里插入图片描述

FROM centos
MAINTAINER xiaozehng<xiaozheng@joinpay.com>
ENV MYPAYCH /usr/local
WORKDIR $MYPAYCH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPAYCH
CMD echo "success........ok"
CMD /bin/bas

制作CMD版查询ip镜像

主要学习:CMD 和 ENTRYPOINT

FROM centos
RUN yum -y install curl
CMD [ "curl", "-i", "http://ip.cn" ]

FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-i", "http://ip.cn" ]

在这里插入图片描述
测试启动命令

docker run -it 镜像ID -s

总结

按照上面的操作就可以了,希望对你有帮助!
授 人 以 鱼 不 如 授 人 以 渔 , 知 道 的 越 多 , 不 知 道 的 越 多 , 希 望 对 你 有 帮 助 ! \color{red}授人以鱼不如授人以渔,知道的越多,不知道的越多,希望对你有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值