
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
(1)构建三步骤
编写Dockerfile文件
docker build
docker run
(2)文件什么样???
docker images
centos 199MB
它的dockerfile如何描写的
以我们熟悉的CentOS为例
https://hub.docker.com/_/centos/

scratch 基础镜像类
maintainer 作者+邮箱
压缩包
label 说明
默认cmd shell: bin/bash
docker run -it centos
docker run -it centos /bin/bashc
90后拼的是执行力与自我驱动力
不会怎么办,立刻现在马上去学
不懂怎么办,立刻现在马上去做
做着做着感觉就来了
类的加载顺序

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

Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
FROM scratch MAINTAINER The CentOS Project <cloud-ops@centos.org> ADD c68-docker.tar.xz / LABEL name="CentOS Base Image" vendor="CentOS" license="GPLv2" build-date="2016-06-02" # Default command CMD ["/bin/bash"]
小总结
。。。。。。。。。。。。。。。。。
FROM
基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
执行的linux的命令
echo ‘success............’

EXPOSE
当前容器对外暴露出的端口

WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

没有指定,默认为 /

ENV
用来在构建镜像过程中设置环境变量
.....
user_path
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
ADD比copy强大,add是copy+解压缩
COPY src dest
COPY ["src", "dest"]
VOLUME
容器数据卷,用于数据保存和持久化工作

CMD
指定一个容器启动时要运行的命令
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
考点:CMD和ENTRYPOINT
CMD只有最后一个生效,相当于 替换 echo 1 > test.txt
自己定义的dockerFile会把docker内部的dockerfile中的cmd命令替换

CMD 会被 docker run 之后的参数替换???等会讲
ENTRYPOINT 相当于追加命令,都要执行 echo 2 >> test.txt
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
制作ENTROYPOINT版查询IP信息的容器
自定义镜像Tomcat9
mkdir -p /zzyyuse/mydockerfile/tomcat9
在上述目录下touch c.txt
将jdk和tomcat安装的压缩包拷贝进上一步目录
apache-tomcat-9.0.8.tar.gz
jdk-8u171-linux-x64.tar.gz
在/zzyyuse/mydockerfile/tomcat9目录下新建Dockerfile文件
目录内容
构建
构建完成
run
备注
验证
结合前述的容器卷将测试的web服务test发布
总体概述
web.xml
a.jsp
测试
小总结
原文:https://www.cnblogs.com/venicid/p/11922176.html