没有合适的资源?快使用搜索试试~ 我知道了~
容器技术基于Dockerfile构建镜像:Docker容器化应用部署的关键指令与实践案例解析
需积分: 5 0 下载量 54 浏览量
2025-04-18
11:27:12
上传
评论
收藏 569KB PDF 举报
温馨提示
内容概要:本文详细介绍了如何基于Dockerfile构建Docker镜像,涵盖Dockerfile的基本概念、语法格式、常用指令及其使用方法。主要内容包括:Dockerfile的定义和作用,环境变量的使用,关键指令如FROM、COPY、ADD、WORKDIR、VOLUME、EXPOSE、ENV、CMD、RUN和ENTRYPOINT的具体应用,以及通过示例展示如何创建、构建和运行镜像。此外,还讨论了CMD与ENTRYPOINT的区别,以及如何在docker run时覆盖默认命令。 适合人群:具有Linux基础和一定容器化技术经验的开发人员、运维工程师和技术爱好者。 使用场景及目标:① 学习如何编写Dockerfile来自动化镜像构建过程;② 掌握Dockerfile中各个指令的具体用法及其应用场景;③ 理解如何利用Dockerfile优化镜像构建流程,提高开发和部署效率;④ 掌握CMD与ENTRYPOINT的区别及在实际项目中的选择。 其他说明:本文不仅提供了理论知识,还通过大量实例演示了具体操作步骤,帮助读者更好地理解和掌握基于Dockerfile构建镜像的方法。建议读者在学习过程中动手实践,结合实际案例进行练习,以加深对各指令的理解和应用能力。
资源推荐
资源详情
资源评论































基于Dockerfile构建镜像
1. Dockerfile:source code for building Docker file
Docker可以通过从Dockerfile文件中读取指令自动构建镜像
Dockerfile是一个文本文档,它包含用户可以在命令行上调用的所有命令来组装映像
使用Docker build命令,用户可以通过逐条执行几条命令自动创建镜像
2. Dockerfile语法格式:
首行必须是以#开头的行
不区分大小写,但约定俗成的惯例都是使用全部大写。
Docker按顺序在Dockerfile中运行指令
第一个指令必须是“FROM”,以便指定要从其中构建的基本映像
3. 环境变量(使用ENV语句声明)也可以在某些指令中使用,作为由
Dockerfile解释的变量。
在Dockerfile中,环境变量可以是 $variable_name或$ {variable_name}
${variable_name}语法还支持一些标准bash修饰符
${variable:-word}表示,如果设置了变量,那么结果将是该值。如果变量未设置,则结果为
word。
${variable:+word}表示如果设置了变量,那么结果将是word,否则结果将是空字符串。
4. .dockerignore文件
在工作目录中若有子目录,而子目录中有些文件不想引用,就可以用.dockerignore来隐藏文件。
.dockerignore文件内指明不引用的文件。
4. FROM
用来指定基础镜像,若指定的镜像不存在,会先到Docker Hub中下载
语法:
FROM <image> [AS <name>] #[AS <name>]:别名
FROM <image>[:<tag>] [AS <name>] #tag:标签
FROM <image> [@<digest>] [AS <name>] #digest:哈希码
5. docker build命令
Build an image from a Dockerfile
Options
-t, --tag list Name and optionally a tag in the 'name\:tag' format
-m, --memory bytes Memory limit
-c, --cpu-shares int CPU shares (relative weight)

6. LABEL
添加镜像文件的元数据,可出现多次,强烈建议只使用一条,因为一条指令会添加一个层,层数越
多,运行效率越低。
语法格式:
LABEL <key>=<value> <key>=<value> <key>=<value>... #可指定多个LABEL
LABEL <key> <value> #只可指定一个LABEL,第一个空格后的内容都会被当作value
示例
只修改一个镜像的FROM、LABEL
1. 创建工作目录image
1. 编辑Dockerfile文件,添加以下内容:
1. 制作镜像:
1. 查看\:REPOSITORY和TAG都为空的即为新创建的镜像文件
创建docker镜像时,可使用-t后跟 'name\:tag' 指定TAG
也可用如下命令添加标签:
[root@docker ~]# mkdir image
[root@docker ~]# cd image
[root@docker image]# vim Dockerfile
#Test Image Build
FROM alpine
LABEL maintainer="lixinkuan <[email protected]>"
[root@docker image]# docker build .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM alpine
---> 3fd9065eaf02
Step 2/2 : LABEL maintainer="lixinkuan <[email protected]>"
---> Running in e1ce9acfc453
Removing intermediate container e1ce9acfc453
---> 1deb17a1af32
Successfully built 1deb17a1af32
[root@docker image]# docker image ls
REPOSITORY TAG IMAGE ID CREATED
SIZE
<none> <none> 1deb17a1af32 5 minutes ago
4.15MB
nginx latest cd5239a0906a 3 weeks ago
109MB
busybox latest 8c811b4aec35 5 weeks ago
1.15MB
httpd 2.4 fb2f3851a971 8 weeks ago
178MB
alpine latest 3fd9065eaf02 5 months ago
4.15MB

