zoukankan      html  css  js  c++  java
  • Docker安装ElasticSearch(实现全文检索)

    1 Docker

    1.1 毛线是docker?

    1.1.1 Docker是使用最广泛的开源容器引擎
    • 容器:

      1容器是一个操作系统级别下的虚拟化技术,运行一个容器就行运行一个进程一样

      2容器依赖linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)

    1.1.2 一种操作系统基本的 虚拟化技术

    我们使用的VMware虚拟机就是虚拟化技术
    一个操作系统下,虚拟出来,其他操作系统的机器

    1.1.3 一种简单的应用程序打包工具
    1.1.4 依赖Linux内核特性

    Namespace(资源隔离) 和 Cgroup(资源限制)

    1.2 资源隔离和资源限制

    • 资源隔离:

      1)Linux Namespaces 机制提供一种资源隔离方案,每个namespace看上去就像一个单独的

    Linux系统。

    ​ 2)PID ,IPC(进程通信), Network 等系统资源不再是全局性的,而是属于某个特定的

    Namespace。

    ​ 3)每个namespace下的 资源对于其他namespace 下的资源都是透明, 不可见的 。

    ​ 4)系统中可以同时存在 两个进程号为0,1,2的进程 ,由于 属于不同的namespace ,所以它们

    之间并不冲突。

    ​ 5)而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自

    己namespace下的进程。

    ​ 6)这样 每个namespace看上去就像一个单独的Linux系统 。

    • 资源限制:

      1)为了让容器中的进程更加可控, Docker 使用 Linux cgroups 来限制容器中的进程允许使

    用的系统资源 。

    ​ 2)可以在启动容器是指定每个容器可以使用的 网络、磁盘、CPU以及内存等

    1.3 ubuntu安装docker

    1.3.1 安装docker
    # 1.卸载旧版本 
    sudo apt-get remove docker docker-engine docker.io containerd runc 
    
    # 2.更新ubuntu的apt源索引 
    # 修改apt国内源为中科大源 
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 
    sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/' /etc/apt/sources.list sudo apt update
    
    # 3.安装包允许apt通过HTTPS使用仓库 
    sudo apt-get install  apt-transport-https  ca-certificates  curl  software-properties-common
    
    # 4.添加Docker官方GPG key 
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 
    
    # 5.设置Docker稳定版仓库(国内使用都用用国内的源) 
    # 5.1 设置使用阿里云 
    add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" 
    
    # 5.2 设置使用官方,很慢(不建议用这个) 
    sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable" 
    
    # 6.添加仓库后,更新apt源索引 
    sudo apt-get update 
    
    # 7.安装最新版Docker CE(社区版) 
    sudo apt-get install docker-ce 
    
    # 8.检查Docker CE是否安装正确 
    sudo docker run hello-world
    
    1.3.2 docker默认是国外源可以设置成国内镜像源
    root@linux-node1 django-docker]  # vim /etc/docker/daemon.json   # 设置docker镜像源 
    { 
        "registry-mirrors": ["http://hub-mirror.c.163.com"] 
    }
    或者
    { 
        "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] 
    }
    
    [root@linux-node2 ~]	# systemctl daemon-reload 		# 重载文件 
    [root@linux-node2 ~]	# systemctl restart docker  	# 重启docker生效
    
    1.3.3 docker启动设置
    # 启动Docker服务并设置开机启动 
    systemctl start docker 
    systemctl enable docker
    
    1.3.4 docker简单使用(创建一个ngixn容器)
    # 1、创建一个nginx容器 
    docker run -it nginx 
    
    # 2、查看docker运行的容器(可以获取到这个容器的id) 
    docker ps 
    
    # 3、访问这个容器 
    # 进入这个nginx容器(进入的文件系统和宿主机是完全隔离的,有自己独立的文件系统) 
    docker exec -it 73877e65c07d bash 
    
    # 4、查看当前容器的 IP 
    docker inspect 73877e65c07d 		# 73877e65c07d是通过docekr ps查看到的容器ID 
    curl 172.17.0.2 					# 测试这个nginx容器是否可以访问
    

    2 Docker基本使用

    2.1 镜像常用管理命令

    [root@linux-node4 diff]# docker help 					# 查看docker帮助 
    [root@linux-node4 diff]# docker image --help 			# 查看 docker中 镜像 相关帮助 
    [root@linux-node4 diff]# docker image ls 				# 查看当前所有镜像 
    [root@linux-node4 diff]# docker image inspect nginx 	# 查看指定镜像 (nginx镜像)详细信息 
    [root@linux-node4 diff]# docker pull nginx:1.14 		# 下载指定版本镜像 nginx 
    [root@linux-node4 diff]# docker image rm nginx:1.14 	# 删除nginx 1.14版 本
    

    2.2 docker创建容器常用命令

    • docker run基本使用
    root@dev:~# docker run -itd nginx 
    root@dev:~# docker ps 
    root@dev:~# docker rm -f e182a69f841d
    
    • docker run常用参数
    -d 					# 后台运行容器,并返回容器ID; 
    -i 					# 以交互模式运行容器,通常与 -t 同时使用; 
    -t 					# 为容器重新分配一个伪输入终端,通常与 -i 同时使用; 
    -P 					# 随机端口映射,容器内部端口随机映射到主机的高端口 
    -p 					# 指定端口映射,格式为:主机(宿主)端口:容器端口 
    --name="nginx-lb" 	# 为容器指定一个名称; 
    --dns 8.8.8.8 		# 指定容器使用的DNS服务器,默认和宿主一致;
    
    • docker使用
    [root@linux-node4 diff]			# docker container run -d --name web3 -e test=123456 -p 8800:80 -h webhostname --restart always nginx 
    -d 								# 后台启动nginx容器 
    --name web3 					# 自定义容器名字(默认会是一段随机字符串) 
    -e test=123456 					# 启动容器添加变量 test=123456 (echo $test) 
    -p 8800:80 						# 宿主机的8800端口映射到docker容器的80端口中 
    -h webhostname 					# docker容器主机名 (a300f394af88) 
    --restart always 				# 宿主机重启自动拉起这个docker容器 nginx # 使用这个nginx镜像启动容器 注:http://192.168.56.12:8800/ 访问这个docker nginx 
    [root@linux-node4 diff]			# docker logs web # 查看上 面启动的web容器的日志 
    [root@linux-node4 diff]			# docker exec -it web bash # 进入容器web
    

    2.3 docker安装ES

    2.3.1 拉取docker镜像
    # 从仓库拉取镜像 
    sudo docker image pull delron/elasticsearch-ik:2.4.6-1.0 
    
    2.3.2 使用docker安装ES
    docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch delron/elasticsearch-ik:2.4.6-1.0 
    
    2.3.3 测试结果
    http://192.168.56.100:9200/
    

    2.4 具体代码

    2.4.1 settings.py
    INSTALLED_APPS = [
        'haystack', # haystack要放在应用的上面
        'apps.user.apps.UserConfig',        # 用户app
    ]
    
    
    TEMPLATES = [
        {
            'DIRS': [os.path.join(BASE_DIR,'templates')],
        },
    ]
    
    # ES引擎
    HAYSTACK_CONNECTIONS = {
          'default': {
                  'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
                  'URL': 'http://127.0.0.1:9200/',     # Elasticsearch服务器ip地址,端口号固 定为9200
                  'INDEX_NAME': 'syl'                   # Elasticsearch建立的反向索引库的名称
          },
    }
    
    # 添加此项,当数据库改变时,会自动更新索引,非常方便
    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
    
    2.4.2 views.py
    from syl import settings
    from django.core.paginator import InvalidPage, Paginator
    from haystack.forms import ModelSearchForm
    from django.http import JsonResponse, HttpResponse
    import json
    
    # 如果settings.py中配置就是用settings中配置的,否则就每页15条
    RESULTS_PER_PAGE = getattr(settings, 'HAYSTACK_SEARCH_RESULTS_PER_PAGE', 15)
    
    def course_index_search(request):
        # 1.获取前端传过来的关键字(查询数据)
        query = request.GET.get('q', None)
        page = int(request.GET.get('page', 1))  # 第几页
        page_size = int(request.GET.get('page_size', RESULTS_PER_PAGE))     # 每页多少条
        # 2.获取查询条件,进行查询
        if query:
            form = ModelSearchForm(request.GET, load_all=True)      # 将查询条件传递给查询对象
            if form.is_valid():
                results = form.search()     # 查询出来的最终数据
            else:
                results = []
        else:
            return HttpResponse({"code": 404, "msg": 'No file found!', "data": []})
        # 3.对结果集进行分页
        paginator = Paginator(results, page_size)
        try:
            page = paginator.page(page)     # 从分好的页中拿第几页
        except InvalidPage:                 # 如果分页出错
            return JsonResponse({"code": 404, "msg": 'No file found!', "data": []})
        # 4.把查询的分页结果集对象转换成json格式
        jsondata = []
        for result in page.object_list:  # 分页后的课程查询结果
            data = {
                'id': result.object.id,
                'title': result.object.title,
                'desc': result.object.desc,
                'img': request.scheme + '://' + request.META['HTTP_HOST'] + result.object.img.url,
                # 'follower': result.object.follower,
                'learner': result.object.learner,
                'status': result.object.status,
                'course_type': result.object.course_type.id
            }
            jsondata.append(data)
            result = {
                "code": 200,
                "msg": 'Search successfull',
                "data": {"count": page.paginator.count, "results": jsondata}
            }
            # return JsonResponse(result)
            return HttpResponse(json.dumps(result, ensure_ascii=False))
    
    2.4.3 构建倒排索引
    python manage.py rebuild_index
    
    2.4.4 测试接口
    http://192.168.56.100:8888/search/?q=入门&page=1&page_size=1
    

    3 安装常用报错

    3.1 给指定ubuntu更改源

    3.1.1 查看ubuntu版本
    cat /etc/issue
    
    # Ubuntu 18.04.5 LTS 
     l
    
    3.1.2 这里以 18.04.5为例更改源
    sudo gedit /etc/apt/sources.list
    
    • 把这几行代码放在最上面
      • 清华源
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
    
    • 还可以加入阿里源
      • 阿里源
    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    #deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    #deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    #deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    #deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    #deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    
    • 还可以加入中科大
      • 中科大
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    
    • save文件
    sudo apt-get update
    sudo apt-get upgrade
    
    • 注意!!!
    # Ubuntu 18.04 在系统设置里面是找不到软件源设置界面按钮的(找了好久都没找到T-T),所以需要一些指令帮助启动图形界面以便设置软件源。
    sudo update-manager -c -d
    
    • 设置源

    3.2 容器报错

    • 使用docker 出现Error response from daemon: Conflict. The container name is already in use
    • 解决方法:

    1)给容器换一个名字, 比如说 docker run -it --name=mycentos2 centos:7 /bin/bash, 可以解决问题.
    2)将原来的容器删除

    • 查询当前容器:
    docker container ls -all
    
    • 删除存在的容器
    删除当前容器:
    docker container rm 容器名
    # 提示: 这一步要确定删除容器没问题的情况下, 才可以做
    

    3.3 显示没有安装elasticsearch

    • pycharm中要安装elasticsearch
  • 相关阅读:
    大三上周总结
    大三上周总结
    大三上周总结
    大三上周总结
    大三上周总结
    大三上周总结
    python+requests+unittest 搭建接口自动化测试框架(四)
    python+requests+unittest 搭建接口自动化测试框架(三)
    python+requests+unittest 搭建接口自动化测试框架(二)
    python+requests+unittest 搭建接口自动化测试框架(一)
  • 原文地址:https://www.cnblogs.com/mapel1594184/p/13962275.html
Copyright © 2011-2022 走看看