Scénario : Exécuter le code de chaîne en tant que service
L'exemple suivant illustre l'exécution du code de chaîne FabCar en tant que service externe (un pod dans la grappe Kubernetes) que vous pouvez ensuite déployer vers Oracle Blockchain Platform.
Avant d'effectuer les étapes suivantes, déployez le code de chaîne en tant qu'ensemble externe dans Oracle Blockchain Platform.
- Clonez le répertoire GitHub dans le référentiel
hyperledger/fabric-samplesqui contientfabcar/external. Le répertoire contient la version externe du code de chaîne FabCar dans Go,fabcar.goet un fichierDockerfile. Ignorez les fichiersmetadata.jsonetchaincode.env.example. - Modifiez le fichier
Dockerfilecomme illustré dans l'exemple suivant :# 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"]Cette séquence de commandes définit l'image de base pour la construction de la nouvelle image à l'image Go avec des versions spécifiques pour Go et Alpine Linux, crée un répertoire, définit ce répertoire comme le répertoire de travail, copie le contenu local dans l'image, extrait et installe les dépendances Go, compile le code Go, configure le conteneur pour qu'il écoute sur le port 9999 et définit la commande par défaut pour exécuter l'exécutable
fabcar. - Exécutez la commande suivante pour créer l'image Docker, qui crée une image Docker nommée
fabcar-sample, qui peut ensuite être poussée vers un référentiel.docker build -t fabcar-sample . - Créer un fichier YAML de déploiement Kubernetes pour exécuter l'image Docker qui contient le code de chaîne. L'exemple suivant présente un fichier
deployment.yaml. Le référentiel dans lequel l'image Docker est extraite estrepository.example.org. Le nom de la clé secrète Kubernetes utilisée pour extraire des images estocirsecret. La valeurCHAINCODE_SERVER_ADDRESSest 0.0.0.0 :9999, ce qui indique que le serveur est configuré pour accepter les connexions entrantes sur le port 9999 à partir de toute adresse IP associée à l'ordinateur. Obtenez la valeurCHAINCODE_IDde l'ID ensemble de chaîne de blocs affiché lors du déploiement sur le noeud pair dans Oracle Blockchain Platform en sélectionnant le type de code de chaîne externe et en chargeant un fichier.zip. Dans l'interface utilisateur d'Oracle Blockchain Platform, l'ID code de chaîne est affiché sous la forme chaincode_name :package_ID. Pour le code de chaîne Java, la variable d'ID de code de chaîne est appeléeCORE_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 - Exécutez la commande suivante pour générer une clé secrète Kubernetes dans l'espace de noms
chaincode. Pour name_of_secret, spécifiez la clé secrète à partir du fichierdeployment.yaml. Dans cet exemple, le nom de la clé secrète estocirsecret.kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token' - Exécutez la commande suivante pour déployer le pod et le service Kubernetes.
kubectl apply -f deployment.yaml
Vous pouvez désormais exécuter des transactions qui utilisent le code de chaîne externe à partir d'Oracle Blockchain Platform.