dockerfile是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、编写一个dockerfile 文件
2、docker buind 构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)
我们看一下官方的镜像怎么做的?
https://github.com/docker-library/mysql/blob/a09a716a88ce34a17e16df3f8b091066d90e6f34/8.0/Dockerfile.debian
很多官方镜像都是基础包,很多功能不全,我们通常会自己搭建自己的镜像!
既然官方可以制作,我们也可以!
DockerFil构建过程
基础知识:
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每条指令都会创建提交一个 新的镜像层,进行提交!
很多指令:
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件特别简单!
步骤:开发、部署、上线 缺一不可!
Docker镜像逐渐成为企业交付的标准,必须掌握!
Dickerfile:构建文件,定义了一切步骤,源代码
Dockerimages:通过Dockerfile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器!
DockerFile的指令:
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOST#保留端口配置
CMD 指定这个容器启动的时候需要运行的命令,只有最后一行会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD #当构建一个被继承dockerfile这个时候就会运行ONBUILD 的指令,触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
ENV 构建的时候设置环境变量
实战测试:
Docker Hub中 99%的镜像都是从这个镜像过来的 FROM scratch;然后配置我们需要的软件和配置来进行构建
创建一个我们自己的centos:
1、编写dockerfile文件:
2、通过这个文件构建镜像
命令:docker build -f mydockerfilecetos -t mycnentos:0.1 .
docker build -f dockerfle文件路径 -t 镜像名:tag .
3、测试运行:
docker run -it mycnentos:0.1
对比之前的centos 增加了vim pw等命令
我们可以列出本地进行的变更历史
docker history 镜像id
我们平时拿到一个镜像,可以研究一下它是怎么做的了?
CMD 和 ENTRYPOINT 的区别:
CMD 指定这个容器启动的时候需要运行的命令,只有最后一行会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候需要运行的命令,可以追加命令
测试CMD:
1、编写dockerfile文件:
2、构建镜像并运行发现 ls -a 命令生效:
问题:想追加命令 -l ls-al
cmd的清理下 -l替换了CMD['ls','a']命令, -l 不是命令所以报错!
测试ENTRYPOINT :
1、追加命令是可以直接执行的: