【云原生丶Docker】DockerFile完全指南

DockerFile构建过程

DockerFile 是Docker的一个配置文件,本质上来说它只是一个文本文件,它是用来构建Docker镜像的。DockerFile配置文件中包含了一系列的指令和配置信息,用于描述如何构建镜像以及如何运行容器。通过编写 Dockerfile,我们可以将构建 Docker 镜像的过程自动化,实现应用程序的快速部署和迭代。

在这里插入图片描述

⭐️ 一个简单的DockerFile文件示例:
 

这个DockerFile文件的释义为:该镜像会在 centos7.2-python3.6.8:latest 基础镜像上安装 nginx,并设置语言环境为 zh_CN.UTF-8。在容器启动后,会自动执行 sh /home/export/App/bin/start.sh 命令启动应用,并通过 sleep 9999999d 命令使容器保持运行状态。

此外,该镜像还声明需要监听的端口为 80 和 8080,供外部访问使用。

# 1.需要使用的基础镜像
FROM centos7.2-python3.6.8:latest

# 2.设置语言
ENV LANG zh_CN.UTF-8

# 4.安装nginx镜像
RUN yum -y install nginx

# 5.应用镜像开放端口,本应用使用了nginx做反向代理,所以只需要开放80端口即可
EXPOSE 80

# 6.应用镜像部署完成后会执行如下命令启动应用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d

⭐️ 构建镜像

DockerFile文件准备完毕后,就可以通过 docker build 命令来构建镜像了。

docker build -f Dockerfile .

在这里插入图片描述

这里有几点注意事项:

  1. docker build 默认会在当前目录下寻找名为 Dockerfile的文件,我们也可以通过 .f 参数来指定Dockerfile的文件路径和名称。

    docker build -f <Dockerfile path/name> <build context>
    
  2. docker build 命令最后有一个 . 表示的镜像构建上下文 Context 的路径(文件路径),Context的概念不难理解,在Docker的基本架构一文中我们知道Docker 是典型的C/S架构模式,那docker build命令就是把上下文所在路径下的内容打包,并传递给Docker 引擎,Docker 引擎拿到上下文包后,就能够获得构建镜像所需要的文件。

  3. 排除不必要的文件,加快构建速度。在上下文目录里再建立 .dockerignore 文件,排除那些不需要的文件。

DockerFile 的常用指令

在这里插入图片描述

⭐️ FROM

FROM 指令用于指定一个基础镜像,它就像“地基” 一样,是DockerFile文件的基础,所有的DockerFile文件都由FROM指令开始,那Dockerfile其实就是在基础镜像的基础上进行定制的。

在实际使用中 FROM 指令通常是指定centos、python/java等基础环境镜像。

# 需要使用的基础镜像
FROM centos7.2-python3.6.8:latest

⭐️ ENV

ENV 指令用于设置环境变量,它可以在构建过程中设置容器中的环境变量,这些环境变量可以在容器启动时使用。

语法格式为:

ENV <key> <value>
ENV <key>=<value> 

<key> 表示环境变量的名称,<value> 表示环境变量的值。多个 ENV 指令可以连续使用,也可以在同一条指令中使用空格或等号分隔多个环境变量。

在 Dockerfile 中使用 ENV 指令可以帮助我们在构建过程中设置一些常用的环境变量,例如 PATH、LANG 等。同时,在容器启动时,我们可以通过 $<key> 的方式来获取环境变量的值。

# 设置语言
ENV LANG zh_CN.UTF-8

⭐️ RUN

RUN 指令用于在容器中执行Shell命令或脚本,比如更新系统、安装应用、下载文件等等。

语法格式有如下2种

RUN <command>
RUN ["executable", "param1", "param2"]

<command> 表示要执行的命令或脚本,它可以是 shell 命令或任何可执行文件;["executable", "param1", "param2"] 表示一个数组,数组的第一个元素为要执行的可执行文件,后面的元素为参数。

例如:

RUN yum -y install nginx
RUN ["/bin/bash", "-c", "echo 'Hello, Docker!'"]

第一条命令将在容器中安装 nginx 软件包;第二条命令将在容器中执行 /bin/bash -c “echo ‘Hello, Docker!’” 命令,输出 “Hello, Docker!”。

RUN 指令的一些注意事项

  1. 容器中的命令执行顺序是从上到下,建议将常用的命令放在前面,以减少构建时间。

  2. 如果需要在容器中执行多个命令或脚本,可以使用 \ 符号将它们连接在一起,以便于阅读和维护。命令之间用 && 来连接。

    FROM centos7.2-python3.6.8:latest
    
    RUN apt-get update \
        && apt-get install -y \
           git \
           curl \
           wget
    
  3. 每一条 RUN 指令都会在新的一层镜像中执行,因此我们应该尽可能将多个命令合并为一条 RUN 指令,以减少镜像的层数。

    例如,将上面的两条命令合并为一条:

    RUN yum -y install nginx && /bin/bash -c "echo 'Hello, Docker!'"
    

⭐️ EXPOSE

EXPOSE 指令用于声明容器需要监听的网络端口。在 Dockerfile 中使用 EXPOSE 指令可以帮助我们记录容器需要监听的端口信息,并提供给其他开发人员或运维人员使用。同时,它也可以帮助我们规范化容器的端口定义,以便于管理和维护。

语法格式为:

EXPOSE <port> [<port>/<protocol>...]

<port> 表示需要监听的端口号,<protocol> 表示使用的协议,可以是 tcp 或 udp。

例如:

# 应用镜像开放端口,本应用使用了nginx做反向代理,所以只需要开放80端口即可
EXPOSE 80/tcp

这个命令将声明容器需要监听的端口分别为 80 ,使用的协议为 tcp 。

但是,EXPOSE 指令并不会实际将容器的端口暴露给主机或外部网络,如果需要将容器的端口映射到主机上,需要在运行容器时使用 -p 参数

⭐️ ENTRYPOINT

ENTRYPOINT 指令用于配置容器的入口点,即容器启动后需要执行的命令或脚本。我们通常会应用其来启动WEB应用。

语法格式为:

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

例如:通过 ENTRYPOINT 指定应用镜像部署完成后会执行命令启动应用。

# 应用镜像部署完成后会执行如下命令启动应用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d

🎉 如果喜欢这篇文章,点赞👍 收藏关注 ✅ 哦,创作不易,感谢!😀

请添加图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涛声依旧叭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值