DockerFile
dockerfile是用来构建dokcer镜像的文件!命令參数脚本!
构建步骤:
1、编写一个dockerfile文件
2.docker build构建成为一个镜像
3,docker run运行镜像
4.docker push发布镜像(DockerHub、阿里云镜像仓库!)
查看官方的镜像:
Docker Hub 中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!
DockerFile构建过程
很多指令:
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准,必须要掌握!
步骤:开发,部罢,运维。。。缺一不可!
Dockerile:构建文件,定义了一切的步骤,源代码
Dockerlmages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器
DockerFile的指令
FROM #基础镜镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile这个时候就会运行ONBUILD 的指令。触发指令。
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量!
因为镜像是一个经过阉割的软件,我们在启动容器后,会发现这个容器并不是拥有原本软件的所有功能,如果我们希望做一个符合自己期望的容器,那么就可以使用dockerfile
的技术创建一个符合自己要求的容器。
但是我们可以构造自己的容器:
使用自己的dockefile文件生成自己的镜像:
docker build -f dockerfiler-centos -t mycentos:0.2 . (不要忘记最后的 ".")
- -f 指定dockerfile文件所在的目录
- -t 生成的对象和版本
我们可以通过docker history 镜像id(或镜像名:tag)查看一个镜像的构建过程
CMD和ENTRYPOINT的不同
- CMD 命令是不能通过命令行进行追加的。
- ENTRYPOINT命令是可以通过命令行进行追加操作的。
我们制作两个dockerfile文件,一个使用CMD命令,一个使用ENTRYPOINT命令:
1,CMD命令镜像
直接运行会在容器生成运行之后执行ls -a的命令
但是我们在启动容器的命令后面加上 -l并不会执行ls -a -l 的命令,因为-l命令会将ls -a覆盖,-l不是命令,所以会报错:
不报错的话,我们只能使用完整的命令进行覆盖:
2,接下来我们编写一个ENTRYPOINT命令的dockerfile制作镜像:
但是我们可以在启动容器语句的最后面使用添加命令的方式,进行命令的补充
因为是命令的补充不是重写,所以不能使用完整命令,否则会报错