🛠️MatrixTools
Docker容器化应用部署教程
返回教程列表

Docker容器化2025:现代云原生应用部署指南

掌握最新Docker功能、安全最佳实践和云原生部署技能

18 分钟阅读
MatrixTools
2024年8月4日
精选教程
预计学习时间
90 分钟
难度等级
🔴 高级挑战
学习技能
4 项技能
你将学到的技能:
容器化DevOps微服务部署自动化
学习进度跟踪0% 完成
已学习 0 分钟 / 预计 90 分钟

教程简介

从Docker基础概念到实际项目容器化部署,完整掌握现代应用交付方式

Docker容器化部署DevOps
📖

教程详细内容

深度解析每个关键概念,配合实际案例帮助理解

Docker容器化应用部署教程:从入门到实战

什么是Docker?

Docker是一个开源的应用容器引擎,基于Go语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

Docker的核心概念

容器(Container)

  • 轻量级的、独立的、可执行的软件包
  • 包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置
  • 与虚拟机相比,容器直接运行在宿主机的内核上,没有额外的虚拟化开销

镜像(Image)

  • 容器的模板,包含了运行应用程序所需的所有文件和配置
  • 镜像是只读的,容器是镜像的运行实例
  • 可以基于现有镜像创建新的镜像

Dockerfile

  • 用于定义如何构建Docker镜像的文本文件
  • 包含一系列指令,用于指定基础镜像、安装软件、复制文件等

Docker安装指南

Windows系统安装

  1. 系统要求

    • Windows 10 64位 专业版、企业版或教育版
    • 启用Hyper-V功能
  2. 安装步骤

    # 下载Docker Desktop for Windows
    # 访问 https://www.docker.com/products/docker-desktop
    # 下载并运行安装程序
    
    # 验证安装
    docker --version
    docker-compose --version
    

Linux系统安装(以Ubuntu为例)

# 更新包索引
sudo apt-get update

# 安装依赖包
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker run hello-world

macOS系统安装

# 下载Docker Desktop for Mac
# 访问 https://www.docker.com/products/docker-desktop
# 下载.dmg文件并安装

# 验证安装
docker --version

Docker基础命令详解

镜像相关命令

# 查看本地镜像
docker images

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 删除镜像
docker rmi nginx:latest

# 构建镜像
docker build -t myapp:v1.0 .

# 查看镜像历史
docker history nginx

# 镜像详细信息
docker inspect nginx

容器相关命令

# 运行容器
docker run -d --name mynginx -p 8080:80 nginx

# 查看运行中的容器
docker ps

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

# 停止容器
docker stop mynginx

# 启动容器
docker start mynginx

# 重启容器
docker restart mynginx

# 删除容器
docker rm mynginx

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

# 查看容器日志
docker logs mynginx

# 容器详细信息
docker inspect mynginx

Dockerfile编写指南

基础语法

# 指定基础镜像
FROM node:16-alpine

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV NODE_ENV=production

# 复制文件
COPY package*.json ./

# 执行命令
RUN npm install --only=production

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 设置启动命令
CMD ["npm", "start"]

常用指令详解

FROM指令

  • 指定基础镜像,每个Dockerfile必须以FROM指令开始
  • FROM node:16-alpine - 使用Node.js 16的Alpine版本

WORKDIR指令

  • 设置工作目录,后续的RUN、CMD、COPY等指令都会在这个目录下执行
  • WORKDIR /app

COPY和ADD指令

  • COPY:复制本地文件到镜像中
  • ADD:除了复制功能外,还支持自动解压和远程文件下载

RUN指令

  • 在镜像构建过程中执行命令
  • RUN npm install

CMD和ENTRYPOINT指令

  • CMD:指定容器启动时的默认命令
  • ENTRYPOINT:配置容器启动时的执行命令,不可被覆盖

实战项目:Node.js应用容器化

1. 准备Node.js应用

// app.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({
    message: 'Hello Docker!',
    timestamp: new Date().toISOString()
  });
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});
{
  "name": "docker-node-app",
  "version": "1.0.0",
  "description": "Docker Node.js demo",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.18.0"
  }
}

2. 编写Dockerfile

# 使用官方Node.js镜像作为基础镜像
FROM node:16-alpine

# 设置工作目录
WORKDIR /usr/src/app

# 复制package.json和package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 复制应用代码
COPY . .

# 创建非root用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001

# 更改文件所有权
USER nodejs

# 暴露端口
EXPOSE 3000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/ || exit 1

