DevOps工具链速查:从Docker到Kubernetes的完整指南

DevOps工具链速查:从Docker到Kubernetes的完整指南

【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 【免费下载链接】reference 项目地址: https://gitcode.com/GitHub_Trending/referen/reference

本文全面介绍了现代DevOps工具链中的核心技术和工具,涵盖了容器技术(Docker和Docker Compose)、容器编排工具(Kubernetes)、配置管理工具(Ansible)、主流包管理器(npm、yarn、pnpm、cargo)以及系统监控调试工具(Glances、Htop、Sysdig)。文章提供了详细的命令速查、配置参考、实用技巧和最佳实践,帮助开发者和运维人员构建完整的自动化流水线,提升DevOps实践的效率和可靠性。

容器技术:Docker、Docker Compose命令全集

在现代DevOps工具链中,容器技术已经成为应用部署和管理的核心。Docker作为容器技术的代表,配合Docker Compose的多容器编排能力,为开发者和运维人员提供了强大的工具集。本文将全面介绍Docker和Docker Compose的核心命令和使用技巧。

Docker核心命令速查

Docker提供了丰富的命令行工具来管理容器、镜像、网络和存储卷。以下是常用的Docker命令分类:

容器管理命令
# 运行容器
docker run -d -p 80:80 nginx:latest  # 后台运行Nginx容器
docker run -it --rm ubuntu:20.04 bash  # 交互式运行Ubuntu容器

# 容器操作
docker ps          # 查看运行中的容器
docker ps -a       # 查看所有容器
docker stop <container>  # 停止容器
docker start <container> # 启动容器
docker restart <container> # 重启容器
docker rm <container>    # 删除容器

# 容器调试
docker exec -it <container> bash  # 进入容器
docker logs <container>           # 查看容器日志
docker inspect <container>        # 查看容器详细信息
镜像管理命令
# 镜像操作
docker images              # 列出本地镜像
docker pull nginx:latest   # 拉取镜像
docker rmi nginx:latest    # 删除镜像
docker build -t myapp:1.0 .  # 构建镜像

# 镜像导出导入
docker save -o myimage.tar myapp:1.0  # 导出镜像
docker load -i myimage.tar            # 导入镜像
网络管理命令
# 网络操作
docker network ls          # 列出网络
docker network create mynet  # 创建网络
docker network inspect mynet # 查看网络详情
docker network rm mynet     # 删除网络
存储卷管理命令
# 卷操作
docker volume ls          # 列出卷
docker volume create myvol # 创建卷
docker volume rm myvol    # 删除卷
docker volume prune       # 清理未使用卷

Docker Compose命令全集

Docker Compose简化了多容器应用的管理,通过YAML文件定义服务配置。

基本操作命令
# 启动服务
docker compose up -d      # 后台启动所有服务
docker compose up -d --build  # 重新构建并启动

# 停止服务
docker compose down       # 停止并移除容器
docker compose down -v    # 停止并移除容器和卷

# 服务管理
docker compose ps         # 查看服务状态
docker compose logs       # 查看服务日志
docker compose logs -f    # 实时查看日志
服务操作命令
# 单个服务操作
docker compose start web   # 启动web服务
docker compose stop web    # 停止web服务
docker compose restart web # 重启web服务

# 服务调试
docker compose exec web bash  # 进入web服务容器
docker compose run --rm web bash  # 运行临时容器
镜像管理命令
# 镜像操作
docker compose build      # 构建所有服务的镜像
docker compose build web  # 构建指定服务的镜像
docker compose pull       # 拉取所有服务的镜像
docker compose push       # 推送所有服务的镜像

Docker Compose配置文件详解

Docker Compose使用YAML格式的配置文件,通常命名为docker-compose.ymlcompose.yaml

基本配置结构
version: '3.8'  # Compose文件版本
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80
    networks:
      - app-network

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  postgres_data:
高级配置选项
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.prod
      args:
        - NODE_ENV=production
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3

实用技巧和最佳实践

1. 多环境配置

使用多个Compose文件管理不同环境:

# 开发环境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up

# 生产环境  
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
2. 环境变量管理
# 使用.env文件
web:
  environment:
    - DB_HOST=${DB_HOST}
    - DB_PORT=${DB_PORT}

# 多环境变量文件
web:
  env_file:
    - .env.production
    - .env.secrets
