herefree 发布的文章

docker数据卷(数据挂载)

1.引言

docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层。这时如果修改正在运行的容器中已有的文件,那么这个文件将会从只读层复制到读写层。该文件的只读版本还在,只是被上面读写层的该文件的副本隐藏。当删除docker,或者重新启动时,之前的更改将会消失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
摘自:https://www.cnblogs.com/lishanlei/p/9503596.html

2.Docker数据管理

docker在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)
  • 挂载主机目录(Bind mounts)

11227136-e5e2fa69a0e8928f.webp

2.1数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除
    Docker中提供了两种挂载方式,-v和-mount

创建数据卷

docker volume create mydata

查看所有数据卷

docker volume ls

dockerls.png

查看数据卷信息

docker volume inspect mydata

2019-10-16 16-48-19.png

注:Mountpoint为数据在本机存储的位置,如果磁盘存储空间不足可修改此位置

挂载
方式一:

docker run --name xxxx -p 8888:8888 -v /my:/docker -it imagename /bin/bash

--name: 为容器起名字
-p :宿主机端口:docker端口 (端口映射)
-v :宿主机目录:docker目录 (必须为绝对路径)

方式二:
docker run --name xxxx -p 8888:8888 --mount type:volume,source=/src/xxx,target=/xxx /my:/docker -it imagename /bin/bash

type选项,其可以是bind,volume,或 tmpfs。本主题讨论卷,因此类型始终是 volume

注意:使用-v参数时如果本地目录不存在Docker会自动为你创建一个文件夹。使用--mount参数时如果本地目录不存在,Docker会报错。Docker挂载主机目录的默认权限是读写,用户也可以通过增加readonly指定为只读。

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。(我的测试:使用 -v 参数并没有这个效果,需要使--mount参数,如果不符请指正)
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中目录非空,那么这些原始数据会被隐藏掉。

    2.2挂载主机目录

    docker run -it --name c1 -v /宿主机目录:/docker目录 -it imagename /bin/bash
    参考:https://cloud.tencent.com/developer/article/1491692
    https://www.jianshu.com/p/19f12c616d0c

背景介绍
使用elasticsearch时,在集群中进行快照是可能需要使用nfs挂载共享目录,接下来记录下如何使用nfs挂载共享目录。

1.使用root用户进入/etc/exports 文件下配置允许访问的机器的ip以及本机公开的文件目录

/home/xxx/software/es_backup xx.x.x.194(rw)
/home/xxx/software/es_backup xx.x.x.193(rw)

解释:第一个是公开的文件目录,第二个是允许访问机器的ip第三个括号内(rw)是允许读写。

2.启动nfs

service nfs restart

如果不行的话。可以在启动nfs之前,事先启动以下三个命令之一。

service portreserve restart
service rpcbind restart
service portmap restart

解释:以上三个命令启动一个即可,因为linux服务器版本不同,所以不一定哪个起作用。

3.在其他机器挂载此共享目录

mount xxx.xxx.xx.xxx:/home/xx/software/es_backup /home/es/software/test
Unmount /home/es/software/test (取消挂载)

解释:mount 后面跟随的是共享目录主机的ip与文件所在目录,以及你本机的需要放置的目录。

unmount 是你取消挂载这个目录。

4.其他问题

如果nfs出现问题,可能会出现 df ls等等命令无法使用,这样你可以使用

mount |grep nfs 

查看你挂载了的哪些节点,然后将之取消挂载。

最近将博客从wordpress迁移到了typecho记录一下
1.从typecho官网下载给的插件
http://docs.typecho.org/plugins/wordpress-to-typecho
2.根据启用插件按照官网写的步骤进行
中间遇到的问题
1.出现 Database Query Error
解决措施
MySQL5.6的严格模式问题?
然后把严格模式关了,成功转换!
所以解决办法是:
在phpmyadmin/mysql命令行下运行:
代码:

