首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker 部署与使用:从入门到生产环境实践

Docker 部署与使用:从入门到生产环境实践

作者头像
编程小白狼
发布2025-12-18 08:19:33
发布2025-12-18 08:19:33
4K0
举报
文章被收录于专栏:编程小白狼编程小白狼

引言:为什么需要 Docker?

在现代软件开发中,我们经常面临这样的困境:“在我的机器上可以运行,为什么到服务器就不行了?” 这就是经典的“环境一致性问题”。Docker 正是为解决这一痛点而生——它将应用及其依赖打包成一个轻量级、可移植的容器,确保应用在任何环境中都能以相同的方式运行。

一、Docker 核心概念解析

1.1 镜像(Image)

镜像是只读的模板,包含了运行应用所需的一切:代码、运行时、库、环境变量和配置文件。可以把它理解为面向对象编程中的“类”。

1.2 容器(Container)

容器是镜像的运行实例。就像根据类创建的对象,容器是轻量级、可执行的独立环境。

1.3 Dockerfile

Dockerfile 是构建镜像的脚本文件,包含了一系列指令,告诉 Docker 如何构建镜像。

代码语言:javascript
复制
# 简单示例
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

二、Docker 安装与配置

2.1 在不同系统中安装 Docker

Ubuntu/Debian:

代码语言:javascript
复制
# 更新包索引
sudo apt-get update

# 安装依赖
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce

验证安装:

代码语言:javascript
复制
docker --version
docker run hello-world
2.2 配置 Docker 加速器(国内用户)
代码语言:javascript
复制
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

三、Docker 基础操作实战

3.1 镜像管理
代码语言:javascript
复制
# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi <image_id>

# 构建镜像
docker build -t myapp:1.0 .
3.2 容器操作
代码语言:javascript
复制
# 运行容器
docker run -d -p 80:80 --name my-nginx nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 进入容器
docker exec -it my-nginx /bin/bash

# 查看容器日志
docker logs my-nginx

# 删除容器
docker rm my-nginx
3.3 数据持久化
代码语言:javascript
复制
# 使用数据卷
docker run -d -p 80:80 -v nginx-data:/usr/share/nginx/html nginx

# 绑定挂载(主机目录映射)
docker run -d -p 80:80 -v /host/path:/container/path nginx

四、Dockerfile 最佳实践

4.1 高效 Dockerfile 编写技巧
代码语言:javascript
复制
# 多阶段构建示例 - 显著减小镜像大小
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
4.2 安全建议
代码语言:javascript
复制
# 使用非 root 用户
RUN addgroup -g 1001 -S appgroup && \
    adduser -S appuser -u 1001 -G appgroup
USER appuser

# 定期更新基础镜像
# 最小化镜像层数
# 扫描镜像

五、Docker Compose:多容器编排

5.1 docker-compose.yml 示例
代码语言:javascript
复制
version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
    volumes:
      - ./app:/app
  
  redis:
    image: "redis:alpine"
    volumes:
      - redis-data:/data

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web

volumes:
  redis-data:
5.2 Compose 常用命令
代码语言:javascript
复制
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

# 重新构建镜像
docker-compose build

六、生产环境部署策略

6.1 容器监控
代码语言:javascript
复制
# 查看容器资源使用情况
docker stats

# 使用 cAdvisor 监控
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest
6.2 日志管理
代码语言:javascript
复制
# 配置日志驱动
docker run --log-driver=json-file --log-opt max-size=10m nginx

# 使用 ELK 栈收集日志
6.3 网络配置
代码语言:javascript
复制
# 创建自定义网络
docker network create my-network

# 连接容器到网络
docker network connect my-network my-container

七、常见问题排查

7.1 性能问题
代码语言:javascript
复制
# 检查容器资源限制
docker inspect <container_id> | grep -i mem

# 监控容器性能
docker stats <container_id>
7.2 网络问题
代码语言:javascript
复制
# 测试容器网络连通性
docker exec <container> ping google.com

# 检查端口映射
docker port <container_id>
7.3 存储问题
代码语言:javascript
复制
# 检查数据卷
docker volume ls

# 清理无用数据
docker system prune -a

八、进阶话题

8.1 Docker Swarm 集群部署
代码语言:javascript
复制
# 初始化 Swarm
docker swarm init

# 添加节点
docker swarm join --token <token> <manager-ip>:2377

# 部署服务
docker service create --replicas 3 --name web nginx:latest
8.2 与 Kubernetes 集成
代码语言:javascript
复制
# 使用 kubectl 部署
kubectl create deployment nginx --image=nginx:latest
kubectl expose deployment nginx --port=80 --type=LoadBalancer

九、安全最佳实践

  1. 定期更新基础镜像
  2. 使用最小化基础镜像(Alpine)
  3. 扫描镜像(使用 Trivy、Clair 等工具)
  4. 限制容器权限(避免使用 --privileged)
  5. 使用只读文件系统
  6. 实施网络策略

结语

Docker 已经彻底改变了应用部署和运维的方式。通过容器化技术,我们实现了开发与生产环境的一致性、资源的有效隔离、部署的快速可重复性。从简单的单容器应用到复杂的微服务架构,Docker 都能提供强大的支持。

记住:容器不是虚拟机,它们更轻量、启动更快、资源占用更少。正确理解和使用 Docker,将显著提升你的开发效率和系统稳定性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言:为什么需要 Docker?
  • 一、Docker 核心概念解析
    • 1.1 镜像(Image)
    • 1.2 容器(Container)
    • 1.3 Dockerfile
  • 二、Docker 安装与配置
    • 2.1 在不同系统中安装 Docker
    • 2.2 配置 Docker 加速器(国内用户)
  • 三、Docker 基础操作实战
    • 3.1 镜像管理
    • 3.2 容器操作
    • 3.3 数据持久化
  • 四、Dockerfile 最佳实践
    • 4.1 高效 Dockerfile 编写技巧
    • 4.2 安全建议
  • 五、Docker Compose:多容器编排
    • 5.1 docker-compose.yml 示例
    • 5.2 Compose 常用命令
  • 六、生产环境部署策略
    • 6.1 容器监控
    • 6.2 日志管理
    • 6.3 网络配置
  • 七、常见问题排查
    • 7.1 性能问题
    • 7.2 网络问题
    • 7.3 存储问题
  • 八、进阶话题
    • 8.1 Docker Swarm 集群部署
    • 8.2 与 Kubernetes 集成
  • 九、安全最佳实践
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档