DockerFile 解析 :
是什么 :
dockerfile 是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
独立于docker build 创建成docker镜像
官网 : http://docs.docker.com/engine/reference/builder/
构建三步骤 :
1, 编写dockerfile文件
2, docker build 命令构建镜像
3, docker run 依据镜像运行容器实例
dockerfile 构建原理 :
1,每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2,指令按照从上到下,顺序执行
3,#表示注释
4,每条指令都会创建一个新的镜像层并对镜像进行提交
docker 执行dockerfile的大致流程
1,docker从基础镜像运行一个容器
2,执行一条指令并对容器作出修改
3,执行类似docker commitd的操作提交一个新的镜像层
4,docker 再基础刚提交的镜像运行一个新容器
5,执行dockerfile中的下一条指令直到所有指令都执行完成
dockerfile常用保留字 :
参考Tomcat8 的dockerfile 入门
http://github.com/docker-library/tomcat
DockerFile保留字:
FROM :基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER :镜像维护者的姓名和邮箱地址
RUN :容器构建时需要运行的命令 两种格式 shell格式 exec格式
Run 是在 docker build 时运行
EXPOSE :当前容器对外暴露的端口
WORKDIR :指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
USER : 是定该镜像以什么样的用户去执行,如果都不指定,默认时root
EVN : 用来在构建镜像过程中设置环境变量
ADD :将宿主机目录下得文件拷贝进镜像且会自动处理url和解压tar压缩包
COPY : 类似add,拷贝文件和目录到镜像中。
将从构造上下文目录中<原路径>的文件/目录复制到新的一层镜像内的<目的路径>位置
eg:COPY src dest
COPY ["src","dest"] <src原路径>:源文件或者源目录
<dest目标路径>: 容器内的制定滤镜,该路径不用事先建好,如果没有会自动创建
VOLUME :
CMD : 指定容器启动后要做的指令(事情)
注意: DockerFile 中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
它和前面RUN命令的区别 CMD 是在docker run 时运行 RUN 是在docker build 时运行
ENTRYPOINT : 也是用来指定一个容器启动时要运行的命令
类似于CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令会被当作参数送给ENTRYPOINT指令指定的程序
eg : 变参 nginx 启动命令 nginx -c
FROM nginx
ENTRYPOINT ["nginx","-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
是否传参 按照dockefile编写执行 传参运行
Docker 命令 docker run nginx:test docker run nginx:test -c /etc/nginx/nginx.conf
衍生出的实际命令 nginx -c /etc/nginx/nginx.conf nginx -c /etc/nginx/nginx.conf
案例:contos案例
https://www.oracle.com/java/technologies/downloads/#java8下载安装 (登录oracle)
https://mirrors.yangxingzhen.com/jdk/ 分享路径个人博客
自定义镜像 centos java8
要求:Centos 镜像具备vim+jdk8+ifconfig
编写: 准备编写DockerFile文件 大写字母D
构建 :docker build -t centosjava8:1.5 .
注意 : .
docker run -it 镜像ID /bin/bash
pwd
登录查看 vim a.text
cat a.text
java -version
虚悬镜像:是什么 :仓库名、标签都是<none>的镜像,俗称dangling image
查看虚悬镜像 docker images ls -f dangling=true 全部删除 docker image prune
虚悬镜像已经失去存在价值,可以删除
ubuntu 其他工具
RUN apt-get updata
RUN apt-get install net-tools
# RUN apt-get install -y iprout2
# RUN apt-get install install -y inetutils-ping