容器学习 之 dockerfile 命令(七)

本文深入解析Dockerfile中常用命令,如FROM、MAINTAINER、COPY、ADD、ENV、EXPOSE、VOLUME、WORKDIR、RUN、CMD及ENTRYPOINT的用法与区别,通过实例演示如何构建Docker镜像。

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

dockerfile中常用的命令

  • FROM
    指定 base 镜像。
  • MAINTAINER
    设置镜像的作者,可以是任意字符串。
    COPY将文件从 build context 复制到镜像。
  • COPY 支持两种形式:
//注意:src 只能指定 build context 中的文件或目录。
COPY src dest
COPY ["src", "dest"]
  • ADD
    与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
  • ENV
    设置环境变量,环境变量可被后面的指令使用。例如:
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
  • EXPOSE
    指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
  • VOLUME
    将文件或目录声明为 volume。我们会在容器存储部分详细讨论。
  • WORKDIR
    为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
  • RUN
    在容器中运行指定的命令。
  • CMD
    容器启动时运行指定的命令。
    Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。
  • ENTRYPOINT
    设置容器启动时运行的命令。
    Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

下面我们来看一个较为全面的 Dockerfile:

root@ubuntu:/home/yj/docker/test1# ls
bunch.tar.gz  dockerfile  tmpfile2
root@ubuntu:/home/yj/docker/test1# vim dockerfile 

# my dockerfile
FROM centos
MAINTAINER yangjin@qq.com
WORKDIR /testdir
RUN touch tmpfile1
COPY ["tmpfile2","."]
ADD ["bunch.tar.gz","."]
ENV WELCOME "you are in mu container,welcome!"
  • 让centos镜像作为base镜像
  • 设置镜像的作者
  • 设置工作目录
  • 把build context 中的tmpfile2移到镜像当前目录
  • 把build context的bunch.tar.gz解压并移到当前目录
  • 设置WELCOME环境变量

结果展示:

[root@8af6a35aa71e testdir]# cd /testdir/
[root@8af6a35aa71e testdir]# ls
bunch  tmpfile1  tmpfile2

Shell 和 Exec 格式

CMD echo "Hello world"  
CMD ["/bin/echo", "Hello world"]  

CMD 和 ENTRYPOINT 推荐使用 Exec 格式,因为指令可读性更强,更容易理解。RUN 则两种格式都可以。

RUN,CMD,ENTRYPOITN的使用方法

  1. 使用 RUN 指令安装应用和软件包,构建镜像。
  2. 如果 Docker 镜像的用途是运行应用程序或服务,比如运行一个 MySQL,应该优先使用 Exec 格式的 ENTRYPOINT 指令。
  3. CMD 可为 ENTRYPOINT提供额外的默认参数,同时可利用 docker run 命令行替换默认参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值