# 启动应用
CMD ["npm", "start"]

3. 构建和运行

# 构建镜像
docker build -t node-app:v1.0 .

# 运行容器
docker run -d \
  --name my-node-app \
  -p 3000:3000 \
  --restart unless-stopped \
  node-app:v1.0

# 测试应用
curl http://localhost:3000

Docker Compose多服务编排

什么是Docker Compose

Docker Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,你可以使用YAML文件来配置应用程序的服务,然后使用一个命令就可以创建并启动所有服务。

实战:Web应用 + 数据库

# docker-compose.yml
version: '3.8'

services:
  # Web应用服务
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
      - DB_PORT=5432
      - DB_NAME=myapp
      - DB_USER=postgres
      - DB_PASSWORD=password123
    depends_on:
      - db
    restart: unless-stopped

  # PostgreSQL数据库服务
  db:
    image: postgres:13-alpine
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password123
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "5432:5432"
    restart: unless-stopped

  # Redis缓存服务
  redis:
    image: redis:6-alpine
    ports:
      - "6379:6379"
    restart: unless-stopped

volumes:
  postgres_data:

Compose常用命令

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f web

# 停止所有服务
docker-compose stop

# 删除所有容器和网络
docker-compose down

# 重新构建并启动
docker-compose up --build -d

# 扩展服务实例
docker-compose up --scale web=3 -d

生产环境部署最佳实践

1. 镜像优化

多阶段构建

# 构建阶段
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 生产阶段
FROM node:16-alpine AS production
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

2. 安全配置

非root用户运行

# 创建应用用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001

# 切换到非root用户
USER nodejs

扫描漏洞

# 安装Docker安全扫描工具
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd):/app clair-scanner \
  --ip 127.0.0.1 node-app:v1.0

3. 监控和日志

健康检查

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

日志配置

docker run -d \
  --name my-app \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  node-app:v1.0

4. 容器编排(Kubernetes)

基础Deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: node-app:v1.0
        ports:
        - containerPort: 3000
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

常见问题解决

1. 容器启动失败

问题排查

# 查看容器日志
docker logs container-name

# 进入容器调试
docker run -it --entrypoint /bin/sh image-name

# 检查容器状态
docker inspect container-name

2. 网络连接问题

# 查看容器网络
docker network ls

# 创建自定义网络
docker network create my-network

# 在指定网络中运行容器
docker run --network my-network nginx

3. 存储数据持久化

# 创建数据卷
docker volume create my-data

# 挂载数据卷
docker run -v my-data:/data nginx

# 绑定挂载本地目录
docker run -v /host/path:/container/path nginx

学习资源推荐

官方文档

实践项目

  1. 容器化现有的Web应用
  2. 搭建LNMP环境
  3. 部署微服务应用
  4. 使用CI/CD流水线自动化部署

进阶学习

  • Docker Swarm集群管理
  • Kubernetes容器编排
  • 服务网格(Service Mesh)
  • 容器安全最佳实践

通过这个完整的Docker教程,你可以从零开始学习容器化技术,掌握现代应用部署的核心技能。记住,实践是最好的学习方法,多动手操作各种场景,你会更快掌握Docker的精髓。

💻

代码示例

实用代码片段和最佳实践,可直接复制使用

dockerfile
# Node.js生产就绪多阶段构建模板
FROM node:18-alpine AS base
WORKDIR /app
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nextjs -u 1001

# 依赖安装阶段
FROM base AS deps
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# 构建阶段
FROM base AS build
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产运行时阶段
FROM base AS runtime
ENV NODE_ENV=production
COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=build --chown=nextjs:nodejs /app/dist ./dist
COPY --from=build --chown=nextjs:nodejs /app/package.json ./package.json

USER nextjs
EXPOSE 3000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node healthcheck.js

CMD ["node", "dist/server.js"]

使用多阶段构建减少镜像大小60-80%,包含安全强化和健康检查。

📝 学习清单

0/8 完成
学习进度0%
理解2025年容器化发展趋势和Docker最新特性
掌握Docker Build Cloud和性能优化
学习多阶段构建和安全强化技术
掌握现代Docker Compose最佳实践
实施容器安全和监控策略
集成CI/CD和多云部署
构建生产就绪的容器应用
掌握故障排除和性能调优

学习目标

  • 容器化
  • DevOps
  • 微服务
  • 部署自动化

📊 教程信息

预计学习时间⏱️ 90分钟
难度等级🔴 高级
技能点数🎯 4个技能
Docker容器化应用部署教程 | MatrixTools