Dockerfile简单练习

本文介绍了Dockerfile中的一些核心指令,如FROM用于设定基础镜像,RUN执行构建镜像时的命令,CMD和ENTRYPOINT指定容器启动的主进程,WORKDIR设置工作目录,ENV配置环境变量,USER指定期望的运行用户,VOLUME定义数据卷,ADD和COPY用于复制文件,LABEL添加元数据,ONBUILD设置触发器。理解这些指令有助于构建和管理Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile指令

想了解Dockerfile的指令可以查看官方提供的参考手册,下面我们为大家介绍一些常用的指令。

  1. FROM:设置基础镜像,必须是Dockerfile中的第一条指令。

    FROM <镜像名> [AS <别名>]
    

    FROM <镜像名>[:<标签>] [AS <别名>]
    
  2. RUN:指定构建镜像时要执行的命令。

    RUN <命令> [参数1], [参数2], ... 
    

    RUN ["可执行文件", "参数1", "参数2", ...]
    
  3. CMD:指定构建镜像后要执行的命令。

    CMD <命令> [参数1], [参数2], ...
    

    CMD ["可执行文件", "参数1", "参数2", ...]
    

    说明:Docker不同于虚拟机,容器本身就是一个进程,容器中的应用应该位于前台运行。CMD命令相当于就是用来指定容器主进程(创建容器后要在前台执行的程序)的,如果主进程结束了,容器也就停止运行了。所以在容器中启动Nginx不能使用service nginx start或是systemctl start nginx而是要通过CMD ["nginx", "-g", "daemon off;"]让它在前台运行。

  4. ENTRYPOINT:和CMD类似,也可以执行命令,但docker run命令行中指定的任何参数都会被当做参数再次传给ENTRYPOINT指令中的命令,这就使得我们可以构建一个镜像,它既可以运行一个默认的命令,也支持通过docker run命令行为该命令指定可覆盖的参数选项。

    ENTRYPOINT <命令> [参数1], [参数2], ...
    

    ENTRYPOINT ["可执行文件", "参数1", "参数2", ...]
    
  5. WORKDIR:在通过镜像创建新容器时,在容器内部创建一个工作目录,ENTRYPOINT和CMD指定的程序会在这个目录下执行。在使用docker run命令时可以通过-w参数来覆盖由WORKDIR指定的工作目录。例如:

    WORKDIR /opt/webapp
    
    docker run -w /usr/share/webapp ...
    
  6. ENV:在创建镜像时设置环境变量。在使用docker run命令时,可以通过-e参数来修改环境变量的设置。例如:

    ENV DEFAULT_PORT=8080
    
    docker run -e "DEFAULT_PORT=8000" ...
    
  7. USER:指定镜像会以什么用户身份去运行。例如:

    USER nginx
    
  8. VOLUME:在创建容器时添加一个数据卷的挂载点。通过数据卷操作可以实现容器间数据的共享和重用,对卷所作的修改可以马上生效而不需要重新启动容器,我们之前创建容器时使用--volume参数就是为了实现数据卷的映射操作。

    VOLUME ["/路径1", "/路径2/子路径2.1/", ...]
    
  9. ADD:将构建目录下的文件和文件夹复制到镜像中,如果是压缩文件和归档文件,ADD命令会对这些文件进行解压缩解归档的操作。

    ADD [--chown=<用户>:<用户组>] <源文件> <目标文件>
    
  10. COPY:非常类似于ADD,但不会主动对文件进行提取操作。

  11. LABEL:为Docker镜像添加一些元数据,在使用docker inspect命令时会看到这些元数据。

    LABEL version="1.0.0" location="Chengdu"
    
  12. ONBUILD:为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像,触发器将会被执行。例如:

    ONBUILD ADD . /app/src
    ONBUILD RUN cd /app/src && make
    
# 指定基础镜像
FROM python:3.7
# 指定镜像的维护者
MAINTAINER 用户名 "邮箱"
# 将指定文件添加到容器中指定的位置
ADD api/* /root/api/
# 设置工作目录
WORKDIR /root/api
# 执行命令(安装Flask项目的依赖项)
RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple/
# 容器启动时要执行的命令
ENTRYPOINT ["./start.sh"]
# 暴露端口
EXPOSE 8000

上面的Dockerfile文件。Dockerfile文件通过特殊的指令来指定基础镜像(FROM指令)、创建容器后需要指定的命令(RUN指令)以及需要暴露的端口(EXPOSE)等信息。我们稍后会专门为大家介绍这些Dockfile中的指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值