Docker

0 阅读3分钟

安装 Docker

官方地址: www.docker.com/products/do…

验证是否安装成功:

docker --version

在项目根目录创建 Dockerfile

路径:docker-demo/Dockerfile

# 构建阶段
FROM hub.rat.dev/library/node:22-alpine AS build

# 安装 pnpm
RUN npm install -g pnpm

WORKDIR /app

# 复制依赖清单(注意这里换成了 pnpm-lock.yaml)
COPY package.json pnpm-lock.yaml ./

# 安装依赖
RUN pnpm install --frozen-lockfile

# 复制源码
COPY . .

# 执行打包(现代项目通常输出到 dist 目录,请根据你实际情况确认)
RUN pnpm run build

# 运行阶段
FROM hub.rat.dev/library/nginx:alpine

# 注意:pnpm/Vite 项目默认打包后的文件夹通常是 /app/dist 而不是 /app/build
COPY --from=build /app/dist /usr/share/nginx/html

注意:

hub.rat.dev/library 这个是镜像,有可能链接不成功,可能需要借助AI工具不同的调试一个能用的

构建镜像

docker-demo 目录执行:

docker build -t docker-demo .
  • docker build:告诉 Docker 开始构建镜像
  • -tTag 的缩写,用来给镜像起名
  • docker-demo:你给这个镜像起的名字
  • .:构建上下文(Build Context)

重点关注那个“点” (.)

很多人以为这个 . 代表“在当前目录找 Dockerfile”,但这只是它的副作用

  • 它的真实含义: 告诉 Docker,把当前文件夹下的所有文件都打包发送给 Docker 引擎。
  • 为什么需要它: 还记得你 Dockerfile 里的 COPY . . 吗?如果没有这个 .,Docker 就不知道去哪里找你的源代码、package.jsondist 文件夹。

注意: 如果你的当前目录下有几个 GB 的无用数据(比如超大的日志文件或视频),这步会变得非常慢。这时就需要添加 .dockerignore 文件。

node_modules
dist
.git
.gitignore
Dockerfile
.dockerignore
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*

启动容器

docker run -d -p 3000:80 --name docker-container docker-demo
  • docker run:创建并启动一个新容器
  • -dDetached(分离模式),在后台悄悄运行。如果不加这个,你的终端会被日志刷屏,且关掉终端容器就停了。
  • -p 3000:80Publish(端口映射),关键点: 把你电脑(宿主机)的 3000 端口指向容器内部的 80 端口。
  • --name docker-caontainer:给容器起个名字,以后通过这个名字管理它(重启/关闭),不用记那串乱码一样的 ID。
  • docker-demo:使用哪个镜像,刚才用 docker build 出来的那个镜像名字。

访问应用

浏览器打开:

http://localhost:3000

查看运行状态

docker ps

这是 Docker 最常用的“点名”命令。

  • ps: 来自 Unix 命令,意思是 Process Status(进程状态)。
  • 作用:列出当前正在运行的所有容器。
  • 你会看到什么
    • CONTAINER ID: 容器的身份证。
    • IMAGE: 用的哪个镜像。
    • STATUS: 运行了多久(Up 5 minutes)。
    • PORTS: 端口映射关系(比如 0.0.0.0:3000->80/tcp)。
    • NAMES: 你刚才起的那个 react-container

停止并删除容器

docker stop react-container
docker rm react-container

Docker可视化工具

构建镜像一个镜像后,后续启动和停止都可以通过可视化操作

image.png

image.png

win下可能出现如下报错

报错一

image.png

解决办法:

  1. 用管理员权限打开命令行 开始菜单 → 搜索 cmd → 右键 → 以管理员身份运行

  2. 修改目录所有者 执行:

takeown /f "C:\ProgramData\DockerDesktop" /r /d y

3. 赋予管理员完全权限

icacls "C:\ProgramData\DockerDesktop" /grant administrators:F /t

4. 如果目录异常,直接删除(更干净)

rmdir /s /q "C:\ProgramData\DockerDesktop"

5. 重新安装 右键安装包 → 以管理员身份运行 安装 Docker Desktop

本质原因: 之前安装/卸载残留导致该目录归属错误(可能属于普通用户或 SYSTEM),安装程序要求管理员拥有。

报错二

WSL 版本过旧

image.png

管理员权限打开 PowerShell,执行:

wsl --update

执行完成后,重启电脑