docker run和exec有什么区别

docker rundocker exec 都是 Docker 中用来与容器交互的命令,但它们的用途和行为有很大的不同。下面我会详细解释它们之间的区别。

1. docker run

docker run 命令用于 创建并启动一个新的容器,并且可以运行一个命令或指定一个程序。每次使用 docker run 时,都会从镜像创建一个新的容器实例。

用法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
特点:
  • 创建并启动容器docker run 会启动一个新的容器实例,基于指定的镜像。
  • 运行一个命令:你可以指定一个命令来在容器中运行(如果没有指定命令,则会运行镜像的默认命令,通常是镜像中定义的 ENTRYPOINTCMD)。
  • 可以传递参数:可以为容器指定参数(如挂载卷、设置环境变量、端口映射等)。
  • 容器生命周期:运行完指定的命令后,容器会退出,除非你通过某些方式让容器在后台运行(如使用 -d 参数)。
示例:
  1. 启动一个 Ubuntu 容器,并在容器内运行 Bash shell:

    docker run -it ubuntu bash
    
  2. 启动一个容器并运行一个后台应用(如 Nginx):

    docker run -d -p 80:80 nginx
    
  3. 启动一个容器并挂载一个卷:

    docker run -v /host/path:/container/path ubuntu
    

2. docker exec

docker exec 命令用于 在正在运行的容器中执行一个命令。这不会创建新的容器,而是作用于已启动的容器。

用法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
特点:
  • 在现有容器中执行命令docker exec 允许你在一个已经在运行的容器中执行新的命令。
  • 不会重新创建容器:你可以多次在同一个容器内执行不同的命令。
  • 交互式执行:通常使用 -it 选项来执行交互式命令(如进入容器的 shell)。
  • 容器保持运行:使用 docker exec 不会影响容器的运行状态,容器会继续运行并执行其原本的任务。
示例:
  1. 进入一个运行中的容器,启动一个交互式 Bash shell:

    docker exec -it <container_id_or_name> bash
    
  2. 在运行中的容器内执行一个简单的命令:

    docker exec <container_id_or_name> ls /usr
    
  3. 在容器内运行一个后台进程:

    docker exec -d <container_id_or_name> some_command
    

3. 主要区别

特性docker rundocker exec
容器生命周期每次运行时都会创建一个新的容器在已有的容器中执行命令,不会创建新容器
用途启动一个新的容器并运行命令/程序在已运行的容器内执行命令
交互性可以使用 -it 选项进行交互式运行容器使用 -it 选项可以交互式进入容器,但容器已在运行
容器状态容器在命令执行完成后会退出(除非使用后台模式)容器会保持运行,命令执行完后容器继续运行
创建容器会创建一个新的容器并启动不会创建新容器,只对现有容器操作
适用场景适用于启动应用、服务、进程或临时任务适用于调试、管理或监控正在运行的容器

4. 何时使用 docker rundocker exec

  • 使用 docker run

    • 当你需要从一个镜像启动一个新的容器,并运行某个命令时。
    • 如果容器没有运行,你需要使用 docker run 来创建并启动容器。
    • 启动一个新的服务或应用。
  • 使用 docker exec

    • 当容器已经在运行时,你需要进入容器进行调试、查看日志、执行一些命令或修改容器内的配置。
    • 在一个已经启动的容器中进行实时操作,而不影响容器的生命周期。

总结

  • docker run 用来创建和启动一个新的容器,并执行指定的命令。
  • docker exec 用来在已经运行的容器内执行命令,可以多次对一个容器执行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蘋天纬地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值