Docker安装&Docker常用命令&Portainer&Elasticsearch集群搭建

Docker安装

# 删除历史docker相关包及配置
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 安装所需要安装的包
sudo yum install -y yum-utils

# 配置镜像仓库
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum软件包索引
yum makecache fast

# 安装Docker相关
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
systemctl start docker

# 检查是否安装成功
docker version

# 测试hello-world程序
docker run hello-world

# 查看当前下载的hello-world 镜像
[root@iZuf68bhooanbyuniyoqm0Z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB

# 卸载docker
# 卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd

Docker常用命令

docker --help
# 镜像
docker image COMMAND
# Commands:
    build       构建镜像
    history     查看镜像构建历史
    import      Import the contents from a tarball to create a filesystem image
    inspect     洞察:查看详情
    load        导入
    ls          List images
    prune       移除未使用的
    pull        从仓库拉取
    push        推送到仓库
    rm          Remove one or more images
    save        导出
    tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
# 导出镜像为文件
docker image save hello-world -o hello.img
# 导入镜像
docker image load -i hello.img


# 网络
docker network --help
# 环境部署的三个时代
# 	同一个服务器部署多个网站,一个被入侵,全体都挂
#		同一个服务器安装多个虚拟机,虚拟机里部署网站(实现隔离)
#		同一个服务器,多个容器(默认隔离)
Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks


# 文件存储 (volume)
# 卷(volume)是Docker持久化工具,文件存储
Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes


# 容器(*)
Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit code
  
# run命令重点参数
docker run [参数] [镜像名称] bash
		--name my_name # 指定容器名称
		--rm # 结束自动删除
		--net my_net # 指定容器加入的网络
		--volume ${PWD}:/tmp # 把当前目录挂载到容器中
		-it # 进入容器内部,挂载终端
		-d # 以守护进程运行
		-p # 端口映射

# 配置阿里云镜像加速
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors": ["https://ysyq7xvr.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

DockerUI Portainer

# 查看DockerUI Portainer镜像
docker search Portainer

# 选择喜欢的DockerUI风格镜像下载
docker pull docker.io/portainer/portainer

# 启动UI
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer portainer/portainer

# 查看容器
docker ps -a

Docker ES 安装集群的搭建

# 使用docker安装ES并且完成集群配置工作

# 安装ES镜像
docker pull elasticsearch:7.17.0

# 在根目录建立一个文件夹ES/config
mkdir -p /ES/config
# 进入config
cd /ES/config
# 分别创建三个文件
vim es1.yml
vim es2.yml
vim es3.yml

# 三个文件内容如下
# 集群唯一名称,所有节点一致
cluster.name: elasticsearch-cluster
# 节点名称
node.name: es-node1
# 设置可以访问的ip,默认为0.0.0.0,这里全部设置通过
network.host: 0.0.0.0
# 设置其他节点和该节点交互的ip地址
network.publish_host: 192.168.1.1
# 设置对外服务的http端口,默认9200
http.port: 9200
# 设置节点之间交互的tcp端口,默认为9300
transport.tcp.port: 9300
# 是否支持跨域
http.cors.enabled: ture
# 表示支持所有域名
http.cors.allow-origin: "*"
# 配置该节点是否有资格被选举为主节点(候选主节点),为了防止脑裂,配置奇数个候选主节点
node.master: ture
# 配置该节点是数据节点,用于保存数据
node.data: ture
# 集群各节点IP地址
discovery.zen.ping.unicast.hosts:
["192.168.1.1:9300","192.168.1.1:9301",i"192.168.1.1:9302"]
# 自动发现master节点的最小数
discovery.zen.minimum_master_nodes: 1
# v7+ 集群配置新方案
cluster.name: elasticsearch-cluster 
node.name: es-node1 
node.master: true  
node.data: true 
# path.data: /opt/elasticsearch-7.0.0/data 
# path.logs: /opt/elasticsearch-7.0.0/logs 
network.host: 0.0.0.0
transport.tcp.port: 9300 
transport.tcp.compress: true 
http.port: 9200 
http.max_content_length: 100mb 
bootstrap.memory_lock: true 
discovery.seed_hosts: ["192.168.1.1:9300","192.168.1.1:9301","192.168.1.1:9302"]
cluster.initial_master_nodes: ["192.168.1.1:9300","192.168.1.1:9301","192.168.1.1:9302"]
gateway.recover_after_nodes: 2 
gateway.recover_after_time: 5m 
gateway.expected_nodes: 3 

  • Es1.yml
cluster.name: elasticsearch-cluster
node.name: es-node1
network.host: 0.0.0.0
network.publish_host: 192.168.1.1
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
cluster.initial_master_nodes: ["es-node1"]
discovery.zen.ping.unicast.hosts: ["192.168.1.1:9300","192.168.1.1:9301","192.168.1.1:9302"]
# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置
  • Es2.yml
cluster.name: elasticsearch-cluster
node.name: es-node2
network.host: 0.0.0.0
network.publish_host: 192.168.1.1
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
cluster.initial_master_nodes: ["es-node1"]
discovery.zen.ping.unicast.hosts: 
["192.168.1.1:9300","192.168.1.1:9301","192.168.1.1:9302"]
# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置
  • Es3.yml
cluster.name: elasticsearch-cluster
node.name: es-node3
network.host: 0.0.0.0
network.publish_host: 192.168.1.1
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
cluster.initial_master_nodes: ["es-node1"]
discovery.zen.ping.unicast.hosts: ["192.168.1.1:9300","192.168.1.1:9301","192.168.1.1:9302"]
# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置

OpenJdk搭建

# 检查并卸载OpenJDK
# 检查命令
java -version
rpm -qa | grep java
# 卸载命令
rpm -e –nodeps tzdata-java-2012c-1.el6.noarch
rpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64

# 将安装文件上传到linux服务器后,进入到该目录执行解压安装
tar -xvf jdk-7u75-linux-x64.tar

# 解压完成后创建一个新的java目录并将刚刚解压的jdk目录移动到我们创建的目录
mkdir -p /wocloud/java
mv ./jdk1.7.0_75 /workcloud/java/

# 最后再删除安装文件
rm -rf jdk-7u75-linux-x64.gz

# 安装完成后需要配置一下环境变量,编辑/etc/profile文件
vi /etc/profile
# 在文件尾部添加如下配置
export JAVA_HOME=/wocloud/java/jdk1.7.0_75 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

# source命令重新加载/etc/profile文件,使得修改后的内容生效
source /etc/profile


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SF4qXOSG-1644740507221)(/Users/xieguohua/Desktop/IDEA/Snip20220212_5.png)]

