Dockerfile

目录

一、镜像构建步骤

二、dockerfile简介

三、DockerFile构建过程

3.1基础知识:

3.2流程:

3.3Dockerfile指令

四、实战测试

4.1、编写DockerFile文件

4.2、构建

4.3、运行

4.4、列出镜像地的变更历史


一、镜像构建步骤

1、编写DockerFile文件

2、docker build 构建镜像

3、docker run

二、dockerfile简介

Dockerfile是用来构建Docker镜像的构建文件,是由一系列的命令和参数构成的脚本。
Dockerhttps://hub-stage.docker.com/_/centos

说明:

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,*Dockerfile是软件的原材料*Docker镜像是软件的交付品*Docker容器则可以认为是软件的运行态。Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者不可,合力充当Docker体系的基石。

DockerFile:需要定义一个DockerFile,DockerFile定义了进程需要的一切东西。DockerFile涉及的内容 包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进 程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace的权 限控制)等等。

Docker镜像:在DockerFile 定义了一个文件之后,Docker build 时会产生一个Docker镜像,当运行 Docker 镜像时,会真正开始提供服务;

Docker容器:容器是直接提供服务的。

三、DockerFile构建过程

3.1基础知识:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、# 表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

3.2流程:

1、docker从基础镜像运行一个容器

2、执行一条指令并对容器做出修改

3、执行类似 docker commit 的操作提交一个新的镜像层

4、Docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令直到所有指令都执行完成

3.3Dockerfile指令

关键字:

补充:CMD 和 ENTRYPOINT 的区别

两个命令都是指定一个容器启动时要运行的命令

CMD:Dockerfile 中可以有多个CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数 替换!

ENTRYPOINT: docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合

四、实战测试

自定义一个centos

目的:使自己的镜像具备条件有登录后的默认路径为/usr/local

4.1、编写DockerFile文件

复制代码
[root@zhoujunru home]# mkdir dockerfile-test
[root@zhoujunru home]# vi mydockerfile-centos
[root@zhoujunru home]# cat mydockerfile-centos
FROM centos
MAINTAINER zhoujunru<3271999416@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH


EXPOSE 80

CMD /bin/bash

4.2、构建

docker build -f dockerfile地址 -t 新镜像名字:TAG .

. 表示当前目录

复制代码
[root@zhoujunru home]#  docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  2.56 kB
Step 1/6 : FROM centos
 ---> 5d0da3dc9764
Step 2/6 : MAINTAINER zhoujunru<3271999416@qq.com>
 ---> Using cache
 ---> 227572c337d6
Step 3/6 : ENV MYPATH /usr/local
 ---> Using cache
 ---> c0e6f2f9628f
Step 4/6 : WORKDIR $MYPATH
 ---> Using cache
 ---> 5a618332615f
Step 5/6 : EXPOSE 80
 ---> Running in 98dd7b875f44
 ---> d17549a1f692
Removing intermediate container 98dd7b875f44
Step 6/6 : CMD /bin/bash
 ---> Running in e598a9e14617
 ---> 1419d5744180
Removing intermediate container e598a9e14617
Successfully built 1419d5744180

4.3、运行

docker run -it 新镜像名字:TAG

复制代码
[root@zhoujunru home]# docker run -it mycentos:0.1
[root@5e53489ddd40 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@5e53489ddd40 local]# pwd
/usr/local

可以看到,自己构建的镜像登录后默认的路径为/usr/local

4.4、列出镜像地的变更历史

docker history 镜像名

复制代码
[root@zhoujunru home]# docker history mycentos:0.1
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
1419d5744180        About a minute ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/b...   0 B                 
d17549a1f692        About a minute ago   /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
5a618332615f        About a minute ago   /bin/sh -c #(nop) WORKDIR /usr/local            0 B                 
c0e6f2f9628f        About a minute ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0 B                 
227572c337d6        About a minute ago   /bin/sh -c #(nop)  MAINTAINER zhoujunru<32...   0 B                 
5d0da3dc9764        2 years ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           2 years ago          /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 
<missing>           2 years ago          /bin/sh -c #(nop) ADD file:805cb5e15fb6e0b...   231 MB              
相关推荐
万里侯42 分钟前
GitOps 2026年演进趋势:从配置管理到环境即代码的范式转移及Pull vs Push模型的再思考
微服务·容器·k8s
acd120091 小时前
一次线上OOM排查实录:从jmap到代码重构,我踩过的坑全在这了
容器·重构·kubernetes
易番番ERP2 小时前
以销定采模式下,ERP如何帮助贸易企业管住订单真实利润
大数据·低代码·微服务·云原生·成本核算·易番番erp·以销定采
吕海洋2 小时前
目前可用的docker源2026.08
运维·docker·容器
人间凡尔赛4 小时前
2026 后端架构三驾马车:Wasm 容器上 K8s、存算分离与 AI 原生
后端·云原生·架构
gsls2008085 小时前
Penpot Docker 部署与 MCP 服务配置文档
运维·docker·容器·原型·penpot
天蓝不会忘记025 小时前
k8s集群部署的方法原理
云原生·容器·kubernetes
xrlfreedom6 小时前
大厂 MCP 面试实录:本地 Server 远程化改造中的技术选型与落地实践
docker·json schema·mcp
红球yyds6 小时前
用anisble搭建k8s集群及原理
云原生·容器·kubernetes
艾伦_耶格宇9 小时前
【DOCKER容器实战】-2MySQL
运维·docker·容器