Docker 容器化入门:从安装到部署

Docker 容器化入门:从安装到部署

Docker 让「在我机器上能跑」成为历史。

不管你是前端、后端还是运维,Docker 已经成为必备技能。这篇文章带你从零开始,掌握容器化的核心概念和实战操作。


Docker 是什么

Docker 是一个容器化平台,把应用及其依赖打包成一个标准化的单元(容器),确保在任何环境都能一致运行。

容器 vs 虚拟机

| 特性 | 容器 | 虚拟机 |
|------|------|--------|
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | 低(共享内核) | 高(独立 OS) |
| 镜像大小 | MB 级 | GB 级 |
| 隔离级别 | 进程级 | 硬件级 |

安装 Docker

bash
# Linux
curl -fsSL https://get.docker.com | sh

# 验证安装
docker --version
docker compose version

Windows/Mac 用户直接下载 Docker Desktop:https://www.docker.com/products/docker-desktop

核心概念

镜像 Image

镜像是一个只读模板,包含运行应用所需的一切:

text
ubuntu:22.04         → 基础镜像
node:20-alpine       → Node.js 运行时
python:3.12-slim     → Python 运行时
nginx:alpine         → Nginx 服务器

容器 Container

容器是镜像的运行实例:

bash
docker run nginx:alpine        # 启动容器
docker ps                      # 查看运行中的容器
docker stop container_id       # 停止容器
docker rm container_id         # 删除容器

编写 Dockerfile

dockerfile
# 多阶段构建 - Node.js 应用
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml

管理多容器应用:

yaml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/myapp
  
  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

volumes:
  pgdata:

常用命令速查

bash
# 镜像管理
docker images                  # 列出镜像
docker pull ubuntu:22.04       # 拉取镜像
docker rmi image_id            # 删除镜像
docker build -t myapp:1.0 .    # 构建镜像

# 容器管理
docker run -d -p 8080:80 nginx    # 后台运行并映射端口
docker logs -f container_id       # 查看日志
docker exec -it container_id bash # 进入容器
docker cp file.txt container:/path  # 复制文件

# 清理
docker system prune -a         # 清理所有未使用的资源
docker container prune         # 清理停止的容器

数据持久化

bash
# 卷挂载(推荐)
docker run -v mydata:/data myapp

# 绑定挂载(开发用)
docker run -v $(pwd):/app myapp

# 查看卷
docker volume ls
docker volume inspect mydata

网络配置

bash
# 创建自定义网络
docker network create mynetwork

# 使用网络
docker run --network mynetwork myapp

# 容器间通信(使用服务名)
# db 容器可以通过主机名 "db" 被其他容器访问

优化建议

dockerfile
# 1. 合并 RUN 命令减少层数
RUN apt-get update && apt-get install -y \
    curl \
    vim \
    && rm -rf /var/lib/apt/lists/*

# 2. 使用 .dockerignore
node_modules/
.git/
*.md
.env

# 3. 选择基础镜像
# node:20-alpine 约 120MB vs node:20 约 350MB
FROM node:20-alpine

生产环境注意事项


  • 不要以 root 运行容器:使用 USER nobody

  • 设置资源限制:--memory=512m --cpus=0.5

  • 使用健康检查:HEALTHCHECK 指令

  • 日志管理:配置日志轮转

  • 镜像扫描:docker scan

  • Docker 的核心价值在于环境一致性。花一天时间掌握基本操作,以后部署项目能省下大量排错时间。

    推荐指数:⭐⭐⭐⭐⭐

    官方文档:https://docs.docker.com/

    💬 评论区 (0)

    暂无评论,快来抢沙发吧!