Docker 学习之路之 Dockerfile
Docker 镜像原理
Docker 镜像是由特殊的文件系统叠加而成的,其本质是一个分层的文件系统
镜像制作
- 由容器转为镜像
docker commit 容器ID 镜像名称:版本号 # 将镜像保存成压缩文件 docker save -o 压缩文件名称 镜像名称:版本号 # 将压缩的镜像加载成镜像 docker load -i 压缩文件名称
需要注意的是:如果容器中有挂载数据卷的在制作出来的镜像中不会将挂载的目录打包进镜像中,但容器中创建的文件会被打包到镜像中
- 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
本文作者:三眠
本文链接:https://www.cnblogs.com/sanmian/p/17558893.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现