Docker 学习之路之 Dockerfile

发布时间 2023-07-16 23:52:43作者: 三眠

Docker 镜像原理

Docker 镜像是由特殊的文件系统叠加而成的,其本质是一个分层的文件系统

镜像制作

  1. 由容器转为镜像
docker commit 容器ID 镜像名称:版本号

# 将镜像保存成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号

# 将压缩的镜像加载成镜像
docker load -i 压缩文件名称

需要注意的是:如果容器中有挂载数据卷的在制作出来的镜像中不会将挂载的目录打包进镜像中,但容器中创建的文件会被打包到镜像中

  1. dockerfile 制作
  • dockerfile 就是一个文本文件,其中包含一条条的指令

dockerfile 关键字
LABEL :功能是为镜像指定标签
FORM:基础镜像,表明当前镜像是基于那么镜像的
MAINTAINER :镜像维护者的名字和邮箱地址
RUN:容器构建时需要用到的命令
EXPOSE:当前容器对外暴露的端口
WORKDIR:指定在创建容器后,终端默认登录的工作目录。(也就是你登录进某个容器的时候,默认的目录)
ENV:用来构建镜像过程中设置环境环境(ENV MY_PATH /usr/mytest、WORKDIR $MY_PATH)
ADD:讲宿主机目录的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包(类似于absible的某个模块)
COPY:类似ADD,拷贝文件和目录到镜像中(COPY src dest、COPY["src","dest"])
VOLUME:容器数据卷,指定数据卷目录,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD,但是生效的只有最后一个,CMD会被docker run 之后 的参数替换。
ENTRYPOINT:指定一个容器启动时要运行的命令。有多个会追加。
ONBUILD:触发器,当构建一个被继承的 Dockerfile时运行命令,父镜像在被子继承后父镜像的 ONBUILD被触发(子镜像继承了父镜像 的dockerfile,父镜像有ONBUILD定义,那么这个子镜像继承过去了ONBUILD,ONBUILD会执行)

# 当有 dockerfile 之后,通过下面的命令生成镜像:
docker build -f /xxx/xxx_dockerfile(dockerfile 的路径) -t app
# --tag, -t: 设置新镜像的名字及标签(版本号),通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。tag 即应用的版本号
  • 例如:构建 centos 7 的自制镜像,且登录后自动跳转到 /root 目录下,且能用 vim
FROM centos:7

MAINTAINER sanmian <https://www.cnblogs.com/sanmian/>

RUN yum install -y(在安装时需要确认y/n,这里是为了让它顺利安装) vim

WORKDIR /root

CMD /bin/bash