Docker在Linux中的容器编排如何操作
小樊
41
2026-01-02 20:26:53
Linux 下 Docker 容器编排实操指南
一、方案选型与适用场景
- Docker Compose:单机多容器应用的一键编排,适合开发、测试、单机演示;通过docker-compose.yml定义服务、网络、卷,一条命令即可拉起/销毁整套应用。上手快、学习成本低。
- Kubernetes:生产级容器编排,适合多主机集群、弹性伸缩、自愈、灰度发布、服务发现与 Ingress等复杂场景;生态完善(如 Prometheus、Istio、Argo CD)。
- Docker Swarm:Docker 原生的轻量级编排,适合已有 Docker 环境、小规模集群、快速上手;与 Engine 深度集成,命令体验一致。
- 选型建议:个人/小团队优先 Compose;需要高可用与弹性伸缩选 Kubernetes;轻量集群或过渡阶段选 Swarm。
二、单机编排 Docker Compose 实操
- 安装 Docker(Ubuntu 示例)
- 更新索引并安装依赖:sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 官方 GPG 与 APT 源,安装 docker-ce:sudo apt-get update && sudo apt-get install -y docker-ce
- 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 将当前用户加入 docker 组(免 sudo):sudo usermod -aG docker $USER(需重新登录生效)
- 安装 Docker Compose(Linux 二进制方式)
- 下载并赋权:sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
- 验证:docker-compose -v
- 编排示例(Flask + Redis)
- 目录结构:app.py、requirements.txt、Dockerfile、docker-compose.yml
- 关键文件
- app.py
- from flask import Flask
- import redis
- app = Flask(name)
- cache = redis.Redis(host=‘redis’, port=6379)
- @app.route(‘/’)
- def hello(): return f’Hello World! I have been seen {cache.incr(“hits”)} times.\n’
- requirements.txt:flask redis
- Dockerfile
- FROM python:3.7-alpine
- WORKDIR /code
- ENV FLASK_APP=app.py
- RUN pip install -r requirements.txt
- COPY . .
- CMD [“flask”, “run”, “–host=0.0.0.0”]
- docker-compose.yml
- version: “3”
- services:
- web:
- build: .
- ports: [“5000:5000”]
- redis:
- 常用命令
- 启动:docker-compose up -d
- 查看:docker-compose ps
- 日志:docker-compose logs -f web
- 进入容器:docker-compose exec web sh
- 停止:docker-compose down
三、集群编排 Kubernetes 实操
- 准备环境(Ubuntu 示例)
- 安装容器运行时 containerd:sudo apt-get update && sudo apt-get install -y containerd
- 生成默认配置并启动:sudo mkdir -p /etc/containerd && containerd config default | sudo tee /etc/containerd/config.toml >/dev/null && sudo systemctl restart containerd && sudo systemctl enable containerd
- 添加 Kubernetes APT 源并安装 kubelet/kubeadm/kubectl:sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl
- 初始化与配置
- 初始化控制平面:sudo kubeadm init(按提示完成)
- 配置 kubectl:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 部署示例应用(Nginx)
- 部署:kubectl apply -f - <<EOF
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-deployment
- labels:
- spec:
- replicas: 3
- selector:
- template:
- metadata:
- spec:
- containers:
- name: nginx
- image: nginx:latest
- ports:
- apiVersion: v1
- kind: Service
- metadata:
- spec:
- selector:
- ports:
- type: NodePort
- EOF
- 验证:kubectl get pods,svc;访问 http://<任一节点IP>:
- 本地学习可选 Minikube
- 安装与启动:curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube && minikube start
四、轻量集群编排 Docker Swarm 实操
- 初始化与加入
- 初始化管理节点:docker swarm init
- 其他节点加入:docker swarm join --token :
- 部署与运维
- 部署服务:docker service create --name web --replicas 3 --publish published=8080,target=80 nginx:latest
- 查看服务:docker service ls;查看任务:docker service ps web
- 滚动更新:docker service update --image nginx:1.25 web
- 扩缩容:docker service scale web=5
五、常用运维命令与排错要点
- Docker Compose
- 启动/停止:docker-compose up -d / docker-compose down
- 查看日志与进入容器:docker-compose logs -f / docker-compose exec sh
- 重建与拉取:docker-compose up -d --build / docker-compose pull
- Kubernetes
- 查看与描述:kubectl get pods,svc,deploy -o wide / kubectl describe pod
- 日志与进入:kubectl logs -f / kubectl exec -it – sh
- 扩缩与回滚:kubectl scale deploy --replicas=5 / kubectl rollout undo deploy
- Docker Swarm
- 节点与任务:docker node ls / docker service ps
- 服务更新与回滚:docker service update --image nginx:1.25 / docker service rollback
- 通用排错
- 镜像拉取失败:检查镜像名/仓库权限/网络;必要时 docker pull
- 端口冲突:确认宿主机端口未被占用(ss -tulpen | grep <端口>)
- 健康检查失败:查看容器日志与探针配置,确保应用就绪后再对外暴露