返回首页

Docker 入门笔记

三个核心概念

常用命令

docker pull nginx              # 拉取镜像
docker run -d -p 8080:80 nginx # 后台运行并映射端口
docker ps                      # 查看运行中的容器
docker ps -a                   # 查看全部容器
docker logs -f <id>            # 跟踪日志
docker exec -it <id> sh        # 进入容器
docker stop <id>               # 停止
docker rm <id>                 # 删除容器
docker rmi <image>             # 删除镜像

端口映射 -p 宿主机:容器,把容器内的服务暴露给外面。

写一个 Dockerfile

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80

多阶段构建(multi-stage)能显著缩小最终镜像:构建阶段的依赖不会进入运行镜像。

构建与运行:

docker build -t my-site .
docker run -d -p 8080:80 my-site

用 Compose 编排多容器

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8080:80"
    depends_on:
      - api
  api:
    image: node:20-alpine
    working_dir: /app
    volumes:
      - ./api:/app
    command: node server.js
docker compose up -d     # 启动
docker compose logs -f   # 看日志
docker compose down      # 停止并清理

体积与清理

镜像会越积越多,定期清理:

docker system prune -a     # 清理未使用的资源(谨慎)
docker image prune -f      # 清理悬空镜像

心智模型

把容器想成「一次性的进程」:不要在里面存重要数据,需要持久化的目录用 volume 挂载出来。镜像应当是不可变的——配置走环境变量,数据走挂载,这样容器才能随时销毁、随时重建。

容器解决的不是「怎么部署」,而是「让环境本身成为代码」。

单台机器管好了,下一步是集群:[[kubernetes-basics]]。想看真实部署案例,见 [[home-server]]。