docker: 构建openldap镜像(image)

公司测试用到openldap,它原先是在一个虚拟机上安装的。有了docker之后,决定在docker里构建openldap镜像。
大家也知道dockerhub上有很多镜像,所以呢,我就地取材,找了一个来用:
corexx/openldap-server
结果在启动和导入测试用的数据时各种问题,由于对docker和ldap都不是很熟悉,所以捯饬了好几天才搞定:
以下是最终的解决方案:

1. 从原有的openldap server上导出数据

使用ldap client,我用的是LdapAdmin.exe, 格式是*.ldif文件,比如 ldapDatas.ldif

2. 通过dockerfile构建openldap image

dockerfile:

FROM corexx/openldap-server:latest
MAINTAINER * * <*@*.com>

#add datas
ADD ldapDatas.ldif /data/openldap/
RUN cd /data/openldap

#set evn
ENV LDAP_PASSWORD talend
ENV LDAP_DOMAIN kwang.com

# define volumes
VOLUME /data/openldap
WORKDIR /data/openldap

# expose ports
EXPOSE 389

# start Teamspeak Server
CMD ["sh", "/opt/openldap/slapd.sh"]

解释:

MAINTAINER * * <*@*.com> 表明dockerfile的创建者/维护者是谁,将*替换为对应人员的用户名和邮箱就行
参照镜像corexx/openldap-server的挂载点设置的是/data/openldap/,通过以下命令可以将导出来的数据文件加载到容器里。
ADD ldapDatas.ldif /data/openldap/
注意:ADD语法:ADD  
是一个文件或目录的路径,也可以是一个url,路径是相对于该Dockerfile文件所在位置的相对路径(相对路径也是有限制的,必须与Dockerfile在同级目录或子目录中),是目标容器的一个绝对路径。
由以上命令可以看出我的Dockerfile和ldapDatas.ldif同在一个目录。
还有要注意 后面要加/,应该是/data/openldap/,而不是/data/openldap
ENV LDAP_PASSWORD talend
ENV LDAP_DOMAIN kwang.com
以上设置了ldap的密码和domain

构建命令:

首先进入dockerfile所在的目录,因为我的Dockerfile名字就是Dockerfile,所以命令中用.就可以了

docker build -t kwang/ldap:1.0 .

启动容器:

docker run -d --restart=always --name=openldap-server -p 389:389 kwang/ldap:1.0

添加已有测试数据:

docker exec openldap-server ldapadd -v -h localhost:389 -c -x -D cn=root,dc=kwang,dc=com -w talend -f ldapDatas.ldif

3.其它重要docker命令:

查看某个container(容器)挂载的卷: docker inspect -f "{{ .Volumes }}" containerID/name
查看某个容器的启动日志:docker logs -f containerID/name
在启动的容器上继续执行命令:docker exec containerID/name command
比如
docker exec openldap-server ldapadd -v -h localhost:389 -c -x -D cn=root,dc=wyang,dc=com -w talend -f ldapDatas.ldif

你可能感兴趣的:(docker)