docker学习(十四、Dockerfile基础)

发布时间:2023年12月23日


Dockerfile是独立于docker的一个配置文件。
如果你是前端开发,那他就类似你的package.json;
如果你是java开发,那他就类似你的pom.xml/build.gradle;
如果你是python开发,那他就类似你的requriments.txt。

Dockerfile 的基础知识

Dockerfile 是一种文本文件,用于定义和配置 Docker 镜像。通过编写 Dockerfile,我们可以自动化地构建镜像,并将应用程序及其依赖打包成一个可移植的容器。

Dockerfile 使用一系列的指令来描述镜像的构建过程,这些指令被称为 Dockerfile 命令。下面是一些常用的 Dockerfile 命令:

  • FROM:指定基础镜像,用于构建新的镜像,第一行基本都是FROM
 # 使用官方 Tomcat 镜像作为基础镜像
FROM tomcat:9.0.50-jdk11
  • MAINTAINER:镜像维护者的名字和邮箱地址,不必要。

  • ENV:设置环境变量。

 # 使用官方 Tomcat 镜像作为基础镜像
FROM tomcat:9.0.50-jdk11

 # 设置环境变量,指定 Tomcat 的安装目录
ENV CATALINA_HOME /usr/local/tomcat
  • WORKDIR:设置工作目录。
 # 使用官方 Tomcat 镜像作为基础镜像
FROM tomcat:9.0.50-jdk11

 # 设置环境变量,指定 Tomcat 的安装目录
ENV CATALINA_HOME /usr/local/tomcat

 # 设置工作目录,切换到 webapps 目录下
WORKDIR $CATALINA_HOME/webapps
  • RUN:在镜像中执行命令。两种格式:shell、exec。构建时直接运行(docker build)

    • RUN <命令行命令> # <命令行命令>等同于,在终端操作的shell命令。
    • 例如:RUN apt-get update && apt-get install -y curl RUN [“可执行文件”,“参数1”,“参数2”],等同于exec
    • 例如:RUN [“./test.php”,“dev”,“offline”] 等同于RUN ./test.php dev offline
  • ADD:将主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包。

  • COPY:将文件从主机复制到镜像中。例如:COPY app.py /app/

  • VOLUME:容器卷。

  • EXPOSE:声明容器运行时要监听的端口。例如:EXPOSE 8080

  • CMD:指定容器启动时要执行的命令。支持shell、exec、参数列表格式。例如:

    • CMD <命令行命令>
    • CMD [“python”, “app.py”]
      CMD命令,会被docker run之后的命令替换。
    • 例如:docker run python /bin/bash。就类似与在Dockerfile中最后加了一行CMD [“/bin/bash”,“run”],把原来的CMD覆盖掉了
  • ENTRYPOINT:也是指定容器启动时要执行的命令。但是不会被docker run后面的指令覆盖,而且会将这些命令行作为参数传给ENTRYPOINT指令的程序。
    ENTRYPOINT可以和CMD一起用,一般CMD是作为参数提供给ENTRYPOINT

FROM nginx

ENTRYPOINT ["nginx","-c"]
CMD ["/etc/nginx/nginx.conf"]
# 等同于
# docker run nginx -c /etc/nginx/nginx.conf

这些只是 Dockerfile 中的一部分常用命令,更多的命令可以根据实际需求进行学习和使用。

Dockerfile 的书写规则

在编写 Dockerfile 时,有一些书写规则需要遵守:

  • 每个指令都应该以大写字母开头,并且按照顺序编写。
  • 使用 # 进行注释,可以提高代码的可读性。
  • 每条指令都会创建一个新的镜像层,因此应该合理使用指令来最小化镜像的大小。
  • 多条命令可以通过 \ 进行换行,使 Dockerfile 更易读。
  • 可以使用环境变量来增加灵活性,例如:ENV MY_VAR=my_value
  • 使用 .dockerignore 文件来排除不需要复制到镜像中的文件和目录。

Dockerfile 的作用

Dockerfile 的作用主要有以下几个方面:

  • 自动化构建:通过编写 Dockerfile,我们可以定义一系列的构建步骤,实现自动化构建过程。这样一来,无论是在开发、测试还是部署环境中,我们都可以快速、可靠地构建镜像。
  • 环境一致性:使用 Dockerfile 构建的镜像可以确保应用程序及其依赖在不同的环境中具有一致的运行结果。这对于团队协作、持续集成和部署等方面非常有益。
  • 可移植性:Dockerfile 定义了容器的构建过程,使得应用程序可以方便地在不同的主机上运行,而无需担心环境依赖和配置的问题。

Dockerfile 的注意事项

在编写 Dockerfile 时,还需要注意以下几点:

  • 使用官方基础镜像:尽量使用官方提供的基础镜像,这样可以确保镜像的稳定性和安全性。
  • 最小化镜像大小:避免在镜像中包含不必要的文件和依赖,以减小镜像的体积。
  • 分层构建:合理利用 Dockerfile 的分层构建特性,使得每个镜像层都具有明确的功能和目的,以便进行缓存和复用。
  • 安全性和漏洞修复:定期更新基础镜像,并保持镜像中的软件组件和库的最新状态,以弥补任何已知的漏洞。
  • 避免敏感信息泄露:确保不在 Dockerfile 中存储敏感信息,如密码、密钥等。
文章来源:https://blog.csdn.net/qq_35716085/article/details/135131649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。