docker容器安装部署一些组件的流程

211 阅读8分钟

对外开放端口通常用于与外部系统进行通信,包括网络请求和数据交换。根据你的问题,以下是对外开放端口的服务:

  • MySQL:MySQL数据库默认使用3306端口与外部应用程序进行通信。
  • MongoDB:MongoDB数据库默认使用27017端口与外部应用程序进行通信。
  • Kafka:Kafka消息系统默认使用9092端口与外部应用程序进行通信。
  • Clickhouse:Clickhouse数据库默认使用8123和9000端口与外部应用程序进行通信。
  • Elasticsearch:Elasticsearch搜索引擎默认使用9200和9300端口与外部应用程序进行通信。
  • Kibana:Kibana可视化工具默认使用5601端口与外部应用程序进行通信。

对内服务通常用于集群内部通信,不直接暴露给外部系统。以下服务属于对内服务:

  • ZooKeeper:ZooKeeper分布式协调服务默认使用2181端口与集群中的其他节点通信。
  • Flink:Flink分布式流处理框架包括JobManager和TaskManager。它们之间的通信通常不需要对外的端口,而是通过内部网络进行连接。
安装环境及服务要求(必须)

java jdk-17

zookeeper 3.7.1

kafka 2.8.0

mongodb 4.4.23

elasticsE 7.13.2

flink 1.13.6

clickhouse 21.3.20

jdk17 的安装

# 下载jdk17
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

# 解压jdk压缩包
tar -zxvf jdk-17_linux-x64_bin.tar.gz

# 配置环境变量
JAVA_HOME=/data1/java/jdk-17.0.9

# 配置生效
source /etc/profile

手动切换jdk版本
sudo update-alternatives --config java

  1. 安装docker

1.1、升级所有包

yum update  //升级所有包,同时升级软件和系统内核

yum upgrade //升级所有包,不升级软件和系统内核

1.2、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.3、添加aliyun docker软件包源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.4、添加软件包源到本地缓存

yum makecache fast

rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

1.5、安装docker

yum -y install docker-ce

1.6、设置开机启动docker

systemctl enable docker

1.7、重启docker

systemctl restart docker

1.8、配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:cr.console.aliyun.com/cn-hangzhou… 也可以直接复制以下命令:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://q9n10oke.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

1.9、安装docker-compose

直接使用 yum install docker-compose 安装即可。

如果加载 docker-compose.yml 文件出现以下错误,说明 yml 中配置的 version 不支持,修改成报错信息中支持的版本即可(以下报错中提示,只支持 version 为 2.2 或者 3.3 的版本)

[root@VM-8-17-centos redis-sentinel]# docker-compose up -d
ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
  1. docker容器安装mongoDB数据库

2.1 拉取镜像

# 拉取镜像
docker pull mongo:4.4.23

# 创建文件夹
cd /ssd_data1/
mkdir -p mongo/conf 
mkdir -p mongo/data
mkdir -p mongo/logs

2.2 新增mongod.conf文件

cd mongo/conf 
vim mongod.conf


# 数据库文件存储位置
dbpath = /data/db
# log文件存储位置
logpath = /data/log/mongod.log
# 使用追加的方式写日志
logappend = true
# 是否以守护进程方式运行
# fork = true
# 全部ip可以访问
bind_ip = 0.0.0.0
# 端口号
port = 27017
# 是否启用认证
auth = true
# 设置oplog的大小(MB)
oplogSize=2048

2.3 新增mongod.log文件

cd ../logs/
vim mongod.log
 #  #log文件不需要内容
chmod  777 mongod.log 

2.4 docker容器构建以及启动mongodb

docker run -it \
        --name mongodb \
        --restart=always \
    --privileged \
    -p 27018:27017 \
    -v /ssd_data1/mongo/data:/data/db \
    -v /ssd_data1/mongo/conf:/data/configdb \
    -v /ssd_data1/mongo/logs:/data/log/  \
    -d mongo:4.4.23 \
    -f /data/configdb/mongod.conf

2.5 进入容器创建账号密码

##进入容器##
docker exec -it mongodb sh

##进入mongodb shell##
mongosh admin


