docker构建镜像文件

一.docker参数表格

|------------|---------------------------------|
| FROM | 指定基础镜像(Dockerfile 首行必选) |
| COPY | 复制本地文件 / 目录到容器(仅本地文件,不解压) |
| ADD | 复制文件(支持压缩包自动解压、URL 下载) |
| RUN | 构建镜像时执行命令(分层构建,建议合并指令) |
| ENV | 设置容器环境变量(构建 / 运行时生效) |
| EXPOSE | 声明容器暴露的端口(仅文档说明,需配合-p映射) |
| VOLUME | 声明数据卷(指定容器持久化目录) |
| WORKDIR | 设置容器工作目录(后续指令基于此路径) |
| CMD | 容器启动时执行的命令(可被docker run后参数覆盖) |
| ENTRYPOINT | 容器启动入口命令(不可覆盖,搭配 CMD 传参) |

建立构建目录

cpp 复制代码
[root@docker1 ~]# mkdir docker
[root@docker1 ~]# cd docker
e

编写构建规则文件

cpp 复制代码
[root@docker1 docker]# vim Dockerfil

FROM  busybox:latest   #基于最新版 busybox 镜像来构建新镜像
LABEL Creater=xu       #给这个镜像打上一个标签,说明创建者是 xu
COPY xurui /root       #将宿主机(构建上下文)中的文件 / 目录复制到容器内

#FROM

cpp 复制代码
FROM busybox:latest

#COPY

cpp 复制代码
[root@docker1 docker]# echo xurui > xurui
[root@docker1 docker]# cat xurui
xurui

#LABEL

cpp 复制代码
 LABEL creater=xu

构建命令

cpp 复制代码
[root@docker1 docker]# docker build -t xurui:v1 .
[+] Building 10.5s (7/7) FINISHED                                                    docker:default
 => [internal] load build definition from Dockerfile                                           0.0s
 => => transferring dockerfile: 152B                                                           0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                             10.3s
 => [internal] load .dockerignore                                                              0.0s
 => => transferring context: 2B                                                                0.0s
 => [internal] load build context                                                              0.0s
 => => transferring context: 98B                                                               0.0s
 => [1/2] FROM     //这里注意from  docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66  0.0s
 => => resolve docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66  0.0s
 => [2/2] COPY xurui /root    //这里注意copy                                                                    0.0s
 => exporting to image                                                                         0.1s
 => => exporting layers                                                                        0.0s
 => => exporting manifest sha256:6707f769a477264b76eab883c61010567642270baf30d91bf10bf78a466e  0.0s
 => => exporting config sha256:91684f258507156d94ffbcad7392562e63c03ff5180be0f6c692dbfb51d9d3  0.0s
 => => exporting attestation manifest sha256:e66906a082da033f8eb06112ab797e35ee317476cf6e7fe6  0.0s
 => => exporting manifest list sha256:dfaf1890cf682829e7e1351f74393f602d66c077f584f5cfc796b4d  0.0s
 => => naming to docker.io/library/xurui:v1                                                    0.0s
 => => unpacking to docker.io/library/xurui:v1            

#ADD

注意add和copy的区别就是前者能解压缩,后者不行

cpp 复制代码
[root@docker1 docker]# tar zcf bin.tar.gz /bin
tar: Removing leading `/' from member names

#编写文件
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL Creater=xu
COPY bin.tar.gz /root
ADD bin.tar.gz /mnt

#构建镜像
[root@docker1 docker]# docker build -t xu:v2 .
 
#测试
[root@docker1 docker]# docker run -it --name test --rm xu:v2
/ # ls /root/   #copy底下的/root命令不能解压缩该文件
bin.tar.gz
/ # ls /mnt/    #add底下的/mnt命令能解压缩该文件
bin
/ # exit

#ENV

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL Creater=xu
ENV NAME=xurui
RUN ["/bin/sh","-c", "touch /root/$NAME" ]  调用 /bin/sh 执行 touch /root/$NAME 命令,利用环境变量 $NAME 自动替换为 xurui,最终在 /root 目录下创建一个名为xurui 的空文件

#构建镜像
[root@docker1 docker]# docker build -t xu:v3 .

#测试
[root@docker1 docker]# docker run -it --name test --rm xu:v3
/ # ls /root/
xurui

#EXPOSE

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL creater=xu
EXPOSE 8080

[root@docker1 docker]# docker build -t xu:v4 .

[root@docker1 docker]# docker history xu:v4
IMAGE          CREATED         CREATED BY                          SIZE      COMMENT
c6872b2ccb25   18 months ago   EXPOSE [8080/tcp] #暴露其8080端口    0B        buildkit.dockerfile.v0
<missing>      18 months ago   LABEL creater=xu                    0B        buildkit.dockerfile.v0
<missing>      18 months ago   BusyBox 1.37.0 (glibc), Debian 13   4.49MB

#VOLUEM

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL creater=xu
VOLUME "/mnt"

构建镜像
[root@docker1 docker]# docker build -t xu:v5 .


测试
[root@docker1 docker]# docker run  -it --name test --rm xu:v5
在新建一个新的窗口执行以下命令
[root@docker1 ~]# docker inspect test | grep -i mounts -A10
        "Mounts": [
            {
                "Type": "volume",
                "Name": "acfc6547891db3b8bc72b0851790c7ade019b0c0e2e59d957537f6895def9c79",
                "Source": "/var/lib/docker/volumes/acfc6547891db3b8bc72b0851790c7ade019b0c0e2e59d957537f6895def9c79/_data",
                "Destination": "/mnt",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }

#WORKDIR

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL Creater=xu
WORKDIR "/mnt"

[root@docker1 docker]# docker build -t xu:v6 .

[root@docker1 docker]# docker run -it --name test --rm xu:v6
/mnt #

#CMD

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL creater=xu
CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
解析:

/bin/sh:调用 shell 解释器。
-c:告诉 shell 从后续字符串中读取并执行命令。
/bin/echo $NAME:执行 echo 命令,输出环境变量 $NAME 的值。

[root@docker1 docker]# docker build -t xu:v7 .

[root@docker1 docker]# docker run -it --name test --rm xu:v7 echo haha
haha

#ENTRYPOINT

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM busybox:latest
LABEL creater=xu
ENV NAME=xu
ENTRYPOINT ["echo", "$NAME"]

[root@docker1 docker]# docker build -t xu:v8 .

[root@docker1 docker]# docker run -it  --name test --rm xu:v8

#数据不可覆盖
[root@docker1 docker]# docker run -it  --name test --rm xu:v8 echo haha
$NAME echo haha
[root@docker1 docker]# docker run -it  --name test --rm xu:v8 echo test
$NAME echo test
相关推荐
yingzicat2 小时前
局域网内建立NTP服务器
运维·服务器
小句2 小时前
Nginx 配置完整指南
运维·nginx
m0_726965982 小时前
Docker使用
运维·docker·容器
LeocenaY2 小时前
Linux 内核 I/O栈 总结
linux·运维·服务器
kishu_iOS&AI2 小时前
Git SSH + SourceTree篇
运维·git·ssh
学不完的2 小时前
Zrlog面试问答及问题解决方案
linux·运维·nginx·unity·游戏引擎
小邋遢2.02 小时前
Centos stream 9 安装后root不能远程登录问题
linux·运维·centos
改一下配置文件2 小时前
OpenClaw Docker部署踩坑全记录(OpenClaw v2026.3.23)
docker·openai
@土豆2 小时前
K8s 环境部署夜莺监控(Nightingale)平台(核心告警管理版)
elasticsearch·容器·kubernetes