DevOps工具链速查:从Docker到Kubernetes的完整指南
【免费下载链接】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.yml或compose.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
常用工作流示例
开发环境工作流
生产部署工作流
通过掌握这些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 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/GitHub_Trending/referen/reference
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



