Docker在Ubuntu上如何进行容器编排
导读: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