在树莓派上用Docker-in-Docker模拟Docker Swarm集群
2024/11/15 21:02:55
本文主要是介绍在树莓派上用Docker-in-Docker模拟Docker Swarm集群,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在这个项目里,我一直在用一个4GB的Raspberry Pi 4B,装上了64位的Raspberry Pi OS Lite,并用上了Docker。建议您先从头到尾读一遍,这不是一个指南,而是一个过程分享。
1) 在您的设备上安装 64位的Raspberry Pi OS Lite 中的 Docker(容器引擎) 2) 设置经理 3),安排工人。 4) 使用 Docker-in-Docker (DinD,即 Docker-in-Docker) 模拟 Docker Swarm 的步骤 在您的 Raspberry Pi OS Lite 64位系统上安装 Docker [在 Debian 上安装 Docker 引擎如何在 Debian 上安装 Docker 引擎。了解不同的安装方法和步骤。更多详情请参阅:Docker 官方文档]sudo apt-get update && sudo apt-get upgrade -y for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done # 下载 Docker 的官方 GPG 密钥并将其保存到 /etc/apt/keyrings/docker.asc: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # 将 Docker 仓库添加到 Apt 仓库列表中,确保使用正确的架构和版本名称: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo docker run hello-world设置管理员
建议在接下来的步骤中使用tmux。
因此,我能够复制并为每个工作节点分配一个纵向面板。
试试下面的任意一条命令检查你的IP
ifconfig
或
ip 地址
你可以使用以下命令初始化Docker Swarm并指定管理节点的IP地址:
docker swarm init --advertise-addr <MANAGER-IP>
请将<MANAGER-IP>替换为实际的管理节点IP地址。
docker swarm init --advertise-addr 192.168.99.100 群集已初始化:現在,該節點 (dxn1zf6l61qsb1josjja83ngz) 成為了一個管理節點。
要添加一个工作节点到这个群集,可以执行以下命令:docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377要添加一个管理节点,可以运行 'docker swarm join-token manager' 并按照说明操作。安排工人。
首先,你需要给工人们准备一个系统镜像:
运行这条命令来拉取alpine镜像:```
sudo docker pull alpine
我试着用Arch,但没有找到arch64的构建版本。 (注意一下,`alpine` 镜像一般用 `/bin/sh` 而不是用 `/bin/bash`。) ![](https://imgapi.imooc.com/67369fee09a03e9604820303.jpg) 获取操作系统镜像后,你需要部署工作节点。这里有两种情况,如果你使用命令 _sudo docker run alpine_ 创建容器,容器会有一个随机生成的名字,所以用 _docker ps -a_ 获取名字,然后用命令将其名字改为一个新的名字。
# 使用 `sudo` 获取管理员权限,将容器重命名 sudo docker rename helloworld.1.6mwtenk3wdxik9kpposg6hd3j Worker1 # 启动容器 sudo docker start Worker1 # 进入容器的 shell 环境 sudo docker exec -it Worker1 /bin/sh
你直接用自定义名称来设置容器。 运行一个名为worker2的容器并进入其shell终端。
sudo docker run -itd --name worker2 alpine /bin/sh
切换到名为worker2的容器的shell终端。
sudo docker exec -it worker2 /bin/sh
这在你使用虚拟机或集群时会适用,但在我这种情况下,我需要在 **Docker 中运行另一个 Docker** : ## 使用 Docker-in-Docker (DinD) 模拟 Docker Swarm 的步骤 要设置 Docker Swarm,工作节点需要是物理机或虚拟机,而不是 Docker 容器。Docker Swarm 通过让每台主机上的 Docker 服务端(无论是物理服务器、虚拟机还是云实例)相互通信来形成集群。容器本身不运行 Docker 服务端,也无法加入集群。 然而,正如我之前说过的,我想在单个主机上使用Docker容器模拟Docker Swarm环境,因此我将使用Docker-in-Docker (简称为DinD)。这需要在Docker容器内运行Docker。
#主机机器 docker pull docker:19.03-dind docker swarm init --advertise-addr Your_IP #如果您已经初始化过群集,无需再次执行 #如果您忘记了添加工人的令牌,请使用以下命令: docker swarm join-token worker #worker1 节点: docker run -d --privileged --name worker1 docker:19.03-dind docker exec -it worker1 /bin/sh docker swarm join --token YOUR_TOKEN YOUR_IP_PORT #worker2 节点: docker run -d --privileged --name worker2 docker:19.03-dind docker exec -it worker2 /bin/sh docker swarm join --token YOUR_TOKEN YOUR_IP_PORT
![](https://imgapi.imooc.com/67369ff009b6071014000753.jpg) 两个阿尔卑斯山的工人和接待者 这样一来,嵌套的 Docker 容器就可以工作了,但是经过几次尝试后,我没能为每个工作节点的作业正确部署。 ![](https://imgapi.imooc.com/67369ff1096a41ea12360421.jpg) 失败的工作 作为尝试,这是一种学习Docker命令和集群管理的有趣方式,但在体验之后,我更推荐使用三个或更多的树莓派,而不是在同一台树莓派上嵌套使用Docker容器。然而,DinD 对许多其他用途来说可能非常有用,能够在同一单板计算机上运行多个操作系统确实令人惊叹。 # **注解:** 在 Alpine 容器里安装 neofetch (需要先启用 Alpine 的社区软件包仓库)
echo http://dl-cdn.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories
apk update
apk add neofetch
**停用和移除现有的容器**
查看所有Docker容器:
sudo docker ps -a
停止名为worker1和worker2的容器:
sudo docker stop worker1 worker2
删除停止后的worker1和worker2容器:
sudo docker rm worker1 worker2
**部署工人到虚拟机/机器的指南** <https://docs.docker.com/engine/swarm/swarm-tutorial/> (此链接指向 Docker Swarm 教程文档。)
这篇关于在树莓派上用Docker-in-Docker模拟Docker Swarm集群的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Docker部署资料:新手入门教程
- 2024-12-19Docker部署实战:新手入门教程
- 2024-12-19Docker部署教程:新手入门详解
- 2024-12-09云原生周刊:在Docker上部署大语言模型
- 2024-12-05Docker教程:新手快速入门指南
- 2024-12-05Docker项目实战:新手教程与案例解析
- 2024-12-04Docker入门教程:快速掌握基础操作
- 2024-12-04Docker入门教程:轻松搭建你的第一个容器化应用
- 2024-12-04Docker-Compose 入门教程:全面解析基础命令与应用场景
- 2024-12-04Docker入门:新手必读的简单教程