打包elasticsearch镜像:
start.sh #!/bin/bash /bin/cd /usr/local/elasticsearch/bin/ && /bin/su esuser && /bin/sh /usr/local/elasticsearch/bin/elasticsearch su esuser source /etc/profile ./elasticsearch -d tail -f /usr/local/elasticsearch/logs/elasticsearch.log docker run -it -p 9200:9200 -p 9300:9300 60.9.4.21:5000/java-es:latest /bin/bash
===================================================================================================
dockerfile cat << EOF FROM 60.9.4.21:5000/java COPY ./ /workspace CMD ["/workspace/start.sh"] EOF ) > ./Dockerfile
===================================================================================================
elasticsearch.service 这一份配置中要指定JAVA_HOME的环境变量;指定用特定用户esuser启动;Exec地址要写绝对路径;后台启动;启动之前先启动网络服务;延迟五秒在启动 cat /usr/lib/systemd/system/elasticsearch.service [Unit] Description=elasticsearch-server After=network.target [Service] User=esuser Group=esuser Type=forking Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_191/" ExecStart=/bin/sh -c '/usr/local/elasticsearch/bin/elasticsearch -d' ExecStop=kill -9 $(pidof elasticsearch-server) ExecReload=kill -9 $(pidof elasticsearch-server) && /bin/sh -c '/usr/local/elasticsearch/bin/elasticsearch -d' StandardOutput=syslog StandardError=syslog SyslogIdentifier=/var/es/out.log LimitCORE=infinity LimitFSIZE=infinity LimitNOFILE=65536 LimitNPROC=65536 TimeoutStopSec=0 KillSignal=SIGTERM KillMode=process SendSIGKILL=no SuccessExitStatus=143 PrivateTmp=true Restart=always RestartSec=5 [Install] WantedBy=multi-user.target vi /etc/sysctl.conf vm.max_map_count=262144 net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 sysctl -p 重启配置文件 systemctl daemon-reload systemctl status elasticsearch systemctl start elasticsearch 这样可以使用systemctl启动服务了。 systemctl enable elasticsearch 开机自启动 systemctl disable elasticsearch 开机自启动 systemctl list-unit-files 查看开机自启项 docker commit -a="y" -m="finished" 2c569072bcef 60.9.4.21:5000/es:latest #将当前容器打包镜像 docker tag 2c569072bcef 60.9.4.21:5000/es:latest #将镜像命名为60.9.4.21:5000/es:latest docker push 60.9.4.21:5000/es:latest #将镜像推送至私服 镜像名为60.9.4.21:5000/es:latest docker run -it -d --privileged=true -p 9200:9200 -p 9300:9300 60.9.4.21:5000/es:latest #拉取并以特权模式运行容器 curl localhost9200 #访问测试 进入容器:# docker exec -it 2c569072bcefbb /bin/bash 参数解释: 只要使用Systemd这个进程作为启动进程的linux系统,其子进程都会有PrivateTmp这么一个属性,用于设置是否使用私有的tmp目录。 例如:nginx会有一个/systemd/system/nginx.service/tmp目录 作用:PrivateTmp=ture表示开启此属性 把各个service的tmp目录隔离开的话,可以保证一定的安全性。 对于每个service的tmp目录,会在服务启动(start)时创建该目录,并且在关闭(stop)服务时删除该目录。如果我们是使用自己定义的临时目录路径的话,就需要我们自己定义相关的维护机制了(如:定期删除这些临时文件等),而使用这个PrivateTmp的话,就不需要我们自己去维护了。 After=network.target #启动顺序,在network之后启动 Wants=network.target #依赖关系,wants 表示若依赖,requires 表示强依赖,即network.target如果启动失败,elasticsearch也会退出 Restart=on-failure #重启的方式 ,elasticsearch任何意外的失败,都会重启 Restart=always RestartSec=5 这两句话,能够在服务挂掉之后自动重启。 PrivateTmp=true # 指定此进程可以打开的最大文件数 LimitNOFILE=65535 # 指定此进程可以打开的最大进程数 LimitNPROC=65535 # 最大虚拟内存 LimitAS=infinity # 最大文件大小 LimitFSIZE=infinity # 超时设置 0-永不超时 TimeoutStopSec=0 # SIGTERM是停止java进程的信号 KillSignal=SIGTERM # 信号只发送给给JVM KillMode=process # java进程不会被杀掉 SendSIGKILL=no # 正常退出状态 SuccessExitStatus=143
===================================================================================================
Linux 服务管理两种方式service和systemctl service命令构建:/etc/init.d目录建立一个文件elasticsearch 语法:service elasticsearch start systemctl命令构建:在/usr/lib/systemd/system目录建立一个文件elasticsearch.service 语法:systemctl status elasticsearch systemd对应的进程管理命令是systemctl systemctl命令兼容了service即systemctl也会去/etc/init.d目录下,查看,执行相关程序
===================================================================================================
es配置文件加上: network.host: 0.0.0.0 discovery.seed_hosts: ["0.0.0.0"] system下srevice的配置-/bin/sh -c "/usr/local/elasticsearch/bin/elasticsearch --fail --no-block default"
===================================================================================================
不切换用户启动: su - esuser -c /usr/local/elasticsearch/bin/elasticsearch 绝对路径启动: /bin/sh -c "/usr/local/elasticsearch/bin/elasticsearch" /bin/cd /bin/su /bin/cp 查看开机自启项 systemctl list-unit-files
===================================================================================================
报错:IllegalStateException: failed to obtain node locks, tried [[/usr/local/*** 原因:报错原因:没有正常停止elasticsearch 解决:①ps aux | grep elasticsearch②kill -9 进程号③重启./bin/elasticsearch -d
===================================================================================================
指定某个用户:systemctl --user start elasticsearch 1.使用echo命令查看单个环境变量。例如:echo $PATH 2.使用env查看所有环境变量。例如:env 3.使用groups查看用户所属用户组。例如:groups esuser 4.把用户添加进入root组。 例如:usermod -a -G root esuser 那么esuser就在两个组都有。示例:groups esuser root
docker删除所有容器/镜像
docker stop $(docker ps -a -q) #停止所有容器 docker rm $(docker ps -a -q) #删除所有容器 docker rmi $(docker images -q) #删除所有镜像 参数解释:-a :显示所有的容器,包括未运行的; -q :静默模式,只显示容器编号; docker ps -a -q = docker container ls -a -q journalctl -f #查看systemctl命令打印的日志



