Cenário: Executar Chaincode como um Serviço
O exemplo a seguir ilustra a execução do chaincode FabCar como um serviço externo (um pod no cluster do Kubernetes) que você pode implantar no Oracle Blockchain Platform.
Antes de concluir as etapas a seguir, implante o chaincode como um pacote externo no Oracle Blockchain Platform.
- Clone o diretório GitHub no repositório
hyperledger/fabric-samples
que contémfabcar/external
. O diretório contém a versão externa do chaincode FabCar em Go,fabcar.go
e um arquivoDockerfile
. Ignore os arquivosmetadata.json
echaincode.env.example
. - Modifique o arquivo
Dockerfile
conforme mostrado no seguinte exemplo:# 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"]
Esta sequência de comandos define a imagem base para a construção da nova imagem para a imagem Go com versões específicas para Go e Alpine Linux, cria um diretório, define esse diretório como o diretório de trabalho, copia o conteúdo local na imagem, extrai e instala dependências de Go, compila o código Go, configura o contêiner para fazer listening na porta 9999 e define o comando padrão para executar o executável
fabcar
. - Execute o comando a seguir para criar a imagem do Docker, que cria uma imagem do Docker chamada
fabcar-sample
, que pode ser enviada para um repositório.docker build -t fabcar-sample .
- Crie um arquivo YAML de implantação do Kubernetes para executar a imagem do Docker que contém o chaincode. O exemplo a seguir mostra um arquivo
deployment.yaml
. O repositório do qual a imagem do Docker é extraída érepository.example.org
. O nome do segredo do Kubernetes usado para extrair imagens éocirsecret
. O valorCHAINCODE_SERVER_ADDRESS
é 0.0.0.0:9999, que indica que o servidor está configurado para aceitar conexões de entrada na porta 9999 de qualquer endereço IP associado ao computador. Obtenha o valorCHAINCODE_ID
do ID do pacote de chaincode que é exibido quando você implanta no nó de mesmo nível no Oracle Blockchain Platform selecionando o tipo de chaincode externo e fazendo upload de um arquivo.zip
. Na interface do usuário do Oracle Blockchain Platform, o ID do chaincode é exibido como chaincode_name:package_ID. Para o chaincode Java, a variável chaincode ID é denominadaCORE_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
- Execute o comando a seguir para gerar um segredo do Kubernetes no namespace
chaincode
. Para name_of_secret, especifique o segredo no arquivodeployment.yaml
. Neste exemplo, o nome do segredo é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'
- Execute o comando a seguir para implantar o pod e o serviço do Kubernetes.
kubectl apply -f deployment.yaml
Agora você pode executar transações que usam o chaincode externo do Oracle Blockchain Platform.