# 分别创建三个容器
# 查看ES镜像ID
docker images
# 创建容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES01 [镜像ID]

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES02 [镜像ID]

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES03 [镜像ID]

# 本机配置
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES01 6fe993d6e7ed

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES02 6fe993d6e7ed

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES03 6fe993d6e7ed

# 如果遇到elasticsearch启动时错误
# 查看日志
docker logs [容器ID]
# 最大虚拟内存区域vm.max_map_count[65530]太低,请至少增加到[262144]
# 解决方法
# 在/etc/sysctl.conf文件最后添加一行,退出系统目录
vim /etc/sysctl.conf
# 最后一行添加
vm.max_map_count = 655360
# 并执行命令
sysctl -p
# 重新启动elasticsearch,即可启动成功

# 重启三个容器
docker restart ES01 ES02 ES03

# 访问:
http://192.168.1.1:9200/
# 查看节点信息
http://192.168.1.1:9200/_cat/nodes?pretty

ES启动常见问题

# 问题一
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ElasticsearchParseException[malformed, expected settings to start with 'object', instead was [VALUE_STRING]];
# 原因:elasticsearch.yml文件错误
# 解决:参数与参数值等号间需要空格
node.name ="node"  ##错误
node.name = "node" ##正确


# 问题二
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
# 原因:处于对root用户的安全保护,需要使用其他用户组进行授权启动
# 解决:
# step1:用户组进行授权启动
  	groupadd elsearch           
    useradd elsearch -g elsearch -p elasticsearch
    chown -R elsearch:elsearch  elasticsearch-6.3.0
    # 备注: 添加用户组 elsearch  
         # 添加用户 elsearch 密码为 elasticsearch 到用户组 elsearch
         # 将elsearch安装目录授权给 用户组:用户  即 elsearch:elsearch
