DockerFile解析 是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。 构建三步骤 编写Dockerfile文件 docker build docker run 文件什么样??? 以我们熟悉的CentOS为例 https://hub.docker.com/_/centos/ DockerFile构建过程解析 Dockerfile内容基础知识 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行 3:#表示注释 4:每条指令都会创建一个新的镜像层,并对镜像进行提交 Docker执行Dockerfile的大致流程 (1)docker从基础镜像运行一个容器 (2)执行一条指令并对容器作出修改 (3)执行类似docker commit的操作提交一个新的镜像层 (4)docker再基于刚提交的镜像运行一个新容器 (5)执行dockerfile中的下一条指令直到所有指令都执行完成 小总结 DockerFile体系结构(保留字指令) FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时需要运行的命令 EXPOSE 当前容器对外暴露出的端口 WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 ENV 用来在构建镜像过程中设置环境变量 ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 COPY 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 COPY src dest COPY ["src", "dest"] VOLUME 容器数据卷,用于数据保存和持久化工作 CMD 指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换 ENTRYPOINT 指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发 小总结 案例 Base镜像(scratch) Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的 自定义镜像mycentos 编写 Hub默认CentOS镜像什么情况 准备编写DockerFile文件 myCentOS内容DockerFile 构建 docker build -t 新镜像名字:TAG . 运行 docker run -it 新镜像名字:TAG 列出镜像的变更历史 docker history 镜像名 CMD/ENTRYPOINT 镜像案例 都是指定一个容器启动时要运行的命令 CMD Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换 Case tomcat的讲解演示 docker run -it -p 8888:8080 tomcat ls -l ENTRYPOINT docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合 Case 制作CMD版可以查询IP信息的容器 crul命令解释 问题 如果我们希望显示 HTTP 头信息,就需要加上 -i 参数 WHY