Docker 容器化入门:从安装到部署
Docker 让「在我机器上能跑」成为历史。
不管你是前端、后端还是运维,Docker 已经成为必备技能。这篇文章带你从零开始,掌握容器化的核心概念和实战操作。
Docker 是什么
Docker 是一个容器化平台,把应用及其依赖打包成一个标准化的单元(容器),确保在任何环境都能一致运行。
容器 vs 虚拟机
| 特性 | 容器 | 虚拟机 |
|------|------|--------|
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | 低(共享内核) | 高(独立 OS) |
| 镜像大小 | MB 级 | GB 级 |
| 隔离级别 | 进程级 | 硬件级 |
安装 Docker
bash
# Linux
curl -fsSL https://get.docker.com | sh
# 验证安装
docker --version
docker compose versionWindows/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生产环境注意事项
USER nobody--memory=512m --cpus=0.5HEALTHCHECK 指令docker scanDocker 的核心价值在于环境一致性。花一天时间掌握基本操作,以后部署项目能省下大量排错时间。
推荐指数:⭐⭐⭐⭐⭐
官方文档:https://docs.docker.com/
💬 评论区 (0)
暂无评论,快来抢沙发吧!