elk本身是没有登录认证之类的,故采用nginx拦截认证转发。
1.获取elk基础镜像
https://hub.docker.com/r/sebp/elk/ 可查看其Dockerfile
docker pull sebp/elk
2.在elk基础镜像 基础之上 安装nginx。制作Dockerfile 如下
FROM sebp/elk:latest
MAINTAINER Chao.Yang <13689028340@163.com>
RUN apt-get install -y nginx && rm -rf /var/lib/apt/lists/* && echo "\ndaemon off;" >> /etc/nginx/nginx.conf && chown -R www-data:www-data /var/lib/nginx
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
ADD run.sh /run.sh
RUN chmod 755 /*.sh
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx"]
WORKDIR /etc/nginx
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/run.sh" ]
3.编写启动脚本run.sh 如下:
#!/bin/bash
#start elk
/usr/local/bin/start.sh &
# start nginx
/usr/sbin/nginx
exec "$@"
4.创建一个自己的镜像
docker build -t young/elk-nginx:1.0 .
5.run容器
docker run -d -p 8070:80 --name elk-nginx
young/elk-nginx:1.0
6.配置nginx配置文件 修改部分 如下:
server {
listen 80;
server_name localhost;
location / {
root /opt/kibana;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/site_pass;
proxy_pass http://localhost:5601/;
proxy_set_header Host $host:5601;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
#index index.html index.htm;
}
access_log off;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.第6步中的用户及密码文件
site_pass 。可在线生成(需采用crypt加密算法)
http://tool.oschina.net/htpasswd
young:/BeEznKkm0AOw
8.如果在容器中vi编辑有问题,可将相关文件烤出到宿主机,修改后再烤到容器相关地方。
nginx配置文件路径 /etc/nginx/nginx.conf
docker cp
9.restart 容器。ok