一:Dockerfile文件,就是一个脚本文件

Dockerfile 是一个用来构建镜像的文本文件
没有文件后缀名,可以直接使用文本编辑器来编写
就像shell脚本的[xxx.sh]文件,只是没有.sh作为后缀名。

二:制作这个文件有什么用?

1:版本区分
2:制作镜像的过程都在脚本文件中编写好了,可以清楚知道怎么构建的
3:如本地存储过多镜像文件,镜像文件很大的
4:发送,保存,部署方便

:三:创建Dockerfile文件

linux系统中使用vim编写Dockerfile

vim dockerfile

windows系统中使用vscode直接编写,不设置文件后缀名

四:快速创建Dockerfile参考

FROM [指定什么镜像作为基础镜像]
FROM [python:latest]WORKDIR [指定执行run命令之前设置路径]
WORKDIR [/home/]RUN [制作镜像过程中执行linux语句]
RUN [下载]
RUN [http://www.a.com/a.txt /home/b.txt]
RUN [linux命令]使用临时安装源来安装插件
RUN [pip install redis-py -i  https://pypi.tuna.tsinghua.edu.cn/simple/]
RUN [<语句> && <语句> && <语句>] 尽量用一条RUN,因为每一条RUN都会被打包一次ADD [复制  主机-容器]
ADD [/home/a.txt /home/b.txt]
ADD [下载  网络文件-容器]
ADD [http://www.a.com/a.txt /home/b.txt]COPY [复制 主机-容器]
COPY [/home/a.txt /home/b.txt]ENV [环境变量添加]
ENV AAA=aaaEXPOSE [端口映射,会被docker run -P覆盖]
EXPOSE 80/tcp
EXPOSE 90/tcpVOLUME [挂载卷   1:主机默认docker路径创建文件夹作为挂在卷,/var/lib/docker/volumes2:容器跟路径创建一个文件夹]
VOLUME [/luichun]ENTRYPOINT [运行起容器后执行语句,会在CMD语句之前执行]
ENTRYPOINT [ls]
ENTRYPOINT ["ls"]CMD [运行起容器后执行语句,会被docker run <语句>覆盖]
CMD [pwd]
CMD ["pwd"]
CMD ["py","manage.py","runserver","0.0.0.0:8080"]

四:脚本编写实例

FROM nginx:latest
WORKDIR /root/
RUN ls
CMD pwd
CMD ["yum","install","-y","gcc"]
ENTRYPOINT pwd
ENTRYPOINT ["yum","install","-y","gcc"]
RUN echo a.txt
RUN cd /home && mkdir wenjian
ENV ABC=abc
COPY /home/a.txt /root/
COPY ./b/b.txt /root/
ADD /home/c.txt /root/d.txt
ADD https://luichun.com/e.txt /root/
EXPOSE 80/tcp
EXPOSE 81/udp
VOLUME /home/a/ /home/a/
VOLUME /home2

五:Dockerfile文件编写语法

语句 意思
FROM <镜像名字>:<标签号> 这个镜像是用那什么镜像作为基础的,
先找本地有没有这个镜像
如本地没有,会自动去docker hub中下载
WORKDIR <linux路径地址> 进入容器的什么路径
例1:
WORKDIR /root/
进入/root/的文件夹
RUN <linux语句> 有多条RUN语句时,都会执行,但显示的为最后一条

在制作为镜像时,执行linux语句
有多条RUN,则会按顺序执行,并且没执行一次就打包一次
所以RUN语句尽量使用&&符号来拼接
例1:
RUN ls && pwd
列出本目录文件列表,再查看所在路径是什么
例2:
RUN cd /home && mkdir wenjian
进入home路径创建【wenjian】文件夹
例3:
RUN yum -y install wget && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && tar -xvf redis.tar.gz

COPY <主机文件路径> <容器路径文件> 把主机中的文件复制到容器里面
例1:
COPY /home/a.txt /root/b.txt
把主机中home/路径中的a.txt文件复制到容器/root/文件夹中并且重命名为b.txt
例2:
COPY ./b.txt /root/
把同Dockerfile路径中的/b文件夹中的b.txt文件复制到容器的/root/文件夹中
ADD <网上的文件下载url> <容器中的路径> 从网上下载文件到容器的什么路径里面
比COPY多一个功能下载
ADD <主机文件路径> <容器路径文件> 把主机中的文件复制到容器里面
例1:
ADD /home/a.txt /root/b.txt
和COPY 一样
VOLUME <主机路径> <容器路径> 挂在卷
把主机的什么路径替换到容器里面
该路径中的文件主机能用
该路径中的文件容器也能用
VOLUME <容器路径> 挂在卷
在容器里面创建一个文件夹
例1:
VOLUME /home2
等于:
VOLUME ["/home2"]
在容器的根目录中创建home2文件夹
同时也会主机的/var/lib/docker/volumes/的文件夹中创建了一个home2文件夹
主机可把文件放到该位置给容器内部使用
也就是该文件夹不会因为容器关闭而删除
启动容器后通过命令docker inspect <容器名>来查看容器挂载卷的信息Mounts
或者docker volume ls查看挂在卷列表
ENV <环境变量=什么> 环境变量,写入容器里面的环境变量
例1:
ENV ABC=abc
在容器的env里面就会多出一个ABC=abc的变量
EXPOSE <容器的端口> 暴露容器的什么端口
例1:
EXPOSE 80/tcp
暴露80端口使用tcp协议
注意:
如果在启动该镜像的语句中docker run -d -----
使用了-p,启动语句优先级别高
启动语句的-p参数会把构建镜像中的端口覆盖
制作成镜像时不执行,当把这个镜像运行为容器时才执行的语句
CMD 与ENTRYPOINT
CMD <linux语句> 执行一条linux语句
制作镜像时不执行,需等到启动容器时才执行
Linux语句有两种写法
CMD ["yum","install","-y","gcc"]
等于
CMD yum install -y gcc
本语句可以被docker run <镜像名> <linux语句>中的<linux语句>覆盖掉
也就是Dockerfile中编写的CMD命令不运行
ENTRYPOINT <linux语句> 执行一条linux语句
制作镜像时不执行,需等到启动容器时才执行
ENTRYPOINT ["yum","install","-y","gcc"]
等于
ENTRYPOINT yum install -y gcc

本语句也能被运行容器时的命令语句覆盖,
但是需要指定参数,如:docker run <镜像名> --entrypoint <linux语句>

六:把Dockerfile脚本文件运行起来

docker build .

语句 意思
docker build . -t NameA:v1 build:构建镜像
.:表示当前的目录
-t [自定义镜像名]:[版本号]:指定构建出来的镜像使用什么名字,什么版本号
得到镜像 名为:NameA 标签号:v1
本条语句必须在Dockerfile脚本文件所在的路径中执行本语句,
并且本路径下的Dockerfile脚本文件的文件名为Dockerfile
新制作出来的镜像的存放位置是本地镜像库
docker build -f fileB -t NameB:v2 用名为fileB的脚本文件构建NameB的镜像
-f [自定义的Dockerfile脚本名字]:
制作的Dockerfile脚本文件名字是自定义的名字
本路径下可能有多个Dockrefile文件
所以不使用.的默认使用文件名

构建镜像优化技巧:目前是能用就行,不要在这个地方深究,就算是集群部署1000台机器制作10000个镜像,总耗时不会使用多于2分钟

Dockerfile文件:使用脚本文件生成镜像相关推荐

  1. 微信小程序---wxs文件(脚本文件)的解读与使用

    一.wxs文件(脚本文件) wxs就是在page-frame中运行的js,可以在view数据做一些变换. wxs对性能的贡献就只有一点:与wxml是在同一个线程运行的,避免了跨线程通信的开销 简单来说 ...

  2. c语言输出cad scr文件,CAD脚本文件(*.scr)有什么用?

    发布于:06-23 17:58:22 8 19078 CAD的脚本文件就象一个CAD的批处理文件,或者类似PS中记录的动作,可以一次行执行记录的一系列设置和操作.有些专业软件,例如华宁岩土工程勘查勘查 ...

  3. python调用exe程序 传入参数_关于使用c#调用python脚本文件,脚本文件需要传递参数...

    最近工作中需要干这个事,网上搜了搜资料,改了改,基本是这样 建立一个控制台应用程序: 比如 加入我在命令行直接调用python脚本,命令为 y安装python后,添加环境变量,path下面,加入路径. ...

  4. UI架构设计五 — DTA文件使用脚本自动生成

    上一篇文章讲到,我们可以使用BmpCvST.exe软件手动把png文件生成对应的DTA文件. 如果是简单的生成几张图片,倒也无所谓,但是当你开发项目的时候,可能一个项目下来,会有几百张图片需要生成,所 ...

  5. matlab脚本文件和函数文件

    M文件可分为脚本文件(MATLAB scripts)和函数文件(MATLAB functions).脚本文件是包含多条MATLAB命令的文件:函数文件可以包含输入变量,并把结果传送给输出变量. 两者的 ...

  6. MATLAB安装后的DOS框出现、脚本文件图标不显示、启动路径修改等问题解决

    MATLAB安装后的DOS框出现.脚本文件图标不显示.启动路径修改等问题解决 MATLAB安装方法 DOS框一闪而过问题 DOS框一闪而过问题说明 DOS框一闪而过问题解决 脚本文件图标异常问题 MA ...

  7. python运行pyc和pyo文件_python生成pyc文件和pyo文件

    本文原创,版权属作者个人所有,如需转载请联系作者本人.Q&微:155122733 ------------------------------------------------------- ...

  8. Python脚本文件和函数的基本运用

    一:脚本文件 1.脚本文件的操作 import sysp=sys.argv print(p)#将python代码放到cmd中运行,在后面添加参数,会自动保存在输出的列表中,默认输出的列表中只有一个值, ...

  9. Mac OS 在远程主机(Linux 系统)上使用命令执行 sql 脚本文件(使用的是 MySQL 数据库)

    文章目录 使用命令 mysql 执行脚本文件 连接远程主机后,直接使用命令 mysql 进入 MySQL 的 bin 目录后,再执行 mysql 命令 使用命令 source 执行脚本文件 sql 脚 ...

  10. Windows 使用命令执行 sql 脚本文件

    文章目录 MySQL 数据库 方法一:使用 mysql 命令 方法二:使用 source 命令 Oracle 数据库 MySQL 数据库 方法一:使用 mysql 命令 未配置 MySQL 的环境变量 ...

最新文章

  1. PL/SQL编程:用Loop-exit-when-end循环算出5的阶乘
  2. 如何网络监测其他计算机关闭445端口,关闭445端口的方法,教您电脑如何关闭445端口...
  3. networkx中求解平均度_机器学习之统计学二(分位数、平均数)
  4. SQL Server 字符串操作
  5. C# 中的三个高级参数 params
  6. php中 param,php中bind_param()函数用法分析
  7. 转 结构体中字节对齐问题(转载)
  8. 最优化作业第六章——共轭梯度法和鲍尔法
  9. 同一个html页面中两个area,HTML中的map和area标签
  10. linux自动截屏脚本,Android实现自动截图脚本
  11. 僵尸存在......在.NET中?
  12. iOS 播放音频的几种方法
  13. Java SE 随机数生成器 Random
  14. 3S基础知识:MapInfo使用MapX开发实现若干小功能
  15. 简单好用的每日任务管理小工具-sticker桌面便签
  16. Win11预览版怎么更新正式版?
  17. 计算机excel还原,Excel文件恢复软件(Magic Excel Recovery)
  18. 绝不误人子弟!零基础应该选择学习Java、PHP,还是前端?
  19. 网页上直接sql查询操作数据库,并在网页上展示列表数据的工具页面
  20. 机器人工程专业简介与开设高校名单详细完整版(2019年4月更新-专业代码:080803T)

热门文章

  1. 高通工具QXDM,QCAT和QPST
  2. 简约html5动态个人简历,HTML5 简约风格的程序员简历模板
  3. python3.7源码剖析——python对象
  4. 2021-08-08 解决“These dependencies were not found“的报错
  5. 《Go语言实战》William Kennedy中文版学习笔记
  6. 卷积法求解系统的零状态响应_信号与系统题
  7. python去除停用词_如何从gensim中的文档中删除停用词?
  8. 最受欢迎的Chrome插件Adblock屏蔽网页广告
  9. revi插件使用方法| 如何在Revit中修改CAD图纸
  10. C++实现 模糊综合评价法