本文主要讲述在docker环境下如何进行 OpenLDAP 多主复制,至于 OpenLDAP 原理可以先参考这篇文章了解:https://cloud.tencent.com/developer/article/1490857

首先先拉取docker镜像

服务端镜像

docker pull osixia/openldap

客户端镜像

docker pull ldapaccountmanager/lam

启动两个服务端容器

LDAP_ORGANISATION LDAP组织名,可以自定义设置,如果不设置默认为 Example Inc ,一般定义公司名

LDAP_DOMAIN LDAP域名,可以自定义设置,如果不设置默认为 example.org,一般定义公司域名

LDAP_REPLICATION=true 开启多主复制

hostname 名称可以自定义,但是必须和LDAP_REPLICATION_HOSTS 其中的值一致

LDAP_REPLICATION_HOSTS 为同步的服务器列表,必须和hostname对应上,并且保证两台机器网络互相访问正常

LDAP_ADMIN_PASSWORD 可以自定义设置,如果不设置默认为admin

容器1:

docker run --name ldap1 --restart=always --hostname ldap1.example.com --env LDAP_ORGANISATION="example" --env LDAP_DOMAIN="example.com" --env LDAP_REPLICATION_HOSTS="#PYTHON2BASH:['ldap://ldap1.example.com','ldap://ldap2.example.com']" --env LDAP_REPLICATION=true --env LDAP_ADMIN_PASSWORD="12345" -p 389:389 --detach osixia/openldap:latest

容器2:

docker run --name ldap2 --restart=always --hostname ldap2.example.com --env LDAP_ORGANISATION="example" --env LDAP_DOMAIN="example.com" --env LDAP_REPLICATION_HOSTS="#PYTHON2BASH:['ldap://ldap1.example.com','ldap://ldap2.example.com']" --env LDAP_REPLICATION=true --env LDAP_ADMIN_PASSWORD="12345" -p 389:389 --detach osixia/openldap:latest

分别获取 ldap1 和 ldap2 ip (如果是同一台机器部署的内网可以这样获取ip,如果不是同一台机器部署的网络,则不需要获取内网ip,直接配置对应的公网ip即可)

docker inspect -f "{{ .NetworkSettings.IPAddress }}" ldap1
docker inspect -f "{{ .NetworkSettings.IPAddress }}" ldap2

设置对应容器host,保证两个容器之间网络互通

docker exec ldap1 bash -c "echo【设置ldap2的ip】ldap2.example.com >> /etc/hosts"
docker exec ldap2 bash -c "echo【设置ldap1的ip】ldap1.example.com >> /etc/hosts"

启动客户端服务(4389端口可以随意配置)

docker run -d --restart=always --name ldap-account-manager -p 4389:80 --detach ldapaccountmanager/lam:latest

客户端访问 (对应客户端服务的ip+端口)

http://127.0.0.1:4389

登录前请进行相关设置,请参考以下设置规则

(1)先进行登录前的设置,点击右上角 LAM configuration 菜单进行设置

(2)点击 Edit server profiles 菜单,进行相关设置, 默认密码为 lam

(3)设置对应服务端IP和LDAP域名(IP为容器对应内网IP,或者公网IP,验证数据同步时,设置不同容器IP连接即可,LDAP域名要和容器运行时候设置 LDAP_DOMAIN 一致,格式为 dc=example,dc=com),和客户端管理员用户(默认admin)



(4)默认初始化两个组(这个可以不设置,注意格式为:ou=people,dc=example,dc=com ,ou可以自定义,dc要和容器运行时候设置 LDAP_DOMAIN 一致)

(5)设置完成后,进入首页进行登录,密码为容器运行时候设置 LDAP_ADMIN_PASSWORD 密码

(6)登录容器 ldap1 添加一个用户,观察 ldap2 是否能正常同步,如下图测试可以正常同步数据

添加相关用户测试可参考下面的文章进行配置

参考文章:

1.https://github.com/osixia/docker-openldap 官方文档

2.https://www.58jb.com/html/ldap-run-on-centos7.html ldap容器配置

