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-samplescontenentefabcar/external. La directory contiene la versione esterna del codice concatenato FabCar in Go,fabcar.goe un fileDockerfile. Ignorare i filemetadata.jsonechaincode.env.example. - Modificare il file
Dockerfilecome 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_IDdall'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.