首页主机资讯Docker在Ubuntu上如何进行容器编排

Docker在Ubuntu上如何进行容器编排

时间2025-10-16 18:42:04发布访客分类主机资讯浏览1379
导读:Docker在Ubuntu上的容器编排方法 容器编排是管理多容器应用的核心技术,能解决服务依赖、扩展、高可用等问题。在Ubuntu上,常用的编排工具包括Docker Compose(单机/轻量级多容器)、Docker Swarm(Docke...

Docker在Ubuntu上的容器编排方法
容器编排是管理多容器应用的核心技术,能解决服务依赖、扩展、高可用等问题。在Ubuntu上,常用的编排工具包括Docker Compose(单机/轻量级多容器)Docker Swarm(Docker原生集群编排)Kubernetes(生产级复杂编排),以下是具体操作指南:

一、Docker Compose:单机多容器编排(推荐新手)

Docker Compose通过YAML文件定义多容器应用,适合开发、测试或单机部署场景,操作简单且功能强大。

1. 准备工作:安装Docker & Docker Compose

  • 卸载旧版本(避免冲突):
    sudo apt-get remove -y docker docker-engine docker.io containerd runc
    
  • 安装Docker Engine(官方源,稳定):
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >
         /dev/null
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    
  • 安装Docker Compose插件(Docker v20.10+内置,无需单独安装旧版):
    sudo apt-get install -y docker-compose-plugin
    
  • 验证安装
    docker --version  # 查看Docker版本
    docker compose version  # 查看Compose版本(注意是“compose”,不是“docker-compose”)
    

2. 编写docker-compose.yml文件

在项目目录下创建docker-compose.yml,定义服务、镜像、端口、环境变量等。示例如下:

version: "3.8"  # Compose文件格式版本
services:     # 定义服务(容器)
  web:        # 服务名称(自定义)
    image: nginx:latest  # 使用的镜像
    ports:               # 端口映射(主机:容器)
      - "80:80"
    volumes:             # 卷挂载(持久化数据)
      - ./html:/usr/share/nginx/html
    depends_on:          # 服务依赖(web依赖db启动)
      - db
  db:        # 数据库服务
    image: postgres:13
    environment:         # 环境变量(配置数据库)
      POSTGRES_PASSWORD: example
      POSTGRES_DB: mydb
    volumes:             # 数据卷(持久化数据库文件)
      - db-data:/var/lib/postgresql/data

volumes:     # 定义卷(可选,但推荐用于持久化)
  db-data:

3. 常用命令

  • 启动服务(后台运行):
    docker compose up -d
    
  • 查看运行中的服务
    docker compose ps
    
  • 查看日志(实时输出):
    docker compose logs -f
    
  • 停止服务
    docker compose down  # 停止并删除容器、网络、卷
    
  • 扩展服务(如增加Nginx实例):
    docker compose up -d --scale web=3
    

4. 优势

  • 简化部署:一个命令启动所有服务,无需手动管理每个容器。
  • 依赖管理:通过depends_on定义服务启动顺序。
  • 数据持久化:通过volumes挂载卷,避免容器重启数据丢失。
  • 环境隔离:通过environment配置环境变量,适配不同环境。

二、Docker Swarm:Docker原生集群编排

Docker Swarm是Docker官方提供的集群管理工具,将多台Ubuntu主机组成一个虚拟集群,支持服务的高可用、负载均衡和自动扩展。

1. 准备工作

  • 至少2台Ubuntu主机(1台管理节点,1台或多台工作节点)。
  • 所有主机安装Docker Engine(步骤同上)。
  • 管理节点和工作节点之间网络互通(开放2377/tcp、7946/tcp/udp、4789/udp端口)。

2. 初始化Swarm集群

管理节点上运行以下命令:

docker swarm init --advertise-addr <
    管理节点IP>
    

输出示例:

Swarm initialized: current node (abc123) is now a manager.
To add a worker to this swarm, run the following command:
  docker swarm join --token SWMTKN-1-xxxxxxxxxxxxx <
    管理节点IP>
    :2377
  • 记录--token(用于工作节点加入集群)。

3. 加入工作节点

工作节点上运行管理节点输出的docker swarm join命令:

docker swarm join --token SWMTKN-1-xxxxxxxxxxxxx <
    管理节点IP>
    :2377
  • 验证节点是否加入:
    docker node ls  # 查看集群节点列表(管理节点为“Leader”,工作节点为“Reachable”)
    

4. 部署服务到Swarm

使用docker service create命令部署服务,示例如下:

docker service create --name my-web --replicas 3 -p 80:80 nginx:latest
  • --name:服务名称(自定义)。
  • --replicas:副本数(3个Nginx容器)。
  • -p:端口映射(主机:容器)。
  • nginx:latest:使用的镜像。

5. 管理Swarm服务

  • 查看服务状态
    docker service ls  # 查看所有服务
    docker service ps my-web  # 查看指定服务的任务(容器)状态
    
  • 扩展服务(增加副本数):
    docker service scale my-web=5  # 将my-web服务的副本数扩展到5
    
  • 更新服务(如更换镜像):
    docker service update --image nginx:1.25 my-web
    
  • 删除服务
    docker service rm my-web
    

6. 优势

  • 高可用:管理节点故障时,自动选举新Leader。
  • 负载均衡:自动将请求分发到多个副本。
  • 弹性扩展:根据负载动态调整副本数。
  • 原生集成:与Docker Engine无缝协作,无需额外组件。

三、Kubernetes:生产级复杂编排(可选)

Kubernetes是开源的容器编排平台,适合大规模、复杂应用,提供更强大的自动化管理能力(如自动修复、滚动更新、服务网格等)。但配置较复杂,适合有一定经验的用户。

1. 准备工作

  • 至少3台Ubuntu主机(1台主节点,2台工作节点)。
  • 所有主机安装Docker Engine(步骤同上)。
  • 主节点和工作节点之间网络互通(开放6443/tcp、10250/tcp等端口)。

2. 安装kubeadm、kubelet、kubectl

sudo apt-get update &
    &
     sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl  # 锁定版本,防止升级

3. 初始化主节点

主节点上运行:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • --pod-network-cidr:指定Pod网络CIDR(需与后续网络插件匹配)。
  • 输出示例:
    Your Kubernetes control-plane has initialized successfully!
    To start using your cluster, you need to run the following as a regular user:
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 按提示配置kubectl(将admin.conf复制到~/.kube/config)。

4. 部署网络插件(如Flannel)

Kubernetes需要网络插件实现Pod间通信,常用Flannel:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

5. 部署应用

创建Deployment YAML文件(如my-web-deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-web
  template:
    metadata:
      labels:
        app: my-web
    spec:
      containers:
      - name: web
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-web-service
spec:
  selector:
    app: my-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer  # 外部访问类型(集群内可用ClusterIP)
  • 部署应用:
    kubectl apply -f my-web-deployment.yaml
    
  • 查看Pod状态:
    kubectl get pods -w
    
  • 查看Service信息:
    kubectl get svc
    

6. 优势

  • 自动化管理:自动修复故障Pod、滚动更新、回滚。
  • 弹性扩展:支持HPA(Horizontal Pod Autoscaler)根据CPU/内存自动扩展。
  • 服务发现:内置DNS,服务间通过名称访问。
  • 负载均衡:Service自动分发请求到多个Pod。
  • 可扩展性:支持自定义资源、Operator等高级功能。

选择建议

  • 开发/测试:优先选Docker Compose,简单易用。
  • 小型集群/高可用:选Docker Swarm,原生集成,配置简单。
  • 大型生产环境:选Kubernetes,功能强大,适合复杂应用。

以上步骤覆盖了Ubuntu上Docker容器编排的主要方法,可根据实际需求选择合适的工具。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Docker在Ubuntu上如何进行容器编排
本文地址: https://pptw.com/jishu/728259.html
打包Golang程序在Ubuntu上难吗 Docker在Ubuntu中如何优化性能

游客 回复需填写必要信息