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
相关推荐
资深电气设计2 小时前
TPO卷材研发常见问题:强度与柔韧性为何难兼顾?埃克森美孚威达美™6102的技术参考
运维·物联网·创业创新·业界资讯
优化Henry2 小时前
光路异常告警排查实战:LTE室分与5G小区两个案例解析
运维·网络·学习·5g·tdd
郭老二2 小时前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
Apipi*2 小时前
30天速通Linux 第九章Linux网络编程
linux·运维·网络
天远数科2 小时前
零信任架构实战:基于天远风控经营异常预警构建自动化电子签章前置合规网关
运维·人工智能·架构·自动化
Linux-lucky3 小时前
43-Linux学习之旅之Shell 脚本(二)
linux·运维·学习·ubuntu·dash
YH行业报告分析4 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
Wang's Blog5 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
ajassi20005 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎5 小时前
linux 进程信号(下)
linux·运维·服务器