Docker镜像与仓库(二)Dockerfile
2024-10-11 11:25:29
Docker镜像文件与仓库(二)
Docker镜像文件与仓库(二)
Dockerfile指令
Dockerfile格式:
1.#Comment注释
2.INSTRUCTION大写的指令名 argument参数
- FROM
1.FROM <image>
2.FROM <image>:<tag>
3.#通过FROM指定的镜像名都必须是已经存在的镜像,这个镜像叫做基础镜像,而且必须是第一条非注释指令
- MAINTAINER
1.MAINTAINER <name>
2.#指定镜像的作者信息,包含镜像的所有者和联系信息
- RUN
1.#指定当前镜像中运行的命令
2.RUN <command> (shell模式)
3. /bin/sh -c command
4. 比如 RUN echo hello
5.RUN ["executable","param1","param2"] (exec模式)
6. 比如 RUN ["/bin/bash","-c","echo hello"]
- EXPOSE
1.EXPOSE <port> [<port>...]
2.#指定运行该镜像文件的容器使用的端口,但是我们在运行容器的时候仍然要指定端口,因为dockerfile写的端口只是为了告诉docker这个容器在运行的时候可能会使用哪些端口
3.docker run -p 80 -d test nginx -g "daemon off;"
- CMD
1.CMD ["executable","param1","param2"] (exec模式)
2.CMD command param1 param2 (shell模式)
3.CMD ["param1","param2"] (作为ENTRYPOINT指令的默认参数)
4.#CMD指令是用来指定容器启动时的默认情况
- ENTRYPOINT
1.ENTRYPOINT ["executable","param1","param2"] (exec模式)
2.ENTRYPOINT command param1 param2 (shell模式)
3.#CMD能被覆盖,而ENTRYPOINT不会
- ADD
1.ADD <src>...<dest>
2.ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
- COPY
1.COPY <src>...<dest>
2.COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
ADD vs. COPY:
- ADD包含类似tar的解压功能
如果单纯复制文件,Docker推荐使用COPY
- VOLUME
1.VOLUME ["/data"]
2.#卷,对于文件共享来说
- WORKDIR
1.WORKDIR /path/to/workdir
2.#为后面的指令指定工作目录
- ENV
1.ENV <key> <value>
2.ENV <key>=<value> ...
3.#用来设置环境变量
- USER
1.USER daemon
2.#指定镜像文件为什么样的用户运行
3. USER user
4. USER user:group
5. USER user:gid
6. USER uid
7. USER uid:gid
8. USER uid:group
9.#默认使用root用户
- ONBUILD
1.ONBUILD [INSTRUCTION]
2.#能够为镜像添加触发器
3.#当一个镜像被其他镜像作为基础镜像时执行
4.#会在构建过程中插入指令
Dockerfile构建过程
- 从基础镜像运行一个容器
- 执行一条指令,对容器做出修改
- 执行类似docker commit的操作,提交一个新的镜像层
- 再基于刚提交的镜像层运行一个新容器
- 执行Dockerfile中的下一条指令,直至所有指令执行完毕
使用中间层镜像进行调试的好处:
查找错误
构建缓存:能使下一次启动时速度加快
如果想不使用缓存:docker build --no-cache
对Dockerfile进行修改,然后启动的时候就从修改的地方开始刷新缓存
查看镜像构建的过程:docker history [image]
最新文章
- ViewStateMode vs EnableViewState
- rlwrap-0.37.tar.gz实现sqlplus上下翻页
- [kuangbin带你飞]专题十五 数位DP
- Android UI效果实现——滑动模糊渐变效果实现
- Android使用pull解析xml
- Readonly and other things about C++
- java 面向对象编程。。。。
- 网卡的 Ring Buffer 详解
- range 小数据池介绍
- C#多线程编程实战(二)
- 了解java虚拟机—在TALB上分配对象(10)
- POJ 1375 Intervals 光源投影【平面几何】
- python 简单了解namedtuple
- Java模拟POST请求发送二进制数据
- SQL Server 通过TSQL(存储过程)用MSXML去调用Webservice
- 使用before_request来做权限和用户检查
- mac配置--ant
- 第2章—装配Bean—通过java代码装配bean
- Excel开发之旅(三)——添加侧边工具栏
- 简单实现VUE的双向数据绑定
热门文章
- jQuery关于mouseover和mouseenter的区别
- C#文件读写操作
- Android中view的事件
- sql中的split方法
- 去掉UItableview headerview黏性
- Java的常见误区与细节
- mysql优化(1) 观察服务器周期性变化
- jquery1.11 操作checkbox:全选、取消全选、获取选择元素、获取取消选择元素(总结)
- Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)
- Flink Program Guide (4) -- 时间戳和Watermark生成(DataStream API编程指导 -- For Java)