AI Engineering Tools

编程

Docker

整理 Docker 镜像、容器、Dockerfile、Compose、端口、卷、日志与常见问题的搜索型指南。

33 个项目

核心概念

Docker

Docker

docker --version

含义

一个用于打包和在隔离容器中运行应用程序的工具。

使用场景

当您希望应用程序在不同机器上使用相同的 OS 包、运行时和依赖项时,请使用它。

示例

docker --version

请求示例

解释这个项目是否可以使用 Docker 运行。

核心概念

Docker daemon

Docker daemon

无法连接到 Docker 守护进程

含义

构建镜像并运行容器的后台服务。

使用场景

如果 Docker 命令无法连接,可能是 Docker Desktop 或 Docker 服务未运行。

示例

无法连接到 Docker 守护进程

请求示例

检查为什么 Docker 命令无法连接到守护进程。

核心概念

图像

Image

node:20-alpine

含义

可重用的模板,用于创建容器。

使用场景

镜像定义了容器启动时使用的 OS、运行时、库和应用程序文件。

示例

node:20-alpine

请求示例

请告诉我,这个 Dockerfile 使用哪个基础镜像。

核心概念

容器

Container

docker ps

含义

从镜像创建的正在运行或已停止的实例。

使用场景

使用容器来运行应用程序、数据库、缓存或工作进程,以在隔离的环境中运行。

示例

docker ps

请求示例

列出正在运行的容器,并解释每个容器的作用。

核心概念

注册表

Registry

docker pull postgres:16

含义

存储和下载 Docker 镜像的服务器。

使用场景

Docker Hub and private registries are used to share base images or deployable app images.

示例

docker pull postgres:16

请求示例

解释这个镜像将从哪里下载。

Dockerfile

Dockerfile

Dockerfile

Dockerfile

含义

一个定义如何构建 Docker 镜像的文件。

使用场景

用于安装依赖项、复制应用程序文件,并定义启动应用程序的命令。

示例

Dockerfile

请求示例

阅读此 Dockerfile 并总结构建步骤。

Dockerfile

FROM

FROM

FROM node:20-alpine

含义

Dockerfile 指令,用于选择基础镜像。

使用场景

它决定了启动的 OS 层,并且通常是运行时版本。

注意

更改基本镜像可能会影响可用的命令、安全更新和图像大小。

示例

FROM node:20-alpine

请求示例

解释此 FROM 镜像包含的内容。

Dockerfile

WORKDIR

WORKDIR

WORKDIR /app

含义

设置图像内部的文件夹,后续命令将在该文件夹中运行。

使用场景

确保 COPY、RUN 和 CMD 命令从可预测的应用程序文件夹运行。

示例

WORKDIR /app

请求示例

解释这个 Dockerfile 使用哪个文件夹作为应用程序目录。

Dockerfile

COPY

COPY

COPY package.json package-lock.json ./

含义

将文件从构建上下文复制到镜像中。

使用场景

用于将依赖文件、源代码和静态资源添加到镜像中。

示例

COPY package.json package-lock.json ./

请求示例

请告诉我,这个 COPY 步骤将哪些文件添加到镜像中。

Dockerfile

RUN

RUN

RUN npm ci

含义

在构建镜像时运行命令。

使用场景

用于安装 OS 包、安装依赖项或构建应用程序文件。

注意

RUN 在镜像构建时发生,而不是在容器启动时。

示例

RUN npm ci

请求示例

将 Dockerfile 的构建时命令与容器启动命令分开。

Dockerfile

CMD

CMD

CMD ["npm", "run", "start"]

含义

定义容器启动时运行的默认命令。

使用场景

使用它来启动 Web 服务器、API 服务器、工作进程或脚本。

示例

CMD ["npm", "run", "start"]

请求示例

告诉我此容器启动时使用的命令。

Dockerfile

EXPOSE

EXPOSE

EXPOSE 3000

