시나리오: Chaincode as a Service 실행
다음 예에서는 FabCar 체인코드를 외부 서비스(Kubernetes 클러스터의 POD)로 실행한 다음 Oracle Blockchain Platform에 배포할 수 있는 방법을 보여 줍니다.
다음 단계를 완료하기 전에 체인코드를 Oracle Blockchain Platform에서 외부 패키지로 배포하십시오.
fabcar/external
가 포함된hyperledger/fabric-samples
저장소에서 GitHub 디렉토리를 복제합니다. 이 디렉토리는 Go,fabcar.go
및Dockerfile
파일에 있는 FabCar 체인 코드의 외부 버전을 포함합니다.metadata.json
및chaincode.env.example
파일을 무시합니다.- 다음 예와 같이
Dockerfile
파일을 수정합니다.# 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"]
이 명령 시퀀스는 Go 및 Alpine Linux에 대한 특정 버전의 Go 이미지로 새 이미지를 빌드하기 위한 기본 이미지를 설정하고, 디렉토리를 만들고, 해당 디렉토리를 작업 디렉토리로 설정합니다. 로컬 내용을 이미지에 복사하고, Go 종속성을 인출 및 설치하고, Go 코드를 컴파일하고, 포트 9999에서 수신하도록 컨테이너를 구성하고,
fabcar
실행 파일을 실행하도록 기본 명령을 설정합니다. - 다음 명령을 실행하여
fabcar-sample
라는 Docker 이미지를 만든 다음 저장소로 푸시할 수 있는 Docker 이미지를 빌드합니다.docker build -t fabcar-sample .
- 체인코드가 포함된 Docker 이미지를 실행할 Kubernetes 배치 YAML 파일을 생성합니다. 다음 예는
deployment.yaml
파일을 보여줍니다. Docker 이미지가 풀링되는 저장소는repository.example.org
입니다. 이미지 풀링에 사용되는 Kubernetes 암호 이름은ocirsecret
입니다.CHAINCODE_SERVER_ADDRESS
값은 0.0.0.0:9999이며, 이는 서버가 컴퓨터와 연관된 IP 주소에서 포트 9999의 수신 연결을 허용하도록 구성되어 있음을 나타냅니다. 외부 체인코드 유형을 선택하고.zip
파일을 업로드하여 Oracle Blockchain Platform의 피어 노드에 배포할 때 표시되는 체인코드 패키지 ID에서CHAINCODE_ID
값을 가져옵니다. Oracle Blockchain Platform UI에서 체인코드 ID는 chaincode_name:package_ID로 표시됩니다. Java 체인 코드의 경우 체인코드 ID 변수를CORE_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
- 다음 명령을 실행하여
chaincode
네임스페이스에서 Kubernetes 암호를 생성합니다. name_of_secret의 경우deployment.yaml
파일에서 암호를 지정합니다. 이 예에서 암호 이름은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'
- 다음 명령을 실행하여 Kubernetes Pod 및 서비스를 배치합니다.
kubectl apply -f deployment.yaml
이제 Oracle Blockchain Platform에서 외부 체인코드를 사용하는 트랜잭션을 실행할 수 있습니다.