# step2: 重新启动
    su elsearch
    /elasticsearch-6.3.0/bin/elasticsearch
  	# 备注:切换 elsearch 用户
          # 重新启动
          
          
# 问题三
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot a ...'(errno=12);
# 原因:jvm要分配最大内存超出系统内存
# 解决:
# step1:适当调整指定jvm内存
vi /home/elasticsearch-6.3.0/config/jvm.options 
#备注:编辑elasticsearch jvm配置文件 修改如下 esc+:wq保存退出

## JVM configuration
 
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
 
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
 
-Xms512m
-Xmx512m

	# 备注:由于虚拟机内存制定1g,所以适当降低jvm内存指定
# step2:重启
su elsearch
/elasticsearch-6.3.0/bin/elasticsearch


# 问题四
ERROR: [3] bootstrap checks failed
# 原因:虚拟机限制用户的执行内存
# 解决:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [3802] for user [elsearch] is too low, increase to at least [4096]
# step1:修改安全限制配置文件
su root 
vi /etc/security/limits.conf
    # 备注:使用最高权限 修改安全配置 在文件末尾加入

    # End of file
    elsearch       hard        nofile        65536 
    elsearch       soft        nofile        65536
    *               soft       nproc         4096
    *               hard       nproc         4096
    # 备注: elsearch为用户名 可以是使用*进行通配  
    # nofile 最大打开文件数目
    # nproc 最大打开线程数目
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# step2:修改系统配置文件
vi /etc/sysctl.conf 
# 备注:行末加上vm.max_map_count = 655360 ,esc +:wq保存退出
# step3:重启


# 问题五
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/home/elasticsearch-6.3.0/data/elasticsearch]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
# 原因:线程占用
# 解决:重新启动
# step1:杀死elasticsearch线程
ps -ef | grep elastic
# step2: 重启


# 问题六
ERROR: bootstrap checks failed
memory locking requested for elasticsearch process but memory is not locked
# 原因:锁定内存失败
# 解决:vim /etc/security/limits.conf 添加下面两行
soft memlock unlimited
hard memlock unlimited
# tips:* 代表的是linux内所有的用户

# 问题七
Unsupported major.minor version 52.0
# 原因:java版本太低
# 解决:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0以上


# 问题八
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]
# 原因:elasticsearch新版本是不允许安装插件在文件目录plugins下面的
# 解决:将plugins下面的插件目录放到其他目录即可

Elasticsearch-Head管理界面

# Docker 部署 Elasticsearch-Head
# 可以通过管理界面查看ElasticSearch相关信息
# 拉取镜像
docker pull mobz/elasticsearch-head:5
# 运行容器
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
# 等待启动成功

# 常见问题
_search 406 (Not Acceptable)
# 解决办法
  # 进入docker es_admin容器
  # 命令 docker exec -it [容器ID] /bin/bash
  docker exec -it es_admin /bin/bash
  # 进入head安装目录
  # cd 进入_site/目录,编辑vendor.js共两处(若无vim编辑器,见下面Docker容器vim安装)
  6886行:/contentType: "application/x-www-form-urlencoded"改成 --> 
  contentType: "application/json;charset=UTF-8"
  7573行:var inspectData = s.contentType === "appliaction/x-www-form-urlencoded"&& 改成 -->
  var inspectData = s.contentType === "application/json;charset=UTF-8"&&
  
# Docker容器vim安装
# 更新源
apt-get update
# 先更新 防止提示:Unable to locate package vim
# 安装vim
apt-get install vim 

ES基本操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值