1.是什么
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
2.构建三步骤
- 编写Dockerfile文件
- docker build 生成镜像
- docker run 镜像
3.Dockerfile构建过程解析
1)Dockerfile内容基础知识
2)docker执行dockerfile大致流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit 的操作提交一个新的镜像层
- docker在基于刚提交的镜像运行一个容器
- 执行Dockerfile的下一条指令直到所有指令都执行完成
3)抽象
- Dockerfile ——> .class
- Docker镜像 ———> jar
- Docker容器 ———-> 运行的jar
4.Dockerfile保留字指令
FROM:基础镜像,当前新的镜像是基于哪个镜像的MAINTAINER:镜像维护者的名字和邮箱RUN:容器构建时需要运行的命令EXPOSE:当前容器对外暴露出的端口WORKDIR:指定在创建容器后,终端默认登录进来的工作目录,一个落脚点ENV:用来在构建镜像过程中设置环境变量这个环境变量可以再后续任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样也可以在其他指令中直接使用ENV MY_PATH/usr/localWORKDIR $MY_PATHADD:拷贝并解压COPY:拷贝VOLUME:容器数据卷,用于数据保存和持久化工作CMD:指定一个容器启动时要运行的命令Dockerfile中可以有多个CMD命令,但是只有最后一个生效,CMD会被docker run之后的参数替换ENTRYPOINT:指定一个容器启动时要运行的命令ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像再被子镜像继承后,父镜像的onbuild被触
5.自定义镜像mycentos
Base镜像:类似java的Object,99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。
1.编写
vim Dockerfile-------------------------------------------from centos#基础系统是centosmaintainer yhd<1972039773@qq.com>#作者邮件env mypath /tmp#我的路径workdir /tmp#开始工作目录 $mypathrun yum -y install vim#安装vimrun yum -y install net-toolsexpose 80#暴露的端口cmd echo $mypathcmd echo "success---ok!"cmd /bin/bash--------------------------------------------
2.构建
docker build -f /root/Dockerfile -t mycentos:1.3
3.运行
docker images 查看所有镜像,发现已经有了docker run -it mycentos:1.3
4.列出镜像的变更历史
docker history mycentos:1.3
6.cmd-entrypoint命令案例
1)cmd ls
docker build -f /root/Dockerfile -t mil:1.1 .docker run -it mil -al 会报错因为命令行追加的参数会覆盖原有的cmd命令ls
2)entrypoint ls
docker build -f /root/Dockerfile -t mi2:1.1docker run -it mi2 -al 会执行ls -al因为命令行追加的参数会与上一条命令合在一起 ls -al
7.onbuild命令
子镜像继承了父镜像,子镜像运行的时候,父镜像onbuild的命令就会执行
类似父类构造器写的代码,会在子类实例化以后执行
8.自定义tomcat9
mkdir yhdcd yhdtouch c.txtcp /opt/apache-tomcat-9.0.8.tar.gz /root/yhd/cp /opt/jdk-1.8.tar.gz /root/yhd/vim Dockerfile----------------------from centosmaintainer yhd<1972039773@qq.com>#吧c.txt拷贝到/usr/local/cincontainer.txtcopy c.txt /usr/local/cincontainer.txt#吧java和tomcat添加到容器中add jdk -1.8.tar.gz /usr/local/add apache-tomcat-9.0.8.tar.gz /usr/local/#安装vim编辑器run yum -y install vim#设置家目录env mypath /usr/localworkdir #mypath#配置java和tomcat环境变量env java_home /usr/local/jdk-1.8env classpath $java_home/lib/dt.jar:$java_home/lib/tools.jarenv catalina_home /usr/local/apache-tomcat-9.0.8env catalina_base /usr/local/apache-tomcat-9.0.8env path $path:$java_home/bin:$catalina_home/lib:$catalina_home/bin#容器运行时监听的端口expose 8080#启动时运行tomcat#entrypoint ["/usr/local/apache-tomcat-9.0.8/binstartup.sh"]#cmd ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]cmd /usr/local/apache-tomcat-9.0.8/bin/startup.sh&& tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out----------------------#构建docker build -t yhdTomcat9:1.1 .#如果dockerfile文件在当前目录下且就叫Dockerfile,可以省略 -f /root/yhd/Dockerfile#运行docker run -d -p 9080:8080 --name myt9 -v /root/yhd/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test --privileged=trueyhdTomcat9:1.1
9.总结
使用本地docker实例运行dockerfile
docker build ->image镜像
docker run ->docker 容器
容器->commit ->镜像->push <-pull