3. 资源限制和优化
services:
  app:
    mem_limit: 512m
    cpus: "0.5"
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

故障排除和调试

常用调试命令
# 查看详细配置
docker compose config  # 验证和查看配置
docker compose images  # 查看服务使用的镜像

# 服务状态检查
docker compose top     # 显示运行进程
docker compose events  # 查看实时事件

# 资源使用情况
docker compose stats   # 显示资源使用统计
日志分析技巧
# 过滤特定服务的日志
docker compose logs web | grep "error"

# 查看特定时间段的日志
docker compose logs --since 1h web

# 实时监控多个服务
docker compose logs -f web database

安全最佳实践

1. 最小权限原则
services:
  app:
    user: "1000:1000"  # 使用非root用户
    read_only: true    # 只读文件系统
    security_opt:
      - no-new-privileges:true
2. 网络安全配置
networks:
  internal:
    internal: true  # 内部网络,不暴露到主机
  external:
    driver: bridge
    enable_ipv6: false

services:
  database:
    networks:
      - internal  # 数据库只在内部网络

性能优化技巧

1. 构建优化
# 多阶段构建减少镜像大小
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:16-alpine
COPY --from=builder /app/node_modules ./node_modules
COPY . .
2. 容器资源优化
services:
  app:
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 512M

常用工作流示例

开发环境工作流

mermaid

生产部署工作流

mermaid

通过掌握这些Docker和Docker Compose命令,您将能够高效地管理容器化应用,实现快速的开发、测试和部署流程。记得根据实际需求选择合适的配置选项,并遵循安全最佳实践。

编排工具:Kubernetes、Ansible配置参考

在现代DevOps实践中,容器编排和配置管理是构建可扩展、可靠基础设施的核心技术。Kubernetes作为容器编排的事实标准,与Ansible这一强大的配置管理工具相结合,为开发团队提供了完整的自动化解决方案。

Kubernetes核心概念与命令速查

Kubernetes通过声明式API管理容器化应用,其核心资源类型涵盖了应用部署的各个方面:

基础资源操作
# 查看集群资源状态
$ kubectl get nodes          # 显示所有节点
$ kubectl get pods           # 显示所有Pod
$ kubectl get services       # 显示所有服务
$ kubectl get deployments    # 显示所有部署

# 详细信息查看
$ kubectl describe node <node-name>
$ kubectl describe pod <pod-name>
$ kubectl describe service <service-name>

# YAML格式输出
$ kubectl get pod <pod-name> -o yaml
$ kubectl get deployment <deploy-name> -o yaml --export
命名空间管理
# 命名空间操作
$ kubectl get namespaces
$ kubectl create namespace <namespace-name>
$ kubectl delete namespace <namespace-name>

# 在特定命名空间中操作
$ kubectl get pods -n <namespace>
$ kubectl apply -f manifest.yaml -n <namespace>
部署策略控制
# 部署管理
$ kubectl scale deployment/<deployment-name> --replicas=3
$ kubectl rollout status deployment/<deployment-name>
$ kubectl rollout history deployment/<deployment-name>
$ kubectl rollout undo deployment/<deployment-name>

# 自动扩缩容
$ kubectl autoscale deployment/<deployment-name> --min=2 --max=10 --cpu-percent=80

Ansible配置管理核心

Ansible通过YAML格式的playbook实现基础设施即代码,其模块化设计支持各种自动化任务。

Inventory文件配置
# 静态Inventory示例
[webservers]
web1.example.com ansible_host=192.168.1.10
web2.example.com ansible_host=192.168.1.11

[database]
db1.example.com ansible_host=192.168.1.20

[production:children]
webservers
database