SET GLOBAL sql_mode='';

来源http://forum.typecho.org/viewtopic.php?t=8898

注意:因为es不允许root用户启动,所以需要新建新的用户来启动es

1.环境需求

新建普通用户es,单独为普通用户配置java11环境(es7需要java11 支持),然后在~/.bash_profile文件中配置好java环境变量:

export JAVA_HOME=~/software/jdk-11.0.3(java11所在地址 ~表示用户默认目录)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

注意:配置好之后别忘记source ~/.bash_profile使环境变量生效。

查看java版本

java -version

每当启动es时,找不到java黄精,或java环境不对,都可以使用“source ~/.bashrc”启动一次,因为有时候有些系统启动是不默认运行bash_profile,当然在bashrc文件下添加环境变量也是一样。

2.配置elasticsearch.yml文件

进入elasticsearch/config文件夹下

#允许任意IP访问

network.host:0.0.0.0

#开放的端口

http.port: 9200

设置节点是否为master节点(true or false)

node.master: true

设置节点存储数据(true or false)

node.data: true

#集群间通信端口(可以修改)

transport.tcp.port: 9300

#添加跨域

http.cors.enabled: true
http.cors.allow-origin: "*"

#集群名称

cluster.name: es

#节点名称(集群内部节点名称不能相同)

node.name: master

#集群所有节点配置(你主机的ip地址,以及集群中es主机的ip地址,9300为es集群之间默认通信端口,要与设置的集群通信端口一致)如果只有一台设置只设置自己主机的就可以

discovery.seed_hosts: ["xx.xx.xx.xx:9300", "10.1.8.194:9300"]

集群内部master节点配置

cluster.initial_master_nodes: ["xx.xx.xx.xx:9300","xx.xx.xx.xx:9300"]

解释:设置两个节点为master节点如果一个节点挂了,另一个节点可以补上

#解决java.lang.UnsupportedOprationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled

因为Centos不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

3.系统配置问题(存在以下错误是在配置)

问题一:

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

解决切换到root用户

vim /etc/security/limits.conf

添加或修改如下内容

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

问题二

max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf

修改如下内容:

* soft nproc 1024

#修改为

* soft nproc 2048

问题三

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=262144

并执行命令:

sysctl -p

4. 防火墙

关闭防火墙

service iptables stop

或者将9200端口开启(这个没试)

我们在前面讲了线性回归模型,它可以对数据进行预测、拟合。假设有一个二元分类的问题,最终的结果有两类(0,1),此时我们如果使用线性回归模型,那么他的输出结果可能远大于1,或者小于0。这时候我们就需要一个算法使结果的输出一直处于(0,1)之间,这就是我们接下来要讲的逻辑回归算法。它在原有的线性回归算法外面,加上了一个sigmoid函数,使之输出一直处于0,1之间。

Sigmoid函数的公式为:

其中z为我们前面所说的线性函数:

这样最终的预测值就会处于0,1之间,我们将大于0.5的分类为1,小于0.5的分类为0。至于说为什么外面加上sigmiod函数预测值就处于0,1之间,大家可以考虑z,当z特别大时sigmiod函数就会接近1,z非常小时,sigmiod就会非常接近0。下面是sigmiod函数的图像,大家可以自己感受下

损失函数

我们在之前将线性回归的时候讲解了损失函数,但现在我们逻辑回归函数的损失函数与线性回归的损失函数是不同的,线性回归之中用到的损失函数为:

至于说为什么使用这个函数作为逻辑损失函数?大家可以考虑下:

当y=1时,损失函数

如果想损失函数L尽可能小,那么预测值就要尽可能大,因为sigmiod函数取值[0,1],因此预测值会无限接近1。

当y=0时,损失函数

如果想损失函数L尽可能小,那么预测值就要尽可能小,因为sigmiod函数取值[0,1],因此预测值会无限接近0。

参考:吴恩达深度学习视频