Szenario: Chaincode als Service ausführen
Das folgende Beispiel veranschaulicht die Ausführung des Chaincodes FabCar als externer Service (ein Pod im Kubernetes-Cluster), den Sie dann in Oracle Blockchain Platform bereitstellen können.
Bevor Sie die folgenden Schritte ausführen, stellen Sie den Chaincode als externes Package in Oracle Blockchain Platform bereit.
- Klonen Sie das GitHub-Verzeichnis im Repository
hyperledger/fabric-samples
, dasfabcar/external
enthält. Das Verzeichnis enthält die externe Version des Chaincodes FabCar in Go,fabcar.go
und eine DateiDockerfile
. Ignorieren Sie die Dateienmetadata.json
undchaincode.env.example
. - Ändern Sie die Datei
Dockerfile
wie im folgenden Beispiel dargestellt:# Use the Go image from Docker Hub with specified versions for Go and Alpine Linux FROM golang:1.13.8-alpine3.10 # Create a directory named "chaincode" in the image RUN mkdir /chaincode # Set "/chaincode" as the working directory within the image WORKDIR /chaincode # Copy the contents of the local directory into "/chaincode" in the image COPY . . # Fetch and install Go dependencies for the project RUN go get -d -v ./... # Install Go dependencies RUN go install -v ./... # Compile the Go code in the current directory, creating an executable binary named "fabcar" RUN go build -o fabcar . # Expose port 9999, indicating that the application within the container will listen on this port EXPOSE 9999 # Set the default command to run the "fabcar" executable when the container starts CMD ["/chaincode/fabcar"]
Diese Befehlssequenz stellt das Basisimage für die Erstellung des neuen Images auf das Go-Image mit bestimmten Versionen für Go und Alpine Linux ein, erstellt ein Verzeichnis und legt dieses Verzeichnis als Arbeitsverzeichnis fest. kopiert den lokalen Inhalt in das Image, fängt und installiert Go-Abhängigkeiten, kompiliert den Go-Code, konfiguriert den Container für die Überwachung auf Port 9999 und legt den Standardbefehl zur Ausführung der ausführbaren Datei
fabcar
fest. - Führen Sie den folgenden Befehl aus, um das Docker-Image zu erstellen. Dadurch wird ein Docker-Image namens
fabcar-sample
erstellt, das dann in ein Repository übertragen werden kann.docker build -t fabcar-sample .
- Erstellen Sie eine YAML-Datei für das Kubernetes-Deployment, um das Docker-Image auszuführen, das den Chaincode enthält. Das folgende Beispiel zeigt eine
deployment.yaml
-Datei. Das Repository, aus dem das Docker-Image abgerufen wird, lautetrepository.example.org
. Der Kubernetes-Secret-Name, mit dem Images abgerufen werden, lautetocirsecret
. DerCHAINCODE_SERVER_ADDRESS
-Wert lautet 0.0.0.0:9999. Dies gibt an, dass der Server so konfiguriert ist, dass er eingehende Verbindungen auf Port 9999 von einer beliebigen IP-Adresse akzeptiert, die mit dem Computer verknüpft ist. Rufen Sie den WertCHAINCODE_ID
aus der Chaincode-Package-ID ab, die beim Deployment auf dem Peer-Knoten in Oracle Blockchain Platform angezeigt wird, indem Sie den externen Chaincodetyp auswählen und eine.zip
-Datei hochladen. In der Oracle Blockchain Platform-UI wird die Chaincode-ID als chaincode_name:package_ID angezeigt. Bei Java Chaincode wird die Chaincode-ID-VariableCORE_CHAINCODE_ID_NAME
genannt.apiVersion: apps/v1 kind: Deployment metadata: name: external-fabcar-node namespace: chaincode labels: chaincode-type: external chaincode-name: external-fabcar-node spec: replicas: 1 selector: matchLabels: chaincode-type: external chaincode-name: external-fabcar-node template: metadata: labels: chaincode-type: external chaincode-name: external-fabcar-node spec: imagePullSecrets: - name: ocirsecret containers: - env: - name: CHAINCODE_SERVER_ADDRESS value: "0.0.0.0:9999" - name: CHAINCODE_ID value: "ext-fabcar-node:7f953544f26124914c29467d5079f601ddefa53375fffec830ecd70c13547877" image: repository.example.org/blockchain/fabcar-sample:latest imagePullPolicy: Always name: assettransfer ports: - containerPort: 9999 name: grpc protocol: TCP --- apiVersion: v1 kind: Service metadata: labels: chaincode-name: external-fabcar-node chaincode-type: external name: external-fabcar-node namespace: chaincode spec: ports: - name: grpc port: 9999 protocol: TCP targetPort: 9999 selector: chaincode-name: external-fabcar-node chaincode-type: external type: ClusterIP
- Führen Sie den folgenden Befehl aus, um ein Kubernetes-Secret im Namespace
chaincode
zu generieren. Geben Sie für name_of_secret das Secret aus der Dateideployment.yaml
an. In diesem Beispiel lautet der Name des Secretsocirsecret
.kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
- Führen Sie den folgenden Befehl aus, um den Kubernetes-Pod und -Service bereitzustellen.
kubectl apply -f deployment.yaml
Sie können jetzt Transaktionen ausführen, die den externen Chaincode von Oracle Blockchain Platform verwenden.