「SolidityとEthereumによる実践スマートコントラクト開発」をDocker環境で試したい。

最終版はこれ。

【ROOT_FOLDER】(フォルダ)
+--docker-compose.yml(ファイル)
+--trufflebox(フォルダ)
   +--Dockerfile(ファイル)
+--ganache-cli(フォルダ)
   +--ganache-data(空のフォルダ)
   +--Dockerfile(ファイル)
  • docker-compose.yml
    version: '3'
    
    services:
      truffle:
        build: 
          context: ./trufflebox/
          dockerfile: Dockerfile
        volumes:
          - ./trufflebox:/usr/src/app/
        command: sh -c "npm run dev"
        ports:
          - "8003:3000"
        depends_on: 
          - ganache
      ganache:
        build:
          context: ./ganache-cli
          dockerfile: Dockerfile
        volumes:
          - ./ganache-cli/ganache-data:/var/ganache
    
  • trufflebox/Dockerfile
    FROM node:alpine  
    
    RUN apk add --update alpine-sdk
    RUN apk add --no-cache git python3 py3-pip g++ make \
        && npm i -g --unsafe-perm=true --allow-root truffle 
    
    WORKDIR /usr/src/app
    
  • ganache-cli/Dockerfile
    FROM node:alpine
     
    RUN npm install -g ganache-cli
    RUN mkdir -p /var/ganache
     
    ENV DOCKER true
    ENV DATADIR /var/ganache
    # データを永続化する場合、次回以降も同じmnemonicとnetworkIdで立ち上げる必要性があります
    # https://github.com/trufflesuite/ganache-cli/issues/407
    ENV MNEMONIC pillows andymori al tomoyuki spitz abc quruli whoops fukurouz air bluehearts highlows
    ENV NETWORKID 5777
     
    EXPOSE 8545
     
    ENTRYPOINT ["sh", "-c", "ganache-cli --host=0.0.0.0 --db=${DATADIR} --mnemonic=\"${MNEMONIC}\" --networkId=${NETWORKID}"]
    
  • trufflebox/truffle-config.js
    module.exports = {
      // See 
      // for more about customizing your Truffle configuration!
      networks: {
        development: {
          host: "ganache",
          port: 8545, 
          network_id: "*" // Match any network id
        } 
      }
    };
    
タイトルとURLをコピーしました