[production:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/deploy_key
常用模块速查
模块名称功能描述示例用法
copy文件复制ansible all -m copy -a "src=/local/file dest=/remote/file"
file文件管理ansible all -m file -a "path=/path/to/file state=absent"
service服务管理ansible all -m service -a "name=nginx state=started"
user用户管理ansible all -m user -a "name=testuser state=present"
yum/apt包管理ansible all -m apt -a "name=nginx state=latest"
Playbook结构示例
---
- name: 部署Web应用
  hosts: webservers
  become: yes
  vars:
    app_version: "1.2.0"
    deploy_user: "deploy"
  
  tasks:
    - name: 安装依赖包
      apt:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - python3
        - python3-pip
    
    - name: 创建应用目录
      file:
        path: "/opt/myapp"
        state: directory
        owner: "{{ deploy_user }}"
        group: "{{ deploy_user }}"
        mode: '0755'
    
    - name: 部署应用代码
      copy:
        src: "app-{{ app_version }}.tar.gz"
        dest: "/opt/myapp/"
        owner: "{{ deploy_user }}"
        group: "{{ deploy_user }}"
    
    - name: 解压应用包
      unarchive:
        src: "/opt/myapp/app-{{ app_version }}.tar.gz"
        dest: "/opt/myapp/"
        remote_src: yes
        owner: "{{ deploy_user }}"
        group: "{{ deploy_user }}"
    
    - name: 配置Nginx
      template:
        src: "nginx.conf.j2"
        dest: "/etc/nginx/sites-available/myapp"
        owner: root
        group: root
        mode: '0644'
      notify: 重启Nginx
  
  handlers:
    - name: 重启Nginx
      service:
        name: nginx
        state: restarted

Kubernetes与Ansible集成模式

使用Ansible部署Kubernetes集群
# kubernetes-cluster.yaml
- name: 部署Kubernetes集群
  hosts: k8s_masters
  become: yes
  tasks:
    - name: 安装kubeadm、kubelet和kubectl
      apt:
        name:
          - kubeadm
          - kubelet
          - kubectl
        state: present
        update_cache: yes
    
    - name: 禁用交换分区
      shell: swapoff -a
      ignore_errors: yes
    
    - name: 初始化Master节点
      command: kubeadm init --pod-network-cidr=10.244.0.0/16
      args:
        creates: /etc/kubernetes/admin.conf
    
    - name: 配置kubectl
      copy:
        content: "{{ lookup('file', '/etc/kubernetes/admin.conf') }}"
        dest: "{{ ansible_user_dir }}/.kube/config"
        owner: "{{ ansible_user }}"
        mode: '0600'
使用Ansible管理Kubernetes资源
# deploy-application.yaml
- name: 部署应用到Kubernetes
  hosts: localhost
  connection: local
  tasks:
    - name: 创建命名空间
      kubernetes.core.k8s:
        api_version: v1
        kind: Namespace
        name: myapp-production
        state: present
    
    - name: 部署ConfigMap
      kubernetes.core.k8s:
        state: present
        src: files/configmap.yaml
        namespace: myapp-production
    
    - name: 部署Deployment
      kubernetes.core.k8s:
        state: present
        src: files/deployment.yaml
        namespace: myapp-production
    
    - name: 部署Service
      kubernetes.core.k8s:
        state: present
        src: files/service.yaml
        namespace: myapp-production

高级配置模式

Kubernetes资源定义模板
# deployment-template.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ app_name }}-deployment
  namespace: {{ namespace }}
  labels:
    app: {{ app_name }}
spec:
  replicas: {{ replicas | default(3) }}
  selector:
    matchLabels:
      app: {{ app_name }}
  template:
    metadata:
      labels:
        app: {{ app_name }}
    spec:
      containers:
      - name: {{ app_name }}
        image: {{ image_repository }}/{{ app_name }}:{{ image_tag }}
        ports:
        - containerPort: {{ container_port }}
        env:
        - name: ENVIRONMENT
          value: {{ environment }}
        resources:
          requests:
            memory: "{{ memory_request }}"
            cpu: "{{ cpu_request }}"
          limits:
            memory: "{{ memory_limit }}"
            cpu: "{{ cpu_limit }}"
Ansible变量管理
# group_vars/production.yml
---
k8s_cluster: production-cluster
namespace: production
app_replicas: 5
resources:
  requests:
    cpu: "500m"
    memory: "512Mi"
  limits:
    cpu: "1000m"
    memory: "1Gi"

# group_vars/staging.yml  
---
k8s_cluster: staging-cluster
namespace: staging
app_replicas: 2
resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "512Mi"

监控与日志管理

Kubernetes监控命令
# 资源使用监控
$ kubectl top nodes
$ kubectl top pods
$ kubectl top pods --containers

# 日志管理
$ kubectl logs <pod-name>
$ kubectl logs -f <pod-name>  # 实时日志
$ kubectl logs --since=1h <pod-name>
$ kubectl logs --tail=100 <pod-name>

# 事件查看
$ kubectl get events

【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 【免费下载链接】reference 项目地址: https://gitcode.com/GitHub_Trending/referen/reference

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值