Scenario: esegui Chaincode as a Service
L'esempio riportato di seguito illustra l'esecuzione del codice concatenato FabCar come servizio esterno (un pod nel cluster Kubernetes) che è possibile distribuire in Oracle Blockchain Platform.
Prima di completare i passi riportati di seguito, distribuire il codice concatenato come package esterno in Oracle Blockchain Platform.
- Clonare la directory GitHub nel repository
hyperledger/fabric-samples
contenentefabcar/external
. La directory contiene la versione esterna del codice concatenato FabCar in Go,fabcar.go
e un fileDockerfile
. Ignorare i filemetadata.json
echaincode.env.example
. - Modificare il file
Dockerfile
come mostrato nell'esempio seguente:# 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"]
Questa sequenza di comandi imposta l'immagine di base per la creazione della nuova immagine sull'immagine Go con versioni specifiche per Go e Alpine Linux, crea una directory, imposta tale directory come directory di lavoro, copia il contenuto locale nell'immagine, recupera e installa le dipendenze Go, compila il codice Go, configura il contenitore per l'ascolto sulla porta 9999 e imposta il comando predefinito per eseguire l'eseguibile
fabcar
. - Eseguire il comando seguente per creare l'immagine Docker, che crea un'immagine Docker denominata
fabcar-sample
, che può quindi essere sottoposta a push in un repository.docker build -t fabcar-sample .
- Creare un file YAML di distribuzione Kubernetes per eseguire l'immagine Docker contenente il codice concatenato. L'esempio seguente mostra un file
deployment.yaml
. Il repository da cui viene estratta l'immagine Docker èrepository.example.org
. Il nome segreto Kubernetes utilizzato per estrarre le immagini èocirsecret
. Il valoreCHAINCODE_SERVER_ADDRESS
è 0.0.0.0:9999, che indica che il server è configurato per accettare le connessioni in entrata sulla porta 9999 da qualsiasi indirizzo IP associato al computer. Ottenere il valoreCHAINCODE_ID
dall'ID package codice concatenato visualizzato quando si esegue la distribuzione sul nodo peer in Oracle Blockchain Platform selezionando il tipo di codice concatenato esterno e caricando un file.zip
. Nell'interfaccia utente di Oracle Blockchain Platform, l'ID codice concatenato viene visualizzato come chaincode_name:package_ID. Per il codice concatenato Java, la variabile ID codice concatenato è denominataCORE_CHAINCODE_ID_NAME
.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
- Eseguire il comando riportato di seguito per generare un segreto Kubernetes nello spazio di nomi
chaincode
. Per name_of_secret, specificare il segreto dal filedeployment.yaml
. In questo esempio, il nome del segreto èocirsecret
.kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
- Eseguire il comando riportato di seguito per distribuire il pod e il servizio Kubernetes.
kubectl apply -f deployment.yaml
Ora è possibile eseguire transazioni che utilizzano il codice concatenato esterno da Oracle Blockchain Platform.