7. COPY
用于从Docker宿主机复制文件至创建的新映像文件
语法:
COPY <src> ... <dest>
COPY ["<src>",... "<dest>"]
<src>:要复制的源文件或目录,支持使用通配符
<dest>:目标路径,即正在创建的image的文件系统路径;建议为<dest>使用绝对路
径,否则,COPY指定则以WORKDIR为其起始路径
注意:在路径中有空白字符时,通常使用第二种格式
文件复制准则:
<src>必须是build上下文中的路径,不能是其父目录中的文件
如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制
如果指定了多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结
尾
如果<dest>事先不存在,它将会被自动创建,这包括其父目录路径
示例:复制单个文件
1. 在image目录下为index.html添加内容:
1. 编辑Dockerfile文件,添加语句:
1. 用alpine启动一个容器,查看是否有/var/www/html目录
1. 制作镜像
[root@docker image]# docker image tag 1deb17a1af32 alpine:lxk
[root@docker image]# docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
alpine lxk 1deb17a1af32 5 minutes ago
4.41MB
[root@docker image]# echo '<h1>hello,docker!</h1>' > index.html
[root@docker image]# vim Dockerfile
#Test Image Build
FROM alpine
LABEL maintainer="lixinkuan <[email protected]>"
COPY index.html /var/www/html/
[root@docker image]# docker run -it --name a1 alpine
/ # ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh
7 root 0:00 ps aux
/ # ls /var/www/html
ls: /var/www/html: No such file or directory

1. 查看制作的镜像:
1. 以制作的镜像启动一个容器,并查看文件是否存在
示例:复制目录下的多个文件至目录
1. 复制一个目录至/root/image下
1. 修改Dockerfile文件为以下内容:
1. 制作镜像:
[root@docker image]# docker build -t cpindex:latest .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM alpine
---> 3fd9065eaf02
Step 2/3 : LABEL maintainer="lixinkuan <[email protected]>"
---> Running in 9d96e0655a82
Removing intermediate container 9d96e0655a82
---> 56049399eb78
Step 3/3 : COPY index.html /var/www/html/
---> bace8e55c97b
Successfully built bace8e55c97b
Successfully tagged cpindex:latest
[root@docker image]# docker image ls
REPOSITORY TAG IMAGE ID CREATED
SIZE
cpindex latest bace8e55c97b 52 seconds ago
4.15MB
[root@docker image]# docker run --name copyfile -it --rm cpindex:latest
/ # ls /var/www/html
index.html
/ # cat /var/www/html/index.html
<h1>hello,docker!</h1>
[root@docker image]# cp -r /etc/default/ ./
[root@docker image]# ls
default Dockerfile index.html
[root@docker image]# ls default/
grub kibana nss useradd

1. 查看并验证:
示例:使用数组格式创建配置文件
1. 修改配置文件如下:
1. 创建镜像并验证
[root@docker image]# docker build -t cpdir:latest ./
Sending build context to Docker daemon 9.216kB
Step 1/3 : FROM alpine
---> 3fd9065eaf02
Step 2/3 : LABEL maintainer="lixinkuan <[email protected]>"
---> Using cache
---> 56049399eb78
Step 3/3 : COPY default /tmp/
---> 18cacf50aef9
Successfully built 18cacf50aef9
Successfully tagged cpdir:latest
[root@docker image]# docker image ls
REPOSITORY TAG IMAGE ID CREATED
SIZE
cpdir latest 18cacf50aef9 24 seconds ago
4.15MB
[root@docker image]# docker run --name cpdir -it --rm cpdir:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls /tmp
grub kibana nss useradd
#Test Image Build
FROM alpine
LABEL maintainer="lixinkuan <[email protected]>"
COPY ["default","/tmp/default"]
[root@docker image]# docker build -t cp:latest ./
Sending build context to Docker daemon 9.216kB
Step 1/3 : FROM alpine
---> 3fd9065eaf02
Step 2/3 : LABEL maintainer="lixinkuan <[email protected]>"
---> Using cache
---> 56049399eb78
Step 3/3 : COPY ["default","/tmp/default"]
---> bf0799319943
Successfully built bf0799319943
Successfully tagged cp:latest
[root@docker image]# docker run --name cp -it --rm cp:latest
/ # cd /tmp
/tmp # ls
default
/tmp # cd default/
/tmp/default # ls
grub kibana nss useradd
剩余22页未读,继续阅读
资源评论


old_brick
- 粉丝: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 信息系统终端计算机系统安全等级技术要求.doc
- 天下乐陵网站策划方案.doc
- 适应性精英种群策略的遗传算法用于多模函数优化省名师优质课赛课获奖课件市赛课一等奖课件.ppt
- 工程项目成本管理中国海洋大学工程项目管理PPT课件.ppt
- 计算机公司质量环环境管理手册.doc
- 用友软件双机热备解决方案.doc
- 来源保险网络做主管的好处.ppt
- 电子技术有限公司项目管理文档汇总.doc
- 信息化背景下农村中学学生良好学习习惯培养的再探索-最新教育资料.doc
- BP神经网络实验报告.doc
- 大型词典编纂的计算机辅助开发与管理系统.doc
- 常见SQL数据库面试题和答案(一).doc
- 汽车网络营销工具.pptx
- 信息系统安全运维服务资质认证自表.pdf
- 微机原理与嵌入式系统基础培训教材.pptx
- 全球人工智能发展的趋势及挑战科普.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
