AppForge
返回首页
DevOpsDockerKubernetes容器化

Docker 与 Kubernetes 入门指南:从容器到编排

从零开始学习容器化技术,了解 Docker 的核心概念,掌握 Kubernetes 的基本操作。

B
Bruce
全栈开发工程师,热爱技术分享
2025-01-0410 分钟

什么是容器化?


容器化是一种将应用程序及其依赖项打包在一起的技术,确保应用在任何环境中都能一致运行。


Docker 基础


核心概念


  • **镜像 (Image)**:应用程序的只读模板
  • **容器 (Container)**:镜像的运行实例
  • **Dockerfile**:构建镜像的脚本

  • 创建第一个 Dockerfile


    # 使用 Node.js 官方镜像

    FROM node:18-alpine


    # 设置工作目录

    WORKDIR /app


    # 复制 package.json

    COPY package*.json ./


    # 安装依赖

    RUN npm install


    # 复制源代码

    COPY . .


    # 构建应用

    RUN npm run build


    # 暴露端口

    EXPOSE 3000


    # 启动命令

    CMD ["npm", "start"]


    常用 Docker 命令


    # 构建镜像

    docker build -t my-app .


    # 运行容器

    docker run -p 3000:3000 my-app


    # 查看运行中的容器

    docker ps


    # 停止容器

    docker stop <container_id>


    # 查看日志

    docker logs <container_id>


    Kubernetes 入门


    核心概念


  • **Pod**:最小的部署单元,包含一个或多个容器
  • **Deployment**:管理 Pod 的副本和更新
  • **Service**:为 Pod 提供网络访问
  • **Namespace**:资源隔离

  • 创建 Deployment


    # deployment.yaml

    apiVersion: apps/v1

    kind: Deployment

    metadata:

    name: my-app

    spec:

    replicas: 3

    selector:

    matchLabels:

    app: my-app

    template:

    metadata:

    labels:

    app: my-app

    spec:

    containers:

    - name: my-app

    image: my-app:latest

    ports:

    - containerPort: 3000


    创建 Service


    # service.yaml

    apiVersion: v1

    kind: Service

    metadata:

    name: my-app-service

    spec:

    selector:

    app: my-app

    ports:

    - port: 80

    targetPort: 3000

    type: LoadBalancer


    常用 kubectl 命令


    # 应用配置

    kubectl apply -f deployment.yaml


    # 查看 Pod

    kubectl get pods


    # 查看服务

    kubectl get services


    # 查看日志

    kubectl logs <pod_name>


    # 进入 Pod

    kubectl exec -it <pod_name> -- /bin/sh


    # 扩缩容

    kubectl scale deployment my-app --replicas=5


    总结


    Docker 和 Kubernetes 是现代云原生应用的基础。掌握这些技术可以帮助你构建更可靠、更易于扩展的应用程序。


    B

    Bruce

    全栈开发工程师,热爱技术分享

    感谢阅读!如果这篇文章对你有帮助,欢迎分享给更多的朋友。