##创建账号/密码##
db.createUser({ user: 'admin', pwd: '123', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

2.6 Navicat连接MongoDB

  1. docker 安装kafka、zookeeper

3.1 下载镜像

cmak是kafka集群可视化管理页面

docker pull zookeeper:3.7.1
docker pull bitnami/kafka:2.8.1
docker pull vimagick/cmak

3.2 安装zookeeper

docker run -itd --name zookeeper \
        --restart=always \
    -p 2182:2181 \
        -e ALLOW_ANONYMOUS_LOGIN=yes \
        zookeeper:3.7.1

查看zookeeper容器日志(可省略)

docker logs -f zookeeper

3.3 安装kafka

下面配置中IP地址192.168.3.24需要改为服务器的IP地址

docker run -d --name kafka -p 9093:9092 --restart=always \
    -e KAFKA_HEAP_OPTS="-Xmx256m -Xms64m" \
    -e KAFKA_BROKER_ID=0 \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.3.24:2182 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.3.24:9092 \
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
    -e TZ="Asia/Shanghai" bitnami/kafka:2.8.0

查看kafka容器日志(可省略)

docker logs -f kafka

3.4 安装可视化工具CMAK(原Kafka-Manager)

docker run -d --name cmak \
        --restart=always \
        -p 9095:9000 \
        -e ZK_HOSTS="192.168.3.24:2182" \
        vimagick/cmak:latest

查看CMAK容器日志(可省略)

docker logs -f cmak
  1. docker安装ClickHouse

4.1 docker拉取镜像

docker pull clickhouse/clickhouse-server:21.3.20
docker pull clickhouse/clickhouse-client:21.3.20

4.2 安装ClickHouse

# 提前在有docker环境的centos7系统下执行命令:
# 启动clickhouse-server
docker run -d --name clickhouse --ulimit nofile=262144:262144 \
-p 8123:8123 -p 9000:9000 -p 9009:9009 --privileged=true \
-v /ssd_data1/clickhouse/log:/var/log/clickhouse-server \
-v /ssd_data1/clickhouse/data:/var/lib/clickhouse clickhouse/clickhouse-server:21.3.20

# 执行clickhouse-client
docker run -it --rm --link clickhouse:clickhouse-server clickhouse/clickhouse-client:21.3.20 --host clickhouse-server
这将连接到你之前运行的 ClickHouse 服务器容器,并在命令行界面中提供一个交互式的 ClickHouse 客户端。通过该客户端,你可以执行查询、管理数据库和执行其他操作。

  1. Docker 安装elasticsearch

5.1 拉取elasticsearch镜像

docker pull elasticsearch:7.13.2

# 创建需要挂载的目录
mkdir -p /ssd_data1/elasticsearch/config
mkdir -p /ssd_data1/elasticsearch/data
mkdir -p /ssd_data1/elasticsearch/logs
mkdir -p /ssd_data1/elasticsearch/plugins

# 添加配置项到 elasticsearch.yml
vim /ssd_data1/elasticsearch/config/elasticsearch.yml
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"

# 设置目录权限(否则可能启动不了容器)
chmod -R 777 /ssd_data1/elasticsearch/

5.2 启动****elasticsearch

docker run --name elasticsearch \
-p 9220:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e TAKE_FILE_OWNERSHIP="true" \
-v /ssd_data1/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /ssd_data1/elasticsearch/data:/usr/share/elasticsearch/data \
-v /ssd_data1/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /ssd_data1/elasticsearch/logs:/usr/share/elasticsearch/logs \
-d elasticsearch:7.13.2

5.3 验证elasticsearch是否启动成功

linux内用curl访问: curl http://localhost:9200,由于映射的端口更改,输入curl http://localhost:9220类似如下的信息表示安装成功

sq-machine-001@sqmachine001 /ssd_data1/kibana/config] $ curl http://localhost:9220
{
  "name" : "bc855e6774ef",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zgpAJ7mtRj2rfsA8WnEKJQ",
  "version" : {
    "number" : "7.13.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4d960a0733be83dd2543ca018aa4ddc42e956800",
    "build_date" : "2021-06-10T21:01:55.251515791Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

5.4 插件安装 (暂时未安装)

插件安装可以用elasticsearch-plugin install url命令

比如安装:elasticsearch-analysis-ik(分词器),Ik分词器版本要和ES和Kibana版本保持一致

docker进入容器命令

docker exec -it elasticsearch /bin/bash

# plugins安装步骤
cd /usr/share/elasticsearch/plugins/

# 安装插件,elasticsearch-analysis-ik版本与elasticsearch保持一致,即7.13.2
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.2/elasticsearch-analysis-ik-7.13.2.zip 

# 退出容器
exit

# 重启docker容器
docker restart elasticsearch

5.5 分词器使用验证 (暂时未安装)

ik_smart:智能分词,最少切分,宁缺毋滥,保证查准率 ik_max_word:最大化分词法,最细粒度划分,尽量多的有意义的分词,保证查全率,ik_max_word分词包含 ik_smart Postman post请求分词测试:http://ip:9200/_analyze(示例)

{
    "tokenizer": "ik_smart",
    "text": "花城广州"
}

结果如下:

{
    "tokens": [
        {
            "token": "花城",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "广州",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 1
        }
    ]
}
  1. docker安装kibana

安装kibana版本与elasticsearch版本一致

docker pull kibana:7.13.2

# 创建需要挂载的目录:
mkdir -p /ssd_data1/kibana/config

# 设置目录权限
chmod -R 755 kibana/config

# 添加配置项到 Kibana 配置文件 kibana.yml:
echo "elasticsearch.hosts: http://elasticsearch:9200" >> /ssd_data1/kibana/config/kibana.yml

6.1 启动kibana

安装完成以后需要启动kibana容器,使用–link连接到elasticsearch容器,命令如下

docker run --name kibana --link=elasticsearch:elasticsearch -p 5601:5601 -d \
-v /ssd_data1/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
kibana:7.13.2

6.2 启动以后可以打开浏览器输入http://ip:5601就可以打开kibana的界面了。

6.3 测试 Kibana 是否成功连接到 Elasticsearch

  1. docker 搭建 flink

  1. 选择合适的 flink 版本

# 拉取镜像
docker pull flink:1.13.6

# 创建映射目录
mkdir flink
cd flink/
mkdir TaskManager
mkdir JobManager

 # 创建 docker 网络,方便 JobManager 和 TaskManager 内部访问
docker network create flink-network
  1. 建议先简单启动 flink 容器 JobManager、TaskManager 两个容器将配置文件复制出来方便挂载

# 创建 JobManager 
 docker run \
  -itd \
  --name=jobmanager \
  --publish 8081:8081 \
  --network flink-network \
  --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  flink:1.13.6 jobmanager 
  
# 创建 TaskManager 
 docker run \
  -itd \
  --name=taskmanager \
  --network flink-network \
  --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  flink:1.13.6 taskmanager 
  1. copy 配置文件

# jobmanager 容器
 docker cp jobmanager:/opt/flink/conf ./JobManager/
# taskmanager 容器
docker cp taskmanager:/opt/flink/conf ./TaskManager/
  1. 重新创建 JobManager、TaskManager 容器并挂载配置文件

如果需要更改端口号,可以修改 JobManager/conf/flink-conf.yaml

修改 TaskManager/conf/flink-conf.yaml 容器任务槽为 5(有问题,配置挂载后自动变更为1)

  1. 启动容器挂载配置文件

# 启动 JobManager 容器,挂载 JobManager 配置文件目录
docker run -itd -v /ssd_data1/flink/JobManager/conf/:/opt/flink/conf/ --name=jobmanager --publish 8081:8081 --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" --network flink-network flink:1.13.6 jobmanager

# 启动 TaskManager 容器,挂载 TaskManager 配置文件目录
docker run -itd -v /ssd_data1/flink/TaskManager/conf/:/opt/flink/conf/ --name=taskmanager --network flink-network --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" flink:1.13.6 taskmanager


FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager” rpc 地址,必须设置,否则 jobmanager 和 taskmanager 的 rpc 地址都是随机生成,会连接不上,当然你也可以在直接修改配置文件 flink-conf.yaml

如下两个容器启动成功,可以看到 web 端口为 8081,taskmanager 启动一个