1
安装Docker
关于Docker
入门可以看下我写的这篇《开发也需了解的运维知识之Docker》,也介绍了如何在Linux
服务器上安装Docker
。
2
安装Docker Compose
由于是部署伪集群,以及需要安装kibana
,因此还需要安装Docker-Compose
。Docker-Compose
负责实现对Docker
容器集群的快速编排。
Docker-Compose
项目是由Python
编写的,而pip
是Python
包管理工具,该工具提供了对Python
包的查找、下载、安装、卸载的功能。因此,安装Docker-Compose
之前,需要先安装Python
环境,以及安装pip
,再通过pip
安装Docker-Compose
。
我其实并不懂Python
,但是知其然知其所以然,还是要了解一下,为什么要使用pip
安装Docker-Compose
的。
使用yum
安装pip
yum -y install python-pip
使用pip
安装docker-compose
pip install docker-compose
这是我从网上找的一篇博客介绍的docker-compose
的安装教程,可能这篇博客是很早以前写的,因此并不能安装成功。我跟着提示弄了大概一个多小时,过程就略过了。原因是python
版本太低,需要使用yum
安装新版本的python
和pip
。我升级到3.4
版本之后还是提示版本过低,安装不了。
RuntimeError: Python 3.5 or later is required
提示需要python3.5
或更高的版本。根据提示,我又卸载了3.4
版本,重新安装了3.6
版本。
## 安装EPEL和IUS软件源
yum -y install epel-release
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
## 安装python和pip
yum -y install python36u
yum -y install python36u-pip
关于3.6
版本的安装,可以参考这篇博客Centos7 通过yum安装python3,及virtualenv基本使用。
查看python3.6
是否安装成功
[root@wujiuye01 data]# ls -la /usr/bin/python*
lrwxrwxrwx. 1 root root 7 Oct 8 17:14 /usr/bin/python -> python2
lrwxrwxrwx. 1 root root 9 Oct 8 17:14 /usr/bin/python2 -> python2.7
-rwxr-xr-x. 1 root root 7216 Aug 7 2019 /usr/bin/python2.7
lrwxrwxrwx 1 root root 9 Mar 8 16:39 /usr/bin/python3 -> python3.6
-rwxr-xr-x 2 root root 11408 Aug 8 2019 /usr/bin/python3.6
....
pip
对应也是3.6
版本
[root@wujiuye01 data]# ls -la /usr/bin/pip*
-rwxr-xr-x 1 root root 223 Mar 8 16:28 /usr/bin/pip
-rwxr-xr-x 1 root root 224 Mar 8 15:57 /usr/bin/pip2
-rwxr-xr-x 1 root root 224 Mar 8 15:57 /usr/bin/pip2.7
lrwxrwxrwx 1 root root 9 Mar 8 16:39 /usr/bin/pip-3 -> ./pip-3.6 #软链接
lrwxrwxrwx 1 root root 8 Mar 8 16:39 /usr/bin/pip-3.6 -> ./pip3.6 #软链接
-rwxr-xr-x 1 root root 407 Aug 8 2019 /usr/bin/pip3.6
因为我只是想安装docker-compose
,就不想改pip
软链接到pip3.6
了,而是直接使用pip3.6
安装。
pip-3.6 install docker-compose
如果想要卸载docker-compose
,也是很简单。
pip-3.6 uninstall docker-compose
3
编写docker-compose.yml
Docker-Compose
的工程配置文件默认为docker-compose.yml
。我需要启动一个cerebro
服务容器、一个kibana
服务容器、两个elasticsearch
服务容器,因此docker-compose.yml
的配置如下。
来源于:https://github.com/onebirdrocks/geektime-ELK,稍有改动:
version: '2.2'
services:
# cerebro
cerebro:
image: lmenezes/cerebro:0.8.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://【外网访问的es集群的ip或域名】:9200
networks:
- wjy-es-net
# kibana
kibana:
image: docker.elastic.co/kibana/kibana:7.1.0
container_name: kibana
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- wjy-es-net
# elasticsearch节点1
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name: es-node-01
environment:
- cluster.name=wjy-es-stu-cluster
- node.name=es-node-01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es-node-01,es-node-02
- cluster.initial_master_nodes=es-node-01,es-node-02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- "/data/docker/es7cluster/es-node1-data:/usr/share/elasticsearch/data"
ports:
- "9200:9200"
networks:
- wjy-es-net
# elasticsearch节点2
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name: es-node-02
environment:
- cluster.name=wjy-es-stu-cluster
- node.name=es-node-02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es-node-01,es-node-02
- cluster.initial_master_nodes=es-node-01,es-node-02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- "/data/docker/es7cluster/es-node2-data:/usr/share/elasticsearch/data"
networks:
- wjy-es-net
networks:
wjy-es-net:
driver: bridge
关于docker-compose.yml
配置文件:
version
:指定docker-compose.yml
的版本。services
:多个容器集合,它有多个子集,该子集是自定义的容器。volumes
:定义了卷信息,提供给services
中的具体容器使用。networks
:定义了网络信息,提供给services
中的具体容器使用。4
让服务后台运行,并查询容器启动情况
docker-compose
相关命令 # 启动
docker-compose up
# 后台启动
docker-compose up -d
# 停止
docker-compose down
# 停止容器并且移除数据
docker-compose down -v
第一次执行docker-compose up
会很久,因为需要从远程拉取镜像文件,大概又是一个多小时。
es7_01 | "stacktrace": ["org.elasticsearch.bootstrap.StartupException: ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];",
......
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes",
.....
容器卷本地目录没有权限访问,需要给目录添加写权限。
es_node_02 | ERROR: [1] bootstrap checks failed
es_node_02 | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
elasticsearch
用户拥有的内存权限太小,至少需要262144
;
## 切换到root用户,执行命令:
sysctl -w vm.max_map_count=262144
使用docker-compose up -d
启动服务,让所有容器能够后台运行。使用docker
命令查询容器。
[root@wujiuye01 es7cluster]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04f51ce794f9 docker.elastic.co/kibana/kibana:7.1.0 "/usr/local/bin/kiba…" 8 minutes ago Up 3 minutes 0.0.0.0:5601->5601/tcp kibana
ad50d72184d6 lmenezes/cerebro:0.8.3 "/opt/cerebro/bin/ce…" 8 minutes ago Up 3 minutes 0.0.0.0:9000->9000/tcp cerebro
ea3c3e0aee7d docker.elastic.co/elasticsearch/elasticsearch:7.1.0 "/usr/local/bin/dock…" 8 minutes ago Up 3 minutes 9200/tcp, 9300/tcp es-node-02
a14d52910fe6 docker.elastic.co/elasticsearch/elasticsearch:7.1.0 "/usr/local/bin/dock…" 8 minutes ago Up 3 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp es-node-01
* 服务器安全组记得开放相应的端口
http://【ip或域名】:9200
http://【ip或域名】:9000
http://【ip或域名】:5601