LaoCat带你认识容器与镜像(四【上】)

42 阅读4分钟

Dockerfile是实际项目生产中,比较常用的一个知识点,故也准备分成上下俩节来讲解。

本章内容

如何查询相关Dockerfile与Dockerfile基础命令介绍

本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身

业务不断的扩充累积中,大多数企业应用会选择从单体逐步靠拢分布式、微服务,不管是分布式还是微服务,都会提高部署的风险与成本,项目既不能停止后部署更不能断开后更新,持续集成与滚动更新就有了较大的要求,自动化部署这时便成了这“风口浪尖”的产物,模型大多以git服务提供的“CI/CD”到流水线工具or服务(jenkins/阿里云云效/k8s)最后实现自动更新发布,其中就不可或缺的需要用到Dockerfile。


相关Dockerfile如何查询

前边镜像章节就介绍过了大名鼎鼎的官方镜像仓库docker hub,关于一些常用镜像的Dockerfile也可以从该官方镜像仓库中找到,我们打开docker hub,输入指定镜像(当然,你自己的项目肯定在docker hub搜索不到,需要自己编写,这里以Nginx为主),跳转到镜像详情页即可看到该镜像的Dockerfile链接。 点击某一系列版本后跳转Github,即可看到该镜像对应的Dockerfile文件。 如果上方详情页没有你需要的版本,你可以通过切换Github该项目对应的Tag来找到自己需要的版本,比如我们前几章示例的Nginx版本1.21.3(不是所有的镜像文件都可以通过这样的方式来查找对应版本,有些详情页面就有该版本)。

但到这里并不能直接复制该文件就可以直接使用,需要注意查看Dockerfile是否有对某些文件进行操作,比如这里就可以看到对当前目录的一些文件进行了操作,故需要返回上层目录(同样,有些镜像文件并没有进行任何文件操作,故不需要返回上层目录,直接复制粘贴到自己的创建的Dockerfile文件执行即可)。 这里我们将整个上层目录搬到服务器上。 执行docker build将创建镜像,一大串命令滑屏而过,静待创建完成... 可以看到镜像已经创建成功。


Dockerfile基础命令详解

Dockerfile命令经常需和shell命令配合,故了解一些shell命令可协助看懂Dockerfile文件的描述,另Dockerfile命令中存在一些“相同”作用的命令,这些命令也常常是面试的考点。

分类命令解释
配置命令FROM指定该镜像的基础镜像,比如Java项目会指定基础镜像为Maven or JDK。
配置命令LABEL指定该镜像的元数据标签信息
配置命令ENV指定环境变量
配置命令ENTRYPOINT指定镜像默认入口命令
配置命令EXPOSE指定镜像内服务的端口
配置命令STOPSIGNAL指定退出信号值
配置命令ARG指定创建镜像过程中的变量
配置命令VOLUME指定数据卷挂载点
配置命令WORKDIR指定镜像工作目录
配置命令ONBUILD创建子镜像时指定自动执行的操作命令
配置命令SHELL指定默认shell类型
配置命令HEALTHCHECK执行启动容器时的健康检查
配置命令USER执行启动容器时的用户名或UID
执行命令RUN运行指定命令,RUN是在docker build时运行
执行命令CMD启动容器是默认执行的命令,CMD是在docker run时运行
执行命令COPY复制内容到容器,不会对压缩文件进行解压
执行命令ADD添加内容到镜像,会对压缩文件进行解压

☆ 参考文献:
《Docker技术入门与实战》 第2版
《Docker技术入门与实战》 第3版

◎ 文中所用到的资源链接:
【Debian和 Alpine作为基准Docker映像的对比】 blog.csdn.net/jiagoushipr…
【Docker Hub】 hub.docker.com/