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映像的对比】
https://blog.csdn.net/jiagoushipro/article/details/125061841
【Docker Hub】
https://hub.docker.com/