从应用软件过程来看,DockerFile、Docker镜像与Docker容器分别代表软件的三个不同阶段。
DockerFile是软件的原材料
Docker镜像是软件的交付品
Docker容器可以认为是软件的运行态
DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可。合力充当Docker体系基石
基础知识
Dockerfile体系结构(保留字指令)
【FROM】基础镜像。当前新镜像是基于哪个镜像的
例如: FROM scratch
【MAINTAINER】镜像维护者的姓名和邮箱地址
例如:MAINTAINER The CentOS Project [email protected]
【RUN】容器构建时需要运行的命令,即在构建镜像时执行一个具体的命令
例如:RUN groupadd -r redis && useradd -r -g redis redis
构建一个redis 用户组并添加一个叫redis 的用户
【EXPOSE】当前容器对外暴露出的端口
例如:EXPOSE 6379
【WORKDIR】指定在创建容器后,终端默认登入的进来工作目录,一个落脚点
例如:WORKDIR /data
登入之后,你的工作目录即为data
【ENV】用来在构建镜像过程中设置环境变量
例如:
ENV MY_PATH/user/mytest
WORKDIR $MY_PATH
设置变量叫MY_PATH,值为user/mytest,登入之后直接进入user/mytest,不再是根目录/
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量
【ADD】在宿主机的目录下的文件拷贝至镜像且ADD命令会自动处理URL和解压tar压缩包
例如:ADD centos-7-docker.tar.xz/
在构建dockerfile上下文路径时,把centos-7-docker.tar.xz/ 拷贝(并解压缩)至镜像中
【COPY】类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
例如:
COPY src dest
COPY [“src”," dest"]
【VOLUME】容器数据卷,用于数据保存和持久化工作
例如:
FROM centos
VOLUME["/dataVolumeContainer1",“dataVolumeContainer2”]
建立centos时,同时在根目录下自建dataVolumeContainer1与dataVolumeContainer2两个容器数据卷
![](/qrcode.jpg)
【CMD】指定一个容器启动时要运行的命令
例如:
CMD ["/bin/bash"]
CMD cat/etc/hosts
则第二条CMD覆盖第一条CMD
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
【ENTRYPOINT】指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是追加
【ONBUILD】当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发
案例1 自定义镜像
自定义mycentos目的使我们自己的镜像具备:(1)登入后的默认路径(2)vim编辑器(3)查看网络配置ifconfig支持
在/mydocker下新vim Dockerfile2,写入
from centos
ENV MYPATH /usr/local
WORKDIR $MYPATH #登入之后直接进入/usr/local
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
保存退出后执行 docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
之后docker images mycentos 可查看自己构建的新镜像
之后docker run -it mycentos:1.3
至此支持vim与ifconfig等工具
案例2 onbuild指令
编写Dockerfile4,写入
执行docker build -f /mydocker/Dockerfile4 -t myip_father
之后执行cp Dockerfile4 Dockerfile5,修改Dockerfile5 ,保存退出
执行docker build -f /mydocker/Dockerfile5 -t myip_son
子类继承时,父类被执行
案例3 自定义镜像Tomcat9
新建一个Dockerfile,执行vim Dockerfile
编辑该Dockerfile,写入以下内容,保存退出
执行docker build -t zzyytomcat9 .
之后可执行docker images查看该新镜像
执行docker run …,-i 交互,-t展示终端,-d 不交互,-P 随机分配端口,-p 主机端口 : 容器端口,–name 对容器命名,-v 新建了两个容器卷
docker run -d 不返回容器终端,在宿主机内执行docker exec 容器ID 命令,对容器进行操作
Dockerfile总结
1、编写Dockerfile
2、build 生成镜像
3、run 生成具体实例——容器
4、当前容器可commit生成新镜像
5、新镜像可push推送至Docker hub或阿里云