CentOS下Docker安装部署及常用命令
1.查看镜像版本
[root@localhost conf] docker search elasticsearch
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
elasticsearch Elasticsearch is a powerful open source sear… 4048 [OK]
nshou/elasticsearch-kibana Elasticsearch-7.1.1 Kibana-7.1.1 110 [OK]
itzg/elasticsearch Provides an easily configurable Elasticsearc… 69 [OK]
mobz/elasticsearch-head elasticsearch-head front-end and standalone … 52
elastichq/elasticsearch-hq Official Docker image for ElasticHQ: Elastic… 44 [OK]
elastic/elasticsearch The Elasticsearch Docker image maintained by… 26
bitnami/elasticsearch Bitnami Docker Image for Elasticsearch 25 [OK]
2.下载对应镜像
采用命令 docker pull 镜像名:版本号
不输入版本号默认下载最新版,本文采用5.6.15 版本
[root@localhost conf] docker pull logstash:5.6.15
3.查看已下载的镜像
[root@localhost conf] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zookeeper latest 611ffeaf5959 2 weeks ago 224MB
mysql 5.7 1e4405fe1ea9 4 weeks ago 437MB
rabbitmq management 36ed80b6a1b1 4 weeks ago 180MB
logstash 5.6.15 4b1eb31737d4 9 months ago 660MB
mongo 3.2 fb885d89ea5c 13 months ago 300MB
redis 3.2 87856cc39862 14 months ago 76MB
elasticsearch 5.6.11 362c5cb1669b 15 months ago 486MB
kibana 5.6.11 388661dcd03e 15 months ago 390MB
docker.elastic.co/logstash/logstash 6.2.4 00a38ba5444c 20 months ago 657MB
nginx 1.10 0346349a1a64 2 years ago 182MB
[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es1/conf/
[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es2/conf/
[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es3/conf/
并创建配置文件(为空亦可,仅做关联,下面统一进行配置)
[root@localhost conf] pwd
/mydata/elasticsearch/es1/conf
[root@localhost conf] ll
总用量 4
-rw-r--r--. 1 root root 975 12月 23 10:29 elasticsearch.yml
本文采用一台虚拟机的不同端口,模拟多台机器
[root@localhost conf] docker run --name es1 \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch/es1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/es1/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11
docker run --name es2 -p 9201:9200 -p 9301:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch/es2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/es2/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11
docker run --name es3 -p 9202:9200 -p 9302:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch/es3/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/es3/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11
创建一个容器,命名为 es2,
将宿主机的9201端口映射到容器的9200端口
并将宿主机的9301端口映射到容器的9300端口,
同时为当前容器设置内存,
然后将宿主机中/mydata/elasticsearch/es3/conf/elasticsearch.yml文件挂载到容器的/usr/share/elasticsearch/config/elasticsearch.yml
将宿主机/mydata/elasticsearch/es3/data目录挂载到容器/usr/share/elasticsearch/data
运行模式:后台运行
容器镜像:elasticsearch
镜像版本:5.6.11
docker run
--name es1 --name name 为当前容器命名
-p 9200:9200 -p 宿主机端口:容器端口 指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器
-p 9300:9300 同上;
9300端口是使用tcp客户端连接使用的端口;内部通信
9200端口是通过http协议连接es使用的端口;外部访问
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 指定key/value进行传递环境变量,为了保证性能(默认自动分配),此处设置es内存
-v 宿主机目录:容器目录 将容器目录挂载到宿主机目录
1. 数据备份
即使容器删除,数据依然存在于宿主机
容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上。一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像)。可以让容器进程持久化的数据保存在主机上,这样即使容器删除了,数据还在。
2. 数据同步
宿主机与容器数据同步
当容器操作容器目录/宿主操作宿主机目录,两者数据都是实时同步的
3. 数据共享
多个容器运行一组相关联的服务,可用来共享一些数据
[root@localhost conf]docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a338b51416d5 elasticsearch:5.6.11 "/docker-entrypoint.…" 34 minutes ago Up 34 minutes 0.0.0.0:9202->9200/tcp, 0.0.0.0:9302->9300/tcp es3
b04453e2fb6c elasticsearch:5.6.11 "/docker-entrypoint.…" 5 hours ago Up 51 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp es1
efdabddf29af elasticsearch:5.6.11 "/docker-entrypoint.…" 5 hours ago Up 50 minutes 0.0.0.0:9201->9200/tcp, 0.0.0.0:9301->9300/tcp es2
操作步骤:
修改宿主机的配置文件,容器内自动同步修改后的配置文件,重启容器即可
[root@localhost conf]vim /mydata/elasticsearch/es1/conf/elasticsearch.yml
# 开启跨域,为了让es-head可以访问
http.cors.enabled: true
#允许跨域,允许所有请求
http.cors.allow-origin: "*"
# 集群的名称,es中 同名即为集群
cluster.name: elasticsearch
# 节点的名称,唯一
node.name: es2
# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
# 允许该节点存储数据(默认开启)
node.data: true
# 允许任何ip访问
network.host: 0.0.0.0
# 通过这个ip列表(内部通讯端口)进行节点发现,我这里配置的是各个容器的ip
discovery.zen.ping.unicast.hosts: ["192.168.33.129:9300","192.168.33.129:9301","192.168.33.129:9302"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 – 导致脑裂 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
[root@localhost conf]docker restart es1 es2 es3