3.https://www.58jb.com/html/use-ldap-account-manager.html 在ldap中添加多个不同的组和用户

OpenLDAP 多主复制(基于docker容器模式部署)的更多相关文章

  1. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  2. 如何使不同主机上的docker容器互相通信

    docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...

  3. 基于Docker容器使用NVIDIA-GPU训练神经网络

    一,nvidia K80驱动安装 1,  查看服务器上的Nvidia(英伟达)显卡信息,命令lspci |grep NVIDIA 05:00.0 3D controller: NVIDIA Corpo ...

  4. Gogs的Docker容器化部署流程遇到的问题

    Gogs的Docker容器化部署流程遇到的问题   最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...

  5. 基于docker和cri-dockerd部署kubernetes v1.25.3

    基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...

  6. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  7. Drools 7.15.0 docker容器方式部署

    关于drools的相关介绍就不再赘述了,关于drools网上的资料都很少,或者都有些老了,最近折腾了一下,记录下安装部署的过程,希望能节省下大家的时间. 一.快速部署 1.拉取基础镜像,命令如下: d ...

  8. 基于 docker容器搭建机器学习环境

    下载docker镜像 docker pull ubuntu:18.04 进入ubuntu系统命令 docker run -ti ubuntu /bin/bash 正确退出系统方式 先按,ctrl+p ...

  9. 实现Mac主机上的Docker容器中的图形界面显示(运行GUI应用)

    我有一个需求: 一方面,我需要在 Docker 容器环境下运行应用(因为有些环境在 Mac 下很难安装配置,并且希望环境干净隔离). 另一方面,容器中的应用又需要进行图形界面的显示. 由于 Docke ...

随机推荐

  1. RocketMQ 单机版安装并测试

    一.安装maven 1.下载maven,http://maven.apache.org/download.cgi,并解压: -bin.tar.gz 2.修改系统环境变量,并验证: vim /etc/p ...

  2. 系统分析与设计lesson6

    | 分类 作业  | 1.用例建模 a. 阅读 Asg_RH 文档,绘制用例图. 按 Task1 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸 b. 选择你熟悉的定旅馆在线服务系统 ...

  3. 查看python库文档

    安装完python第三方库以后,经常需要查询其文档,其实python就自带文档查看器.可以查看所有内置库和第三方库的文档,虽然不是很详尽,但是总比没有的好. 在命令行窗口 python -m pydo ...

  4. Ajax&Json案例

    案例: * 校验用户名是否存在 1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用.有两种解决方案: 1. $.get(type):将最后一个参数type指定为"json& ...

  5. PHP时区转换(默认中国时区<Asia/Shanghai>转意大利时区<Europe/Rome>)

    <?php function changeTimeZone($date_time, $format = 'Y-m-d H:i:s', $to = 'Europe/Rome', $from = ' ...

  6. springboot 解决实体类值为null或者数组为空,不返回前台

    一个注解解决问题 @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonInclude(JsonInclude.Include.NON_NULL)

  7. CSS 学习笔记——CSS Selector

    CSS1 中定义的选择器 类型选择器 用于选择指定类型的元素(其实他就是 html 标签选择器),常见用法如下: body { /*对 body 元素定义样式*/ } body,div { /*同时选 ...

  8. 微信h5页面audio标签在ios下不能自动播放

    背景介绍:在一个h5页面中,当用户提交表单到后台,后台返回的结果成功的话,开始自动播放背景音乐 出现的问题:在安卓手机上正常,iOS中没有反应 后来网上一番搜索后了解到时因为iOS不允许自动播放音乐, ...

  9. 前端每日实战:62# 视频演示如何用纯 CSS 创作一只蒸锅

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YvOzNy 可交互视频 此视频是可 ...

  10. AJAX 的 Ajax返回数据之前的loading等待效果(gif效果等)

    首先,我们通过ajax请求,向后台传递参数,然后后台经过一系列的运算之后向前台返还数据,我希望在等待数据成功返还之前可以展示一个loading.gif图 不废话,在页面上执行点击事件(<a sc ...