含义

记录容器化应用程序预期的监听端口。

使用场景

将其用作一个提示,然后使用 `docker run -p` 或 Compose 端口发布端口。

注意

仅使用 EXPOSE 并不能使应用程序从您的浏览器访问。

示例

EXPOSE 3000

请求示例

解释这个暴露的端口是否实际被发布。

Dockerfile

.dockerignore

.dockerignore

node_modules

含义

一个从 Docker 构建上下文中排除路径的文件。

使用场景

用于将本地依赖项、构建输出、密钥和临时文件排除在镜像构建之外。

示例

node_modules

请求示例

检查此 .dockerignore 是否排除不安全或不必要的文件。

Dockerfile

构建上下文

Build context

docker build -t my-app .

含义

在图像构建期间发送到 Docker 的文件夹。

使用场景

在 docker 构建中的最后一个点通常意味着当前文件夹是构建上下文。

注意

较大的上下文会减慢构建速度,并可能意外包含私有文件。

示例

docker build -t my-app .

请求示例

解释此 Docker 构建可用的文件。

Docker Compose

Docker Compose

Docker Compose

docker compose up

含义

一个用于从一个 YAML 文件运行多个 Docker 服务的工具。

使用场景

用于应用程序、数据库、缓存、工作进程或本地开发堆栈。

示例

docker compose up

请求示例

解释此 compose 文件启动的服务。

Docker Compose

服务。

services

services: web: db:

含义

在 compose 文件中定义的命名应用组件。

使用场景

一个 Web 服务可能运行应用程序,而一个数据库服务运行 PostgreSQL。

示例

services: web: db:

请求示例

列出此 compose 文件中的服务以及每个服务的作用。

Docker Compose

docker compose up

docker compose up

docker compose up -d

含义

启动 compose 文件中定义的服务。

使用场景

使用 -d 选项,以便服务在后台运行。

示例

docker compose up -d

请求示例

启动 compose 服务,并显示哪些服务正在运行。

Docker Compose

docker compose down

docker compose down

docker compose down

含义

停止并删除由 compose 创建的容器。

使用场景

当您完成本地开发堆栈时使用。

注意

命名卷通常会保留,除非您明确地删除它们。

示例

docker compose down

请求示例

停止此 compose 堆栈,而无需删除持久性数据。

命令

docker build

docker build

docker build -t my-app .

含义

从 Dockerfile 和上下文构建 Docker 镜像。

使用场景

在编写 Dockerfile 或更改应用程序依赖项后,使用它。

示例

docker build -t my-app .

请求示例

构建此 Docker 镜像,并总结任何构建错误。

命令

docker run

docker run

docker run --name my-app -p 3000:3000 my-app

含义

从镜像创建并启动一个容器。

使用场景

当您希望直接启动一个容器,而无需使用 compose 时使用。

示例

docker run --name my-app -p 3000:3000 my-app

请求示例

运行此图像,并解释浏览器 URL。

命令

docker ps

docker ps

docker ps

含义

列出正在运行的容器。

使用场景

使用 `docker ps -a` 命令,以便同时查看已停止的容器。

示例

docker ps

请求示例

显示正在运行的容器及其已发布的端口。

命令

docker stop

docker stop

docker stop my-app

含义

停止正在运行的容器。

使用场景

在删除容器或释放端口之前,使用它。

示例

docker stop my-app

请求示例

使用端口 3000 停止容器。

命令

docker logs

docker logs

docker logs my-app

含义

打印容器中的日志。

使用场景

使用它,当容器退出、崩溃或应用程序没有响应时。

示例

docker logs my-app

请求示例

阅读此容器的日志,并找到第一个错误。

命令

docker exec

docker exec

docker exec -it my-app sh

含义

运行容器内部的命令。

使用场景

用于检查容器内部的文件、环境变量或已安装的工具。

注意

在容器内部手动进行的更改可能会在容器重新创建时消失。

