没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Docker
镜像制作类似于虚拟机的镜像(模版)制作,即按照公司的实际业务需求将需要安装的软
件、相关配置等基础环境配置完成,然后将其做成镜像,最后再批量从镜像批量生成容器
实例,这样可以极大的简化相同环境的部署工作。
Docker的镜像制作分为手动制作(基于容器)和自动制作(基于DockerFile),企业通常都
是基于Dockerfile制作镜像。
• 手动构建docker
commit:下载官方或者别人制作好的镜像,通过修改现有容器,将之手动构建为镜
像
• 自动构建docker build:通过Dockerfile文件,批量构建为镜像
一、 手动构建镜像
将现有容器通过docker commit手动构建镜像
二、 自动构建镜像
利用DockerFile文件执行docker build自动构建镜像
1. Dockerfile介绍
DockerFile
是一种被Docker程序解释执行的脚本,由一条条的命令组成的,每条命令对应linux下面
的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书
写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动
制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后
期有额外的需求时,只要在之前的DockerFile添加或者修改响应的命令即可重新生成新的
Docker镜像,避免了重复手动制作镜像的麻烦,类似与shell脚本一样,可以方便高效的制
作镜像Docker守护程序 Dockerfile
逐一运行指令,如有必要,将每个指令的结果提交到新镜像,然后最终输出新镜像的ID。
Docker守护程序将自动清理之前发送的上下文。
注意:每条指令都是独立运行的,并会导致创建新镜像,比如 RUN cd /tmp
对下一条指令不会有任何影响。
2. Dockerfile文件格式
Dockerfile 是一个有特定语法格式的文本文件
Dockerfile文件说明:
• 每一行以Dockerfile的指令开头,指令不区分大小写,但是惯例使用大写
• 使用 # 开始作为注释
• 每一行只支持一条指令,每条指令可以携带多个参数
• 指令按文件的顺序从上至下进行执行
• 每个指令的执行会生成一个新的镜像层,为了减少分层和镜像大小,尽可能将多条指
令合并成一条指令
• 制作镜像一般可能需要反复多次,每次执行dockfile都按顺序执行,从头开始,已经
执行过的指令已经缓存,不需要再执行,如果后续有一行新的指令没执行过,其往后
的指令将会重新执行,所以为加速镜像制作,将最常变化的内容放下dockerfile的文
件的后面
3. 构建镜像docker build命令
docker build命令使用Dockerfile文件创建镜像
命令格式:
js复制代码docker build [OPTIONS] PATH | URL | -
//PATH | URL | - 可以使是本地路径,也可以是URL路径。若设置为 -
,则从标准输入获取Dockerfile的内容
命令选项
含义
-f,--file
string
Dockerfile文件名,默认为 PATH/Dockerfile
--force-rm
总是删除中间层容器,创建镜像失败时,删除临时容器
--no-cache
不使用之前构建中创建的缓存
-q, --
quiet=false
不显示Dockerfile的RUN运行的输出结果
--rm=true
创建镜像成功时,删除临时容器
-t,--tag list
设置注册名称、镜像名称、标签。格式为
<注册名称>/<镜像名称>:<标签>(标签默认为latest)
4. Dockerfile 相关指令
4.1 FROM —— 指定基础镜像
定制镜像,需要先有一个基础镜像,在这个基础镜像上进行定制。
FROM
就是指定基础镜像,此指令通常必需放在Dockerfile文件第一个非注释行。后续的指令都
是运行于此基准镜像所提供的运行环境。
基础镜像可以是任何可用镜像文件,默认情况下,docker
build会在docker主机上查找指定的镜像文件,在其不存在时,则会从Docker Hub
Registry上拉取所需的镜像文件。如果找不到指定的镜像文件,docker
build会返回一个错误信息。
如何选择合适的镜像呢?
对于不同的软件官方都提供了相关的docker镜像,比如:
nginx、redis、mysql、httpd、tomcat等服务类的镜像,也有操作系统类,如:
centos、ubuntu、debian等。建议使用官方镜像,比较安全。
格式:
js复制代码FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
//说明:
--platform 指定镜像的平台,比如: linux/amd64, linux/arm64, or windows/amd64
tag 和 digest是可选项,如果不指定,默认为latest
例:
js复制代码[root@localhost ~]# mkdir /data/dockerfile/system/centos/centos7 -p
[root@localhost ~]# cd /data/dockerfile/system/centos/centos7/
[root@localhost centos7]# vim Dockerfile
FROM centos:7.9.2009
4.2 LABEL —— 指定镜像元数据
LABEL:说明信息,可以指定镜像元数据,如: 镜像作者等。docker inspect
命令可以查看LABEL信息。
一个镜像可以有多个label,还可以写在一行中,即多标签写法,可以减少镜像的的大小
js复制代码//一行格式
LABEL multi.label1="value1" multi.label2="value2" other="value3"
//多行格式
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
例:
js复制代码[root@localhost centos7]# vim Dockerfile
FROM centos:7.9.2009
LABEL author="lkk" \ //作者信息
version="7.9.2009" //版本信息
4.3 RUN —— 执行shell命令
RUN指令用来在构建镜像阶段,需要执行 FROM
指定镜像所支持的Shell命令。通常各种基础镜像一般都支持丰富的shell命令。
注意: 每个 RUN 都是独立运行的,和前一个 RUN 无关。RUN 可以写多个,每一个 RUN
指令都会建立一个镜像层,所以尽可能合并成一条指令,比如将多个shell命令通过 &&
连接一起成为一条指令。
格式:
js复制代码//shell 格式:相当于 /bin/sh -c <命令> 此种形式支持环境变量
RUN <命令>
//exec 格式:此种形式不支持环境变量,注意!是双引号,不能是单引号
RUN ["可执行文件", "参数1", "参数2"]
//exec格式可以指定其它shell
RUN ["/bin/bash","-c","echo hello wang"]
例:
js复制代码[root@localhost centos7]# vim Dockerfile
FROM centos:7.9.2009
LABEL author="lkk" \
version="7.9.2009"
RUN cd /opt && touch wj
[root@localhost centos7]# docker build -t centos:7.9 .
#"docker build"命令使用Dockerfile文件创建镜像
#"-t"指定构建的镜像的名称和标签
#"centos"是镜像的名称
#"7.9"是标签
#"."是当前目录
[root@localhost centos7]# docker run -it --name c1 centos:7.9 bash
[root@0b60dbd95701 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc
root run sbin srv sys tmp usr var
[root@0b60dbd95701 /]# cd /opt
[root@0b60dbd95701 opt]# ls
wj
Dockerfile 1.png
剩余15页未读,继续阅读
资源评论
乔丹搞IT
- 粉丝: 6125
- 资源: 1005
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java的概要介绍与分析
- MoonBit 编译器.MoonBit - 文档 - 概览 - 标准库.MoonBit 是一个用户友好,构建快,产出质量高的编程语言
- 解决微电网调度中的两阶段鲁棒优化问题,考虑了风电出力和负荷功率的不确定性,通过迭代求解主问题和子问题,最终得到最优的调度方案,并绘制了风电出力、负荷功率、购售电功率、充放电功率和储能调度结果等相关图表
- wireshark免安装版本 WiresharkPortable64-4.4.2
- springboot-基于springboot的房屋租赁管理系统
- ssm员工工作日志管理系统-lw.zip
- 人脸疲劳图像目标检测数据【已标注,约10,000张数据,YOLO 标注格式】
- 123456789.py
- RouterHandler
- 页面居中设置的process
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功