DockerFile学习

什么是Dockerfile

其实 Dockerfile 就是用来构建docker镜像的文件, 是由一系列命令和参数构成的脚本.
构建的步骤: 编写dockerfile 文件 >> docker build >> docker run

构建过程解析

Dockerfile内容基础知识 1. 每条保留字指令都必须为大写字母 且后面要跟随至少一个参数.
2.指令按照从上到下, 顺序执行.
3.# 表示注释.
4.每条指令都会创建一个新的镜像层, 并对镜像进行提交
Docker执行Dockerfile 的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器做出修改
(3)执行类似docker commit 的操作 提交一个新的镜像层
(4)docker 再基于刚刚提交的镜像运行一个新容器
(5)执行dockerfile 中的下一条指令直到所有指令都执行完成

总结
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器则可以认为是软件的运行态。
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

dockerfile体系结构(保留字指令)

保留关键字 FROM - 基础镜像, 当前新镜像是基于哪个镜像的;
MAINTAINER - 镜像维护者的姓名和邮箱地址;
RUN - 容器构建时需要运行的命令;
EXPOSE - 当前容器对外暴露的端口;
WORKDIR - 指定在创建容器后, 终端默认登陆的进来工作目录, 一个落脚点

ENV用来构建镜像过程中设置环境变量
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
比如:WORKDIR $MY_PATH

ADD是将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL 和解压tar 压缩包, COPY 是 只把拷贝文件和目录到镜像中
VOLUME是容器数据卷, 用于数据保存和持久化工作

CMD指定一个容器启动时要启动的命令
CMD和ENTRYPOINT 不同之处是 CMD 会被docker run 之后的参数替换, 而且CMD 指令如果有多个, 就只有最后一个生效. 但是 ENTRYPOINT 的命令, 会以追加的形式启动,不会被替换掉
ONBULD是当构建一个被继承的Dcokerfile时运行命令, 父镜像在被子继承后的父镜像的onbuild 被触发

简单小案例

1
2
3
4
5
6
7
8
9
10
11
FROM centos
MAINTAINER zzyy<zzyy167@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

dockerfile 内容如上
(一)编写dockerfile
上面是dockerfile 文件里的内容, 只需要 vim xxxdockerfile 进行编写dockerfile,把上面的放进去就可以了, expose 是暴露的端口,RUN 是容器构建的时候需要执行的命令

(二)根据dockerfile构建新镜像
docker build -f DockerFileOne -t onenight:centos .
最后面的 . 是当前路径的意思, 最后一个 . 不要忘记了
注意, 这个镜像名字必须是小写的, 不能是大写的, 不然就会报错的
(三) 根据镜像运行容器并去 看看容器里是否有 vim 和 ifconfig 命令

命令是 docker run -it 镜像ID