Dockerfile的用法

引言

在https://huggingface.co/搭建环境时需要用到自己写Dockerfile进行环境的搭建,所以对Dockerfile的写法进行一些简单的学习。

介绍

首先了解一下构建Docekr镜像的四种方式:

  1. 从dockerfile构建:使用 docker build 命令从dockerfile构建镜像
  2. 从容器构建:使用 docker commit 命令从正在运行的容器构建镜像
  3. 从其他镜像派生:使用 docker run 命令从其他镜像派生新镜像
  4. 从镜像仓库拉取:使用 docker pull 命令从docker镜像仓库拉取镜像

Dockerfile是一个文本文件,用于自动构建Docker容器映像。它包含了要在Docker容器中运行的命令和构建参数,以及在容器中运行的软件包,文件和依赖项。我们可以使用如下指令构建镜像

docker build -t [image_name] [dockerfile_path] 

例如: docker build -t my_nginx ./nginx

常用命令

在这里插入图片描述
首先介绍一下最常用的6个命令:

  1. FROM:指定基础镜像,基础镜像是构建镜像的基础,容器的运行环境必须从基础镜像开始构建。常用的基础镜像文章下面已经罗列出来。冒号后为镜像的版本号,例如基于python3基础镜像。

    FROM python:3 
  2. WORKDIR:设置容器内部的工作目录,后续的RUN指令会在此工作目录中执行。如果没有此目录,会自动创建目录。例如:

    WORKDIR /app 
  3. RUN:在容器中执行命令,可以使用shell语句或exec格式,用于安装软件包、更新系统等操作。为了提高构建效率,多个RUN 指令最好合成一行,因为一行RUN 指令构建一层镜像,每一层都会在上一层的基础上构建,构建镜像的每一层都会缓存,以实现构建镜像的加速。例如:

    RUN apt-get update && apt-get install -y \ build-essential \ && apt-get clean 
  4. COPY:将本地文件拷贝到容器中,不支持压缩文件。例如将requirements.txt拷贝到容器app文件夹下:

    COPY requirements.txt . 
  5. ADD:和COPY类似,将文件拷贝到容器中,但是源路径支持URL且可以拷贝压缩文件,docker会自动解压缩。例如:

    ADD http://www.example.com/file.txt /opt/ 
  6. CMD:容器启动时执行的命令,可以使用shell语句或exec格式,可以多次使用,最后一行的CMD会覆盖之前的CMD指令。可以使用一下两种格式:

    CMD ["python", "main.py"] CMD python main.py 

除此之外还有:

  1. EXPOSE:暴露容器内部端口,让外部可以访问容器中的服务。可以在容器创建时配置暴露的端口和主机端口映射。

    EXPOSE 80 

​ 运行容器时使用 -p 参数暴露端口到宿主机上即可。

$ docker run -d -p <host port>:<container port> --name <container name> <image name>

  1. VOLUME:挂载数据卷,用于数据持久化。

    VOLUME /host/directory:/container/directory 
  2. ENV:用于设置容器内部的环境变量,在RUN指令中可以使用。例如,可以使用ENV指令设置JAVA_HOME环境变量:

    ENV JAVA_HOME /usr/java/default 
  3. ARG: 用来定义镜像的构建参数,它可以在Dockerfile中定义一个参数,在运行docker build时可以使用–build-arg参数替换该参数。例如

    ARG user=root 

    这样,在docker build时,可以通过–build-arg user=test改变user的值,如果没有提供–build-arg参数,那么user的值就是root。

一般很少用到的一些指令:

  1. LABEL:可以为镜像添加元数据。它可以用来添加一些关于镜像的信息,比如作者,版本,描述等等。

    LABEL <key>=<value> 
  2. ONBUILD:用于在构建镜像时触发构建另一个镜像。它可以用来构建一个复杂的镜像,而不是每次在构建镜像时都要执行复杂的指令。例如,在构建一个基础镜像时,可以使用ONBUILD指令触发构建另一个镜像,而不是每次都要手动构建。INSTRUCTION可以是任何Dockerfile指令,例如RUN、ADD、COPY等。

    ONBUILD [INSTRUCTION] 

当然还有其他命令,但本文就先不介绍了。

基础镜像

  1. CentOS:一个基于Linux的发行版,拥有丰富的软件资源,可以满足企业级的服务器需求。
  2. Ubuntu:一个Linux发行版,拥有极大的社区支持,可以提供友好、安全、稳定的操作环境。
  3. Debian:拥有超过29000个软件包的Linux发行版,可以满足大多数应用场景。
  4. OpenSUSE:OpenSUSE是一个免费的Linux发行版,拥有完善的安装和管理工具,可以快速安装和配置系统。
  5. Nginx:高性能的HTTP服务器,可以处理大量的并发请求,并在不同平台上运行。
  6. MySQL:关系型数据库管理系统,可以存储和管理大量的数据,提供丰富的SQL功能。
  7. Redis:高性能的Key-Value存储系统,支持多种数据结构,可以满足各种数据存储需求。
  8. MongoDB:面向文档的NoSQL数据库,可以提供高性能的读写操作,支持大规模的数据存储。
  9. Apache:开源的Web服务器,支持多种协议,可以满足各种Web应用的需求。
  10. Node.js:基于JavaScript的服务器端开发平台,可以快速构建高性能的Web应用。
  11. Java:J面向对象的编程语言,可以编写可移植的跨平台应用程序。
  12. WordPress:开源的内容管理系统,可以帮助用户快速搭建和管理网站。
  13. PHP:脚本语言,可以让开发者快速构建动态的Web应用。
  14. PostgreSQL:开源的对象关系型数据库管理系统,能够处理复杂的数据存储需求。
  15. Elasticsearch:可扩展的开源搜索引擎,可以快速的处理大量的数据,并能够提供实时的搜索结果。
  16. RabbitMQ:消息队列系统,可以更快更安全的进行消息传递。
  17. Memcached:高性能的分布式内存对象缓存系统,用来加快动态Web应用程序的速度。
  18. Grafana:开源的监控和仪表板软件,可以帮助用户可视化和分析结构化数据。
  19. Prometheus:开源的系统监控和警报工具,可以收集和存储各种指标数据,以便后续使用。
  20. Jenkins:开源的自动化软件持续集成和部署工具,可以帮助用户自动化构建和部署软件。

除此之外,还有一个轻量化的Linux发行版Alpine,体积非常小,只有5MB,它包含了最小的工具集(curl、wget、bash、apk、tar、gzip、grep、nano编辑器等),可以在容器中运行精简的应用程序。

原文链接:https://blog.csdn.net/weixin_41099712/article/details/129712146?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168994567416800192286954%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168994567416800192286954&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-1-129712146-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享