示例

docker exec -it my-app sh

请求示例

在此容器中打开一个 shell,并检查其环境变量。

端口与网络

ports

ports

3000:3000

含义

将您机器上的一个端口映射到容器内的端口。

使用场景

确保浏览器可以访问运行在容器内部的 Web 应用程序。

注意

左侧是主机端口,右侧是容器端口。

示例

3000:3000

请求示例

解释我应该打开哪个 URL 来配置这些端口设置。

端口与网络

Docker 中的 localhost

localhost in Docker

host.docker.internal

含义

在 Docker 中,localhost 可以指容器本身,而不是您的主机。

使用场景

在 compose 网络中使用服务名称,或者在容器需要访问主机机器时,使用 host.docker.internal。

示例

host.docker.internal

请求示例

解释为什么 localhost 无法从这个容器访问数据库。

文件与数据

音量

Volume

db-data:/var/lib/postgresql/data

含义

Docker-managed storage that can persist data outside a container's lifecycle.

使用场景

使用卷(volumes)来存储数据库数据或其他应在容器重新创建后仍然存在的文件。

注意

删除卷可能会删除持久性数据。

示例

db-data:/var/lib/postgresql/data

请求示例

请告诉我,哪些 compose volumes 用于存储持久数据。

文件与数据

绑定挂载

Bind mount

./src:/app/src

含义

将一个主机文件夹直接连接到容器路径。

使用场景

在开发过程中使用它,以便主机上的代码更改出现在容器内部。

注意

一个绑定挂载可以将复制到镜像中的文件隐藏在相同的路径下。

示例

./src:/app/src

请求示例

解释这个卷是命名卷还是绑定挂载。

文件与数据

环境

environment

DATABASE_URL=postgres://db:5432/app

含义

传递到容器的配置值。

使用场景

使用环境变量来配置数据库 URL、端口、模式、功能标志和运行时设置。

注意

不要将密钥信息嵌入到公共图像中,也不要提交真实的密钥值。

示例

DATABASE_URL=postgres://db:5432/app

请求示例

检查此容器需要哪些环境变量。

故障排查

端口已分配

port is already allocated

绑定到 0.0.0.0:3000 失败:端口已被占用

含义

Docker cannot publish a host port because another process or container is already using it.

使用场景

找到使用该端口的进程或容器,然后停止它或选择不同的主机端口。

示例

绑定到 0.0.0.0:3000 失败:端口已被占用

请求示例

找到正在使用此 Docker 端口的内容,并提供一个安全的解决方案。

故障排查

容器名称已被使用。

container name is already in use

冲突。容器名称 "/my-app" 已被使用。

含义

已经存在同名的容器。

使用场景

列出现有容器,然后重用、删除或重命名旧容器。

示例

冲突。容器名称 "/my-app" 已被使用。

请求示例

在不意外删除数据的情况下,解决此容器名称冲突。

故障排查

构建缓存

Build cache

docker build --no-cache -t my-app .

含义

Docker can reuse previous build layers to make builds faster.

使用场景

如果更改似乎被忽略,请检查 Dockerfile 的顺序,或者尝试在不使用缓存的情况下重新构建,以进行诊断。

注意

--no-cache 禁用缓存,可能会使构建变慢,请谨慎使用。

示例

docker build --no-cache -t my-app .

请求示例

解释 Docker 构建缓存是否可能隐藏了我的更改。

安全操作

docker system prune

docker system prune

docker system prune

含义

删除未使用的 Docker 数据,例如已停止的容器、未使用的网络和悬空的镜像。

使用场景

使用它,当 Docker 使用过多的磁盘空间,并且您了解将要删除的内容时。

注意

使用额外的标志,prune 可以删除您仍然关心的图像或卷。

示例

docker system prune

请求示例

在清理 Docker 之前,请显示将删除的内容以及哪些数据是安全的。