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编辑器等),可以在容器中运行精简的应用程序。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dockerfile 是一种用于定义 Docker 镜像的文件格式,其中包含了构建镜像所需的所有指令和配置信息。使用 Dockerfile 可以轻松地构建、配置和部署 Docker 镜像,同时也可以保证镜像的可重复性和可移植性。 以下是使用 Dockerfile 的一般步骤: 1. 创建一个新的目录并进入该目录。 2. 创建一个名为 Dockerfile 的文件。 3. 在 Dockerfile 中编写指令和配置信息,包括基础镜像、软件包安装、文件复制、环境变量设置等。 4. 使用 docker build 命令构建镜像,其中包括指定 Dockerfile 的路径和镜像的名称和版本号。 5. 镜像构建完成后,可以使用 docker run 命令运行该镜像。 6. 如果需要分享镜像,可以将其推送到 Docker Hub 或其他镜像仓库中。 以下是一个简单的 Dockerfile 示例: ``` # 指定基础镜像 FROM ubuntu:latest # 更新软件包并安装 Apache RUN apt-get update && apt-get install -y apache2 # 复制本地文件到镜像中 COPY index.html /var/www/html/ # 设置环境变量 ENV PORT 80 # 暴露端口 EXPOSE 80 # 启动 Apache 服务 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] ``` 在上述 Dockerfile 中,首先指定了基础镜像为最新版本的 Ubuntu,然后更新软件包并安装 Apache。接着复制本地的 index.html 文件到镜像中,并设置环境变量和暴露端口。最后使用 CMD 指令启动 Apache 服务。 使用 docker build 命令构建镜像: ``` docker build -t my-apache-image:v1 . ``` 其中 -t 参数用于指定镜像的名称和版本号,. 表示 Dockerfile 文件在当前目录下。 使用 docker run 命令运行镜像: ``` docker run -d -p 80:80 my-apache-image:v1 ``` 其中 -d 参数用于后台运行容器,-p 参数用于映射主机端口和容器端口,my-apache-image:v1 表示运行的镜像名称和版本号。 使用 docker push 命令将镜像推送到 Docker Hub 中: ``` docker push my-apache-image:v1 ``` 其中 my-apache-image:v1 表示需要推送的镜像名称和版本号。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值