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