如果您在想如何 运行 Docker 映像 ,您并不孤单。无论是刚从 Docker Hub 拉取了一个映像,还是自己构建的,运行它都是让应用真正“活起来”的关键一步。
本教程是面向初学者的 docker run 命令及其进阶用法指南。您将学习:
Docker 映像与容器到底是什么。
如何用不同选项运行一个映像。
以及如何像专业人士一样停止、删除和排障容器。
结束时,您将自信地启动自己的容器,并清楚了解幕后发生了什么。
理解 Docker 映像与容器
在进入命令示例之前,我们先用简单的语言理解一下 Docker 映像与容器。
如果您已经熟悉这些术语,欢迎直接跳到下一节!
什么是 Docker 映像?
Docker 映像是应用的不可变蓝图。它定义了容器所需的一切:代码、库、环境和配置。有了映像,您可以启动一个容器,也可以启动一百个,每次都保持一致。
那么映像从哪里来?通过 Dockerfile 构建。Dockerfile 中定义使用哪个基础映像、安装哪些依赖,以及应用如何运行。
准备好 Dockerfile 后,运行 docker build 命令。该命令按照文件中的步骤,将其转化为一个可复用的映像。
什么是 Docker 容器?
Docker 容器是 Docker 映像的活动实例。它让您的应用在独立隔离的环境中运行,确保无论宿主系统如何,行为都一致。
它遵循“构建一次,随处运行”的理念,因此您无需每次手动搭建环境。
映像 vs 容器
下表将映像与容器并排进行比较:
Image
Container
An image is a standardized package that includes all the files, binaries, libraries, and configurations to run a container.
A runtime instance of an image.
An image is immutable. That means it cannot change until it is rebuilt.
The container is mutable. You can modify it while it’s running, install new packages, or change configuration files.
A Dockerfile (a set of instructions to build an image) creates an image.
An image creates a container.
Your computer stores image files.
A container runs in your memory.
如果您刚接触容器化,我们的Introduction to Docker 课程 将通过动手示例带您掌握核心概念。
docker run 命令
当您执行 docker run 命令时,就是在告诉 Docker 基于某个映像启动一个新容器。
简单说,您是在隔离环境中启动一个程序。这个程序可以是一个简单的 Web 应用,也可以是包含多个进程的完整服务。
基本语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS] - 额外标志,用于自定义容器的运行方式
IMAGE - Docker 映像名称
[COMMAND] -(可选)覆盖映像中的默认命令。
[ARG...]-(可选)参数。
常用标志与选项
-d:分离模式:在后台运行容器
-p:端口映射:要从浏览器访问服务(如 API 或 Web 应用),需要暴露端口。例如:-p 3000:3000 将您机器的 3000 端口映射到容器的 3000 端口。
--name:Docker 会给容器一个默认名称,您也可以用此标志自定义名称。
-v:用于将数据与容器本身分离存储,确保即使容器停止或删除,数据仍然存在。
--rm:当容器停止时自动删除它。
-e:用于传入数据库密码或 API 密钥,而无需将其硬编码在应用中。
交互式容器 vs 分离式容器
Docker 有两种运行方式:交互模式(-it)和分离模式(-d)。根据您的目标,每种模式都有适用场景。
-it:交互模式:如果您想通过终端直接在容器内工作,可以使用 -it 标志。它会让容器进入交互模式,您可以输入命令、查看输出并实时操作。
-i:保持标准输入打开,便于在容器内输入命令
-t:提供类似终端的界面
-d:分离模式:在后台运行容器,释放终端以执行其他任务。
随时掌握关键命令与最佳实践,请查看我们的Docker for Data Science 速查表 。
拉取并运行 Docker 映像
现在您已经了解了 docker run 的语法,本节将演示如何创建自定义映像并运行它们。
使用 Docker Hub 上的映像
Docker Hub 就像容器映像的在线库。您可以获取预构建映像,也可以上传自己的映像与他人共享。它支持公共和私有仓库,既能公开与社区分享映像,也能为内部团队实施访问控制。
运行自定义映像
要运行 Docker 映像,您需要先用 Dockerfile 构建它。然后,您可以在本地运行,或推送到 Docker Hub 进行共享。
那么首先我们来创建一个 Dockerfile。示例如下:
FROM python: 3.11- slim
WORKDIR /app
COPY requirements.txt .
RUN pip install - - no- cache- dir - r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python" , "app.py" ] 技术支持
上面的 Dockerfile 表示什么?
FROM python:3.11-slim:基于 Python 3.11 的精简版基础映像
WORKDIR /app:将 /app 设为容器内工作目录。
COPY requirements.txt . :将本机的依赖清单移动到容器的应用目录。
RUN pip install --no-cache-dir -r requirements.txt:安装 requirements.txt 中的依赖。
COPY . . :将当前工作目录的代码(应用、配置文件等)复制到容器的应用目录。
CMD ["python", "app.py"]:从该映像启动容器时运行 app.py。
步骤 1. 构建 Dockerfile
来看下构建此 Dockerfile 时会发生什么。
docker build -t my-python-app . 技术支持
注意:要使该命令生效,您需要先在系统中完成 Docker 的安装与配置;本指南 可帮助您完成。
当您执行构建命令时,幕后会发生以下情况:
Docker 读取 Dockerfile
从 Docker Hub 拉取 Python 基础映像
将工作目录设为 /app。
将 requirements.txt 复制到容器中。
使用 pip install 安装依赖。
将其余代码复制到 /app 中。
将最终映像打上 my-python-app 标签。
步骤 2:运行 Dockerfile
构建完成后,您可以用以下命令执行它:
docker run -p 5000 :5000 my-python-app技术支持
运行后会发生什么:
基于您的自定义映像 my-python-app 创建了一个新容器。
将您机器的 5000 端口映射到容器中的 5000 端口(-p 5000:5000)。
运行 CMD ["python", " app.py "] 并启动应用。
由于 -d 选项(分离模式),容器会在后台运行。
此时,您可以在浏览器访问 http://localhost:5000,您会看到类似下面的页面,这意味着应用已在运行:
如果您从事机器学习工作, 这份适用于 ML 与 AI 的优选 Docker 映像 可以加速您的环境搭建。
使用带配置的映像运行
对于某些应用,您可能需要在特定配置下运行映像。以下是两个常见示例。
持久化数据
容器临时存储数据。一旦删除,数据就会丢失。卷(volume)是一种 在容器外部存储数据 的方式,因此即使容器被移除或重启,数据仍可保留。
要挂载一个卷,您需要运行类似如下的命令:
docker run -v my-volume:/app/data my-image技术支持
写入到 /app/data 的数据会保存在卷中,即使容器被移除也不会丢失。
传递环境变量
环境变量用于在运行时向 Docker 容器传递配置信息。这样无需修改 Docker 映像即可自定义容器行为。
有两种方式传递环境变量:
使用 -e 参数传递环境变量。示例命令如下:
docker run -e ENV = production -e DEBUG = False my-image技术支持
创建包含所有环境变量的 .env 文件,并在命令中传入。示例如下:
docker run --env-file .env my-image技术支持
示例 .env 文件:
ENV=staging
DEBUG=True
SECRET_KEY=mysecret技术支持
管理正在运行的容器
容器运行后,您可以查看、停止并访问它。下面看看如何操作。
查看活动容器
要列出系统上所有正在运行的 Docker 容器,执行 docker ps 或 docker container ls。该命令会显示容器 ID、映像、命令、端口、状态等信息。
docker ps
docker container ls 技术支持
若要包含所有容器——不仅是正在运行的,还包括已退出或已创建但未启动的,使用 -a 标志:
docker ps -a 技术支持
仅查看最近创建的容器,请使用 -l(last)标志:
docker ps -l 技术支持
如果您想查看按创建时间排序的所有容器,且最新的排在最前,运行:
docker ps -a --sort = created技术支持
停止并删除容器
要停止某个正在运行的容器,使用 docker stop,后接容器 ID 或名称:
docker stop < container_id_or_name> 技术支持
要停止所有正在运行的容器,使用:
docker stop $( docker ps -q ) 技术支持
$(docker ps -q) 会返回所有正在运行容器的 ID 列表。
容器停止后,您可以用以下命令删除它:
docker rm < container_id_or_name> 技术支持
要删除所有已停止的容器,运行:
docker container prune技术支持
若要更进一步并删除未使用的容器、卷、网络和映像,请查看Docker prune 指南 。
访问容器日志与 Shell
docker logs - docker logs 命令批量获取执行时已有的日志。
docker exec - docker exec 允许您在已运行的容器内执行新命令,而无需停止或重启它。可以把它看作是在容器内打开了一个新的终端——方便您查看、运行脚本、检查日志或调试。
docker attach - docker attach 将您的终端直接连接到正在运行容器的主进程。这样您就能看到容器的实时输出(日志、提示等),如果进程接受输入,也可以与之交互。
常见问题排查
针对常见问题的简单解决方案。以下是运行 Docker 映像时的一些常见错误及处理思路。
错误 1:“Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
含义: Docker 试图拉取一个映像(此处为 alpine-python)自 Docker Hub,但该映像不存在或为私有,且您未通过身份验证。
解决方法:
在 Docker Hub 上仔细检查映像名称与标签。
如果是私有映像,运行 docker login 进行身份验证。
如果从自定义注册表拉取,请确保映像确实存在。
错误 2: “ No such image found: <image-name>:<tag>”
含义: 您尝试在本地运行或标记一个映像,但该映像(或指定标签)在本机不可用。
解决方法:
使用 docker images 查 看可用映像。
显式拉取映像:
docker pull < image-name> :< tag> 技术支持
错误 3: “ manifest for <image>:<tag> not found: manifest unknown: The named manifest is not known to the registry.”
含义: 通常在指定的映像或标签不存在时出现。
可能的解决方案: 这些提示可解决大多数常见错误:
核对映像与标签名称是否正确。
参考 Docker Hub 或自定义注册表中的 映像标签列表。
使用 docker pull <image>:<tag> 拉取有效版本。
如果在本地构建,请确保 Dockerfile 正确,并用以下命令构建映像:
docker build -t < image> :< tag> . 技术支持
端口冲突与绑定失败
当多个容器,或容器与其他应用尝试使用同一端口时,就会发生端口冲突。
docker run -p 8081 :80 < image> 技术支持
停止当前占用端口的服务。
用以下命令识别哪个进程在使用端口(如 8080):
lsof -i :8080技术支持
结语
运行 Docker 映像是使用容器最重要也最具赋能的一步,无论您是在启动一个简单的 Web 服务器,还是部署一个复杂的应用。借助 docker run、docker ps 和 docker stop 等少量命令,您已经能够自信地启动、管理并排查容器。
如果您准备更进一步,试着用 Dockerfile 构建自己的映像,探索更高级的 docker run 标志,或学习如何使用 Docker Compose 管理多个容器。
继续您的 Docker 学习之旅,推荐这些课程:
如果您在想如何运行 Docker 映像,您并不孤单。无论是刚从 Docker Hub 拉取了一个映像,还是自己构建的,运行它都是让应用真正“活起来”的关键一步。
本教程是面向初学者的
docker run命令及其进阶用法指南。您将学习:结束时,您将自信地启动自己的容器,并清楚了解幕后发生了什么。
理解 Docker 映像与容器
在进入命令示例之前,我们先用简单的语言理解一下 Docker 映像与容器。
如果您已经熟悉这些术语,欢迎直接跳到下一节!
什么是 Docker 映像?
Docker 映像是应用的不可变蓝图。它定义了容器所需的一切:代码、库、环境和配置。有了映像,您可以启动一个容器,也可以启动一百个,每次都保持一致。
那么映像从哪里来?通过 Dockerfile 构建。Dockerfile 中定义使用哪个基础映像、安装哪些依赖,以及应用如何运行。
准备好 Dockerfile 后,运行
docker build命令。该命令按照文件中的步骤,将其转化为一个可复用的映像。什么是 Docker 容器?
Docker 容器是 Docker 映像的活动实例。它让您的应用在独立隔离的环境中运行,确保无论宿主系统如何,行为都一致。
它遵循“构建一次,随处运行”的理念,因此您无需每次手动搭建环境。
映像 vs 容器
下表将映像与容器并排进行比较:
Image
Container
An image is a standardized package that includes all the files, binaries, libraries, and configurations to run a container.
A runtime instance of an image.
An image is immutable. That means it cannot change until it is rebuilt.
The container is mutable. You can modify it while it’s running, install new packages, or change configuration files.
A Dockerfile (a set of instructions to build an image) creates an image.
An image creates a container.
Your computer stores image files.
A container runs in your memory.
如果您刚接触容器化,我们的Introduction to Docker 课程将通过动手示例带您掌握核心概念。
docker run 命令
当您执行
docker run命令时,就是在告诉 Docker 基于某个映像启动一个新容器。简单说,您是在隔离环境中启动一个程序。这个程序可以是一个简单的 Web 应用,也可以是包含多个进程的完整服务。
基本语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS]- 额外标志,用于自定义容器的运行方式IMAGE- Docker 映像名称[COMMAND]-(可选)覆盖映像中的默认命令。[ARG...]-(可选)参数。常用标志与选项
-d:分离模式:在后台运行容器-p:端口映射:要从浏览器访问服务(如 API 或 Web 应用),需要暴露端口。例如:-p 3000:3000将您机器的 3000 端口映射到容器的 3000 端口。--name:Docker 会给容器一个默认名称,您也可以用此标志自定义名称。-v:用于将数据与容器本身分离存储,确保即使容器停止或删除,数据仍然存在。--rm:当容器停止时自动删除它。-e:用于传入数据库密码或 API 密钥,而无需将其硬编码在应用中。交互式容器 vs 分离式容器
Docker 有两种运行方式:交互模式(
-it)和分离模式(-d)。根据您的目标,每种模式都有适用场景。-it:交互模式:如果您想通过终端直接在容器内工作,可以使用-it标志。它会让容器进入交互模式,您可以输入命令、查看输出并实时操作。-i:保持标准输入打开,便于在容器内输入命令-t:提供类似终端的界面-d:分离模式:在后台运行容器,释放终端以执行其他任务。随时掌握关键命令与最佳实践,请查看我们的Docker for Data Science 速查表。
拉取并运行 Docker 映像
现在您已经了解了
docker run的语法,本节将演示如何创建自定义映像并运行它们。使用 Docker Hub 上的映像
Docker Hub 就像容器映像的在线库。您可以获取预构建映像,也可以上传自己的映像与他人共享。它支持公共和私有仓库,既能公开与社区分享映像,也能为内部团队实施访问控制。
运行自定义映像
要运行 Docker 映像,您需要先用 Dockerfile 构建它。然后,您可以在本地运行,或推送到 Docker Hub 进行共享。
那么首先我们来创建一个 Dockerfile。示例如下:
上面的 Dockerfile 表示什么?
FROM python:3.11-slim:基于 Python 3.11 的精简版基础映像WORKDIR /app:将/app设为容器内工作目录。COPY requirements.txt .:将本机的依赖清单移动到容器的应用目录。RUN pip install --no-cache-dir -r requirements.txt:安装 requirements.txt 中的依赖。COPY . .:将当前工作目录的代码(应用、配置文件等)复制到容器的应用目录。步骤 1. 构建 Dockerfile
来看下构建此 Dockerfile 时会发生什么。
注意:要使该命令生效,您需要先在系统中完成 Docker 的安装与配置;本指南可帮助您完成。
当您执行构建命令时,幕后会发生以下情况:
/app。requirements.txt复制到容器中。pip install安装依赖。/app中。my-python-app标签。步骤 2:运行 Dockerfile
构建完成后,您可以用以下命令执行它:
运行后会发生什么:
my-python-app创建了一个新容器。-p 5000:5000)。CMD ["python", "app.py"] 并启动应用。-d选项(分离模式),容器会在后台运行。此时,您可以在浏览器访问
http://localhost:5000,您会看到类似下面的页面,这意味着应用已在运行:如果您从事机器学习工作,这份适用于 ML 与 AI 的优选 Docker 映像可以加速您的环境搭建。
使用带配置的映像运行
对于某些应用,您可能需要在特定配置下运行映像。以下是两个常见示例。
持久化数据
容器临时存储数据。一旦删除,数据就会丢失。卷(volume)是一种在容器外部存储数据的方式,因此即使容器被移除或重启,数据仍可保留。
要挂载一个卷,您需要运行类似如下的命令:
写入到
/app/data的数据会保存在卷中,即使容器被移除也不会丢失。传递环境变量
环境变量用于在运行时向 Docker 容器传递配置信息。这样无需修改 Docker 映像即可自定义容器行为。
有两种方式传递环境变量:
-e参数传递环境变量。示例命令如下:.env文件,并在命令中传入。示例如下:示例
.env文件:管理正在运行的容器
容器运行后,您可以查看、停止并访问它。下面看看如何操作。
查看活动容器
要列出系统上所有正在运行的 Docker 容器,执行
docker ps或docker container ls。该命令会显示容器 ID、映像、命令、端口、状态等信息。若要包含所有容器——不仅是正在运行的,还包括已退出或已创建但未启动的,使用
-a标志:仅查看最近创建的容器,请使用
-l(last)标志:如果您想查看按创建时间排序的所有容器,且最新的排在最前,运行:
停止并删除容器
要停止某个正在运行的容器,使用
docker stop,后接容器 ID 或名称:要停止所有正在运行的容器,使用:
$(docker ps -q)会返回所有正在运行容器的 ID 列表。容器停止后,您可以用以下命令删除它:
要删除所有已停止的容器,运行:
若要更进一步并删除未使用的容器、卷、网络和映像,请查看Docker prune 指南。
访问容器日志与 Shell
docker logs命令批量获取执行时已有的日志。docker exec允许您在已运行的容器内执行新命令,而无需停止或重启它。可以把它看作是在容器内打开了一个新的终端——方便您查看、运行脚本、检查日志或调试。docker attach将您的终端直接连接到正在运行容器的主进程。这样您就能看到容器的实时输出(日志、提示等),如果进程接受输入,也可以与之交互。常见问题排查
针对常见问题的简单解决方案。以下是运行 Docker 映像时的一些常见错误及处理思路。
错误 1:“Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
alpine-python)自 Docker Hub,但该映像不存在或为私有,且您未通过身份验证。docker login进行身份验证。错误 2:“No such image found: <image-name>:<tag>”
docker images查看可用映像。错误 3:“manifest for <image>:<tag> not found: manifest unknown: The named manifest is not known to the registry.”
docker pull <image>:<tag>拉取有效版本。Dockerfile正确,并用以下命令构建映像:端口冲突与绑定失败
当多个容器,或容器与其他应用尝试使用同一端口时,就会发生端口冲突。
结语
运行 Docker 映像是使用容器最重要也最具赋能的一步,无论您是在启动一个简单的 Web 服务器,还是部署一个复杂的应用。借助
docker run、docker ps和docker stop等少量命令,您已经能够自信地启动、管理并排查容器。如果您准备更进一步,试着用 Dockerfile 构建自己的映像,探索更高级的
docker run标志,或学习如何使用 Docker Compose 管理多个容器。继续您的 Docker 学习之旅,推荐这些课程: