# 配置容器环境

### 配置容器环境

Hyperledger Fabric 深度依赖容器技术。为了运行 Fabric 网络，你需要准备好 Docker 和 Docker Compose 环境。

### 1. 安装 Docker

#### Linux

Docker 官方提供了便利安装脚本，适合开发和测试环境快速安装。生产环境不要依赖该脚本，应按 Docker 针对具体发行版提供的仓库安装步骤执行，并固定可审计的软件源和版本。

```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
```

安装完成后，建议将当前用户加入 `docker` 用户组，以免每次运行命令都需要 `sudo`：

```bash
sudo usermod -aG docker $USER

# 注销并重新登录后生效
```

#### macOS / Windows

直接下载并安装 **Docker Desktop**：<https://www.docker.com/products/docker-desktop>

### 2. 安装 Docker Compose

Docker Compose 用于定义和运行多容器应用。

* **Docker Desktop (Mac/Windows)**: 已经内置了 Docker Compose，无需额外安装。
* **Linux**: 如果你通过官方脚本安装了最新的 Docker Engine，现在它通常包含 `docker compose` 插件（注意命令中间没有连字符）。

验证安装：

```bash
docker compose version

# 或者旧版本
docker-compose --version
```

### 3. Fabric 核心镜像

Fabric 的网络节点大多运行在 Docker 容器中。主要涉及以下核心镜像：

| 镜像名称                         | 描述                                                                                                |
| ---------------------------- | ------------------------------------------------------------------------------------------------- |
| `hyperledger/fabric-peer`    | Peer 节点，负责维护账本和执行链码。                                                                              |
| `hyperledger/fabric-orderer` | Orderer 节点，负责交易排序和打包区块（基于 Raft 共识）。                                                               |
| `hyperledger/fabric-tools`   | 包含 `peer`, `osnadmin`, `configtxgen` 等工具的命令行环境，Fabric 2.5 中仍可用于测试；Fabric 3.x 不再发布该镜像，应改用发布的二进制文件。 |
| `hyperledger/fabric-ccenv`   | Go/Java 链码的编译环境。                                                                                  |
| `hyperledger/fabric-baseos`  | 链码运行时的基础操作系统环境。                                                                                   |
| `hyperledger/fabric-ca`      | 证书授权服务（CA），用于身份管理。                                                                                |
| `couchdb`                    | (可选) 用作 Peer 节点的状态数据库，支持富查询。                                                                      |

**状态数据库选择建议**：

* **LevelDB (首选)**：Peer 节点的默认状态数据库（内嵌在 `fabric-peer` 镜像中）。它性能更高、运维更简单。除非你有明确的富查询需求，否则应优先选择 LevelDB。
* **CouchDB**：支持基于 JSON 数据的复杂查询（Rich Queries）。如果你的应用需要对链上数据进行多维度的检索和统计，才建议配置 CouchDB。

**注意**：早期版本的 Kafka 和 Zookeeper 镜像已在 Fabric 2.x 中被弃用，并在 Fabric 3.x 中移除。新网络应优先使用 Raft；需要拜占庭容错时可在 Fabric 3.x 中评估 BFT 排序服务。

### 4. 获取镜像

如果你使用了上一节提到的 `install-fabric.sh` 脚本，镜像应该已经自动下载完毕。

你也可以手动拉取指定版本的镜像：

```bash

# 设置版本变量
export FABRIC_VERSION=2.5.15
export CA_VERSION=1.5.17

# 拉取镜像
docker pull hyperledger/fabric-peer:$FABRIC_VERSION
docker pull hyperledger/fabric-orderer:$FABRIC_VERSION
docker pull hyperledger/fabric-tools:$FABRIC_VERSION
docker pull hyperledger/fabric-ccenv:$FABRIC_VERSION
docker pull hyperledger/fabric-ca:$CA_VERSION
```

### 5. 镜像标签 （Tag）

Fabric 镜像通常提供多种标签：

* `2.5.15`: 具体版本号（推荐生产环境固定使用同一补丁版本）。
* `latest`: 指向最新的发布版本（不建议在生产环境使用，因为可能自动升级导致不兼容）。
* 多架构镜像：Fabric 2.5+ 发布镜像支持 amd64 和 arm64 等架构，通常由镜像清单自动选择。

确保你的 `docker-compose.yaml` 文件中引用的镜像版本与你下载的版本一致，以避免启动失败。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/blockchain_guide/09_fabric_deploy/install_docker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
