Dockerfile配置指令详解

本文详细介绍了Dockerfile的编写结构及其主要指令,包括FROM、RUN、CMD、EXPOSE、ENV、COPY、ADD、ENTRYPOINT、VOLUME、USER、WORKDIR、ARG、ONBUILD、STOPSIGNAL和HEALTHCHECK等。每个指令都配有相应的使用案例,帮助理解其功能和应用场景,如FROM用于指定基础镜像,CMD和ENTRYPOINT定义容器启动命令,VOLUME实现数据持久化,WORKDIR设置工作目录等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Dockerfile的编写结构

基本构建如下:

基础镜像信息
镜像操作指令
容器启动时执行指令

2、FROM

作用:指定基础镜像,用于继承其他镜像使用的


[root@Docker1 ~]# vim Dockerfile              #文件名,必须是Dockerfile

FROM scratch                   #不指定任何镜像为基础 scratch(注意需要从0开始进行编辑)
FROM centos                    #指定基础镜像为 centos       (在以有的镜像的基础上进行编辑)
                               #同时意味着接下来所写的指令将作为镜像的第一层开始

————————————————————————————————————————————
语法格式: 在三种写法中<tag>和<digest> 是可选项,如果没有选择,那么默认值为latest
FROM <image>

FROM <image>:<tag>

FROM <image>:<digest> 

3、RUN

作用: 功能为运行指定的命令

语法格式:
RUN <command>                            #第一种,直接跟shell命令

在linux操作系统上默认 /bin/sh -c
在windows操作系统上默认 cmd /S /C

RUN ["executable", "param1", "param2"]   #第二种,类似于函数调用,可将executable理解成为可执行文件,后面就是两个参数


案例:


RUN source $HOME/.bashrc; echo $HOME        
RUN ["/bin/bash", "-c", "echo hello"]        

 注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错,RUN书写时的换行符是\

 1、案例FROM与RUN


[root@Docker1 ~]# docker load -i centos7.4.tar.gz        #导入镜像
606d67d8e1b8: Loading layer  204.7MB/204.7MB
Loaded image: centos:7.4
[root@Docker1 ~]# docker images                         
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       7.4       3253d84c6425   2 years ago   197MB


[root@Docker1 ~]# vim Dockerfile            

FROM centos:7.4                        #第一行必须是 FROM 指令

MAINTAINER ALEX-DUAN 123456@qq.com     #指定作者是谁

LABEL naem="centos base image" \       #给镜像指定标签
      build-date="2022-02-28"

RUN yum -y install net-tools           #安装一个软件

保存

[root@Docker1 ~]# docker build -t c7:v1 .                        
Sending build context to Docker daemon  204.8MB
Step 1/4 : FROM centos:7.4
 ---> 3253d84c6425
Step 2/4 : MAINTAINER ALEX-DUAN 123456@qq.com
 ---> Running in bcca70415028
Removing intermediate container bcca70415028
 ---> b457c8024fb3
Step 3/4 : LABEL naem="centos base image"       build-date="2022-02-28"
 ---> Running in 774902692adf
Removing intermediate container 774902692adf
 ---> 668d541cc8a3
Step 4/4 : RUN yum -y install net-tools
 ---> Running in b0b74285cb01
..................
..........
.....
Complete!
Removing intermediate container b0b74285cb01
 ---> 04d750860e57
Successfully built 04d750860e57
Successfully tagged c7:v1

[root@Docker1 ~]# docker images                 #查看
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
c7           v1        04d750860e57   2 minutes ago   354MB
centos       7.4       3253d84c6425   2 years ago     197MB

#可以看到我们这是安装了一个ifcong命令就比基础镜像多150MB左右
#构建容器时要轻量级构建(也就是越小越好),在容器中没必要安装多余的软件去占用资源,造成资源浪费

4、CMD

作用:为容器启动时要运行的命令

三种语法格式:

CMD ["executable","param1","param2"]          

CMD ["param1","param2"]            

CMD command param1 param2             
————————————————————————————————————————————————————————
第一种和第二种其实都是可执行文件加上参数的形式
举个栗子

CMD [ "sh", "-c", "echo $HOME"]           
CMD [ "echo", "$HOME" ]             


第三种,就是shell这种执行方式和写法         

注意:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号,原因是参数传递后,docker解析的是一个JSON array

2、案例CMD


[root@Docker1 ~]# vim Dockerfile              

FROM centos:7.4

MAINTAINER ALEX-DUAN 123456@qq.com

LABEL naem="centos base image" \
      build-date="2022-02-28"

RUN yum -y install httpd

CMD  ["httpd","-D","FOREGROUND"]

保存

[root@Docker1 ~]# docker build -t httpd:v1 .                  
Sending build context to Docker daemon  204.8MB
Step 1/5 : FROM centos:7.4
 ---> 3253d84c6425
Step 2/5 : MAINTAINER ALEX-DUAN 123456@qq.com
 --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值