
# 准备Docker环境和镜像
本实践使用官方最新稳定版的Docker镜像（基于Docker、Docker-Compose）部署Filebeat和ELK。
#### 前提条件
- 准备一台可连接公网的本地PC，系统为Linux，用于拉取Docker镜像。
- 已根据[使用Filebeat+ELK实现Site协同版实例的API日志监控资源规划](https://support.huaweicloud.com/bestpractice-roma/roma_05_0053.html)，完成服务器资源的准备，且ELK所部署的服务器与APIC的SHUBAO组件所在节点网络互通。
 
#### 操作步骤
1. 确认SHUBAO组件所在节点。
   1. 登录ROMA Connect控制台，在左侧导航栏选择"Site实例"。
   
   2. 在要监控日志的Site协同版实例上，单击站点名称，打开站点信息弹窗。 ![](https://support.huaweicloud.com/bestpractice-roma/zh-cn_image_0000001604611266.png)
      
   
   3. 在弹窗中单击边缘节点的名称，进入该边缘节点的详细信息页面。
      ![](https://support.huaweicloud.com/bestpractice-roma/zh-cn_image_0000001653731249.png "点击放大")
      
   
   4. 在节点信息页面单击"应用"页签，如果存在名称为"shubao-xxxxxx"的容器应用，则该节点为SHUBAO组件所在节点，记录该节点的IP地址。
      ![](https://support.huaweicloud.com/bestpractice-roma/zh-cn_image_0000001652971565.png "点击放大")
      
   
   5. 重复步骤[1.c]-[1.d]，确认并记录所有SHUBAO组件所在节点的IP地址。
    
2. 安装Docker环境。
   - 参考[安装Docker Engine](https://docs.docker.com/engine/install/)，为本地PC安装Docker。
   
   - 参考[安装Docker Engine](https://docs.docker.com/engine/install/)和[安装Docker Compose](https://docs.docker.com/compose/install/standalone/)为ELK所部署的服务器安装Docker和Docker Compose。
   
   - 参考[安装Docker Compose](https://docs.docker.com/compose/install/standalone/)为APIC的SHUBAO组件所在节点安装Docker Compose。
    
3. 在本地PC上，切换**root** 用户，并执行以下命令拉取Docker镜像。
   ```
   docker pull docker.elastic.co/beats/filebeat:8.7.1
   docker pull docker.elastic.co/logstash/logstash:8.7.1
   docker pull docker.elastic.co/elasticsearch/elasticsearch:8.7.1
   docker pull docker.elastic.co/kibana/kibana:8.7.1
   docker pull python:3.8.17
   ```
   
4. 执行以下命令查询[3]中拉取的Docker镜像的镜像ID。
   ```
   docker images
   ```
   执行命令后返回如下信息，其中IMAGE ID即为镜像ID。
   ```
   REPOSITORY                                        TAG      IMAGE ID       CREATED    SIZE
   docker.elastic.co/beats/filebeat                  8.7.1    ************   ********   ******
   docker.elastic.co/logstash/logstash               8.7.1    ************   ********   ******
   docker.elastic.co/elasticsearch/elasticsearch     8.7.1    ************   ********   ******
   docker.elastic.co/kibana/kibana                   8.7.1    ************   ********   ******
   python                                            3.8.17   ************   ********   ******
   ...
   ```
   
5. 修改python镜像。
   1. 执行以下命令进入python镜像。
      ```
      docker run -it python_image_id bash
      ```
      其中，**python_image_id** 为[4]中查询到的python镜像的镜像ID。
      
   
   2. 执行以下命令在镜像内安装依赖。
      ```
      pip install requests
      ```
      
   
   3. 执行以下命令检查安装的依赖是否存在。
      ```
      #启动Python交互式输入，若使用的Python 3，则执行的命令为python3
      python
      import requests
      import json
      import http
      ```
      如果安装的依赖存在，则无回显；如果安装的依赖不存在，则返回"module not found"，需执行[5.b]重新安装依赖。
      
   
   4. 执行以下命令退出Python交互式输入和退出镜像。
      ```
      exit()
      exit
      ```
      
   
   5. 执行以下命令查询python镜像所对应的容器ID。
      ```
      docker ps -a
      ```
      执行命令后返回如下回显信息，其中CONTAINER ID即为容器ID，IMAGE为镜像名称或镜像ID。根据[4]中查询到的python镜像的镜像ID，找到其对应的容器ID。
      ```
      CONTAINER ID     IMAGE        COMMAND        CREATED        STATUS      PORTS      NAMES
      ******           ******       "********"     ********       ********               **********
      ******           ******       "********"     ********       ********               **********
      ...
      ```
      
   
   6. 执行以下命令保存镜像。
      ```
      docker commit container_id python
      ```
      其中，**container_id** 为[5.e]中查询到的python镜像的容器ID。
      
    
6. 执行以下命令导出镜像文件。
   ```
   docker save filebeat_image_id > filebeat_image.tar
   docker save logstash_image_id > logstash_image.tar
   docker save elasticsearch_image_id > elasticsearch_image.tar
   docker save kibana_image_id > kibana_image.tar
   docker save python_image_id > python_image.tar
   ```
   其中**filebeat_image_id** 、**logstash_image_id** 、**elasticsearch_image_id** 、**kibana_image_id** 和**python_image_id** 为[4]中查询到的对应组件的镜像ID。
   
7. 把导出的镜像文件上传到服务器中。
   - 把镜像文件filebeat_image.tar上传到SHUBAO组件所在节点，步骤[1]查询到的所有SHUBAO所在的节点都要上传。
   
   - 把镜像文件logstash_image.tar、elasticsearch_image.tar、kibana_image.tar和python_image.tar上传到ELK所部署的服务器。
    
8. 登录SHUBAO组件所在节点，切换**root** 用户，执行以下命令导入Docker镜像。步骤[1]查询到的所有SHUBAO所在的节点都要执行。
   假设镜像文件所在路径为/tmp。
   ```
   cd /tmp
   docker load < filebeat_image.tar
   ```
   
9. 登录ELK所部署的服务器，切换**root** 用户，执行以下命令导入Docker镜像。
   假设镜像文件所在目录为/tmp。
   ```
   cd /tmp
   docker load < logstash_image.tar
   docker load < elasticsearch_image.tar
   docker load < kibana_image.tar
   docker load < python_image.tar
   ```
   
 
