服务端2月17日 14:33
TailwindCSS Typography 插件怎么用才稳?## Typography 插件适合解决什么问题?
如果页面里有 Markdown、CMS 富文本、博客正文或文档内容,直接用 Tailwind 原子类逐个给 `h2`、`p`、`ul`、`code`、`blockquote` 写样式会很累。`@tailwindcss/typography` 的作用就是给这类“长文本内容”提供一套默认排版样式。
它的核心类名是 `prose`。把 `prose` 加到内容容器上,容器里的标题、段落、列表、链接、代码、引用等元素都会获得更适合阅读的样式。
```html
<article class="prose">
<h2>标题</h2>
...服务端2月17日 14:40
Docker 数据卷怎么用?Volume、Bind Mount 和 tmpfs 有什么区别?Docker 容器本身是“可丢弃”的:容器删了,容器可写层里的文件通常也就没了。数据卷解决的就是这个问题。它把数据放到容器生命周期之外,让数据库文件、上传文件、日志、配置等数据可以在容器重建后继续存在。
说白了,镜像负责运行环境,容器负责进程,数据卷负责把真正重要的数据留下来。
## Docker 数据卷有什么用?
Docker 数据卷主要有几个作用:
- **持久化数据**:容器删除、重建、升级后,数据仍然保留。
- **容器之间共享数据**:多个容器可以挂载同一个卷,例如一个写文件、另一个读取文件。
- **方便迁移和备份**:卷可以独立备份,不必把数据混在容器可写层里。
-...服务端2月17日 14:40
Docker 镜像分层是什么?如何优化构建体积和缓存?## Docker 镜像分层到底是什么?
Docker 镜像不是一个单独的大文件,而是一组只读层叠加出来的文件系统。Dockerfile 里的多数指令,例如 `FROM`、`RUN`、`COPY`、`ADD`,都会生成新的镜像层。容器启动时,Docker 会在这些只读层上再加一层可写层,应用运行时产生的文件修改就落在这一层里。
这些层通常基于内容寻址保存。简单说,Docker 会根据层内容计算摘要,内容一样的层可以被复用、共享和缓存。两个镜像如果都基于同一个 `node:20-alpine`,底层基础镜像层通常只需要在机器上保存一份。
在 Linux 上,Docker 常见的存储驱...服务端2月17日 14:40
Docker 容器隔离机制是什么?边界在哪里?Docker 的容器隔离主要靠 Linux 内核能力完成,不是靠 Docker 自己“虚拟出一台机器”。一句话说:Namespace 负责把容器“看见的世界”隔开,Cgroup 负责限制它能“用多少资源”,再叠加联合文件系统、Capabilities、seccomp、AppArmor 或 SELinux 等机制,形成一套相对完整的运行边界。
## Namespace 隔离了容器能看到什么
Namespace 可以理解成 Linux 给进程准备的“视角隔离”。同一台宿主机上的进程,放进不同 Namespace 后,看到的进程、网络、挂载点、主机名可能完全不同。
### PID Nam...服务端2月17日 14:40
Dockerfile CMD 和 ENTRYPOINT 有什么区别?Dockerfile 里的 `CMD` 和 `ENTRYPOINT` 都和容器启动命令有关,但职责不一样:`ENTRYPOINT` 更像“固定要运行的程序”,`CMD` 更像“默认参数”或“默认命令”。
如果只记一句话:**想让镜像像一个可执行程序一样运行,用 `ENTRYPOINT`;想给容器提供一个可以轻松替换的默认启动命令,用 `CMD`。两者一起用时,通常是 `ENTRYPOINT` 写可执行文件,`CMD` 写默认参数。**
## CMD 是什么?
`CMD` 用来指定容器启动时的默认命令。它最大的特点是:**容易被 `docker run` 后面的参数覆盖**。
常见...服务端2月17日 14:43
Docker COPY 和 ADD 有什么区别?什么时候该用 ADD?Dockerfile 里复制文件时,默认优先用 `COPY`。它的语义很单纯:把构建上下文里的文件或目录复制到镜像指定路径。`ADD` 也能复制文件,但它多了几个“隐式动作”,尤其是本地 tar 包自动解压和远程 URL 下载。正因为这些行为不够直观,日常构建里更推荐 `COPY`,只有明确需要 `ADD` 的特殊能力时再用它。
## COPY 做什么?
`COPY` 只负责复制本地文件、目录,行为可预测:
```dockerfile
COPY package.json package-lock.json ./
COPY src/ /app/src/
```
注意目标路径的斜杠:...服务端2月17日 14:45
Docker 容器生命周期有哪些状态和管理命令?Docker 容器生命周期管理,核心就是管理一个容器从创建、运行、暂停、停止、重启到删除的全过程。常见状态包括 `created`、`running`、`paused`、`exited`、`restarting` 和 `dead`,对应的命令主要有 `create`、`run`、`start`、`stop`、`kill`、`pause`、`unpause`、`restart`、`rm`。
## Docker 容器有哪些生命周期状态?
| 状态 | 含义 | 常见场景 |
|---|---|---|
| `created` | 容器已创建,但还没有启动 | 执行 `docker cre...服务端2月17日 14:45
Docker 环境变量怎么配置?ENV、ARG 和 Compose 怎么选?## Docker 环境变量到底能配置在哪?
Docker 容器环境变量常见配置方式有四类:写在 `Dockerfile` 里、运行容器时传入、通过环境变量文件批量传入、在 Docker Compose 中配置。它们看起来都叫“环境变量”,但生效时机、覆盖规则和安全风险并不一样。
一句话先说结论:**固定默认值可以放 Dockerfile,环境差异参数用运行时传入,生产敏感信息不要直接当环境变量裸奔。**
## Dockerfile 里的 ENV 和 ARG 有什么区别?
`Dockerfile` 里最容易混淆的是 `ENV` 和 `ARG`。
### ENV:构建后仍然存在
...服务端2月17日 14:45
Docker 端口映射怎么配置?-p、Compose 和排查怎么做?Docker 端口映射的作用,是把容器网络命名空间里的端口发布到宿主机上。最常见的写法是 `docker run -p 8080:80 nginx`:外部访问宿主机的 `8080` 端口,请求会被转发到容器里的 `80` 端口。
这里最容易混淆的是:`EXPOSE` 只是镜像或 Dockerfile 里的声明,告诉别人“这个容器通常会监听哪些端口”;真正让宿主机能访问容器端口的,是 `-p/--publish` 或 Compose 里的 `ports`。
## `-p` 的完整写法是什么?
`-p` 的通用格式是:
```bash
docker run -p [hostIP:]h...服务端2月17日 14:45
Docker 容器时区配置怎么做才稳妥?Docker 容器里的时间不对,最先影响的一般不是页面展示,而是日志、定时任务和排查问题的效率。比如宿主机已经是北京时间,容器日志却显示 UTC,凌晨任务提前 8 小时执行,排查起来很容易绕晕。
Docker 容器时区配置常见有几种做法:设置 `TZ` 环境变量、安装 `tzdata`、挂载宿主机时区文件,或者在 Compose、Kubernetes 中统一声明。实际选哪一种,要看镜像基础系统、应用运行时和部署环境。
## 用 TZ 环境变量设置时区
最轻量的方式是在容器中设置 `TZ` 环境变量:
```dockerfile
ENV TZ=Asia/Shanghai
```
...