Skip to content
Snippets Groups Projects
Commit 97a6db78 authored by Chevdor's avatar Chevdor Committed by Gav Wood
Browse files

Add docker image (#375)

* Add Dockerfile

Add documentation

Ref #375

* Add PORT, VOLUME and reduce size of the docker image significantly

Fix doc and reduce image size

Fix #375

* Fix docker compose
parent e5900d8f
No related merge requests found
......@@ -12,4 +12,5 @@ substrate/pwasm-libc/Cargo.lock
demo/runtime/wasm/target/
**/._*
.vscode
polkadot.*
\ No newline at end of file
polkadot.*
.DS_Store
......@@ -6,6 +6,7 @@
Implementation of a https://polkadot.network node in Rust.
== To play
If you'd like to play with Polkadot, you'll need to install a client like this
......@@ -46,6 +47,7 @@ polkadot --dev
You can muck around by cloning and building the http://github.com/paritytech/polka-ui and http://github.com/paritytech/polkadot-ui or just heading to https://polkadot.js.org/apps.
== Local Two-node Testnet
If you want to see the multi-node consensus algorithm in action locally, then
......@@ -62,6 +64,7 @@ polkadot --chain=local --validator --key Bob -d /tmp/bob --port 30334 --bootnode
Ensure you replace `ALICE_BOOTNODE_ID_HERE` with the node ID from the output of
the first terminal.
== Hacking on Polkadot
If you'd actually like hack on Polkadot, you can just grab the source code and
......@@ -74,7 +77,7 @@ rustup update nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
rustup update stable
cargo install --git https://github.com/alexcrichton/wasm-gc
sudo apt install cmake pkg-config libssl-dev
sudo apt install cmake pkg-config libssl-dev git
----
Then, grab the Polkadot source code:
......@@ -103,4 +106,91 @@ You can start a development chain with:
[source, shell]
cargo run -- --dev
== Using Docker
=== The easiest way
The easiest/faster option is to use the latest image.
Let´s first check the version we have. The first time you run this command, the polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient:
[source, shell]
docker run --rm -it chevdor/polkadot:0.2.0 ./version
You can also pass any argument/flag that polkadot supports:
[source, shell]
docker run --rm -it chevdor/polkadot:0.2.0 polkadot --name "PolkaDocker"
Once you are done experimenting and picking the best node name :) you can start polkadot as daemon, exposes the polkadot ports and mount a volume that will keep your blockchain data locally:
[source, shell]
docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data chevdor/polkadot:0.2.0 polkadot
=== Build your own image
To get up and running with the smallest footprint on your system, you may use the Polkadot Docker image.
You can either build it yourself (it takes a while...):
[source, shell]
----
ccd docker
./build.sh
----
=== Reporting issues
If you run into issues with polkadot when using docker, please run the following command
(replace the tag with the appropriate one if you do not use latest):
[source, shell]
docker run --rm -it chevdor/polkadot:latest version
This will show you the polkadot version as well as the git commit ref that was used to build your container.
Just paste that in the issue you create.
== Shell completion
The Polkadot cli command supports shell auto-completion. For this to work, you will need to run the completion script matching you build and system.
Assuming you built a release version using `cargo build --release` and use `bash` run the following:
[source, shell]
source target/release/completion-scripts/polkadot.bash
You can find completion scripts for:
- bash
- fish
- zsh
- elvish
- powershell
To make this change persistent, you can proceed as follow:
=== First install
[source, shell]
----
COMPL_DIR=$HOME/.completion
mkdir -p $COMPL_DIR
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
echo "source $COMPL_DIR/polkadot.bash" >> $HOME/.bash_profile
source $HOME/.bash_profile
----
=== Update
When you build a new version of Polkadot, the following will ensure you auto-completion script matches the current binary:
[source, shell]
----
COMPL_DIR=$HOME/.completion
mkdir -p $COMPL_DIR
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
source $HOME/.bash_profile
----
include::doc/packages.adoc[]
FROM phusion/baseimage:0.10.1
LABEL maintainer "chevdor@gmail.com"
ARG PROFILE=release
RUN mkdir -p polkadot && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y cmake pkg-config libssl-dev git && \
apt-get clean && \
mkdir -p /root/.local/share/Polkadot && \
ln -s /root/.local/share/Polkadot /data
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \
export PATH=$PATH:$HOME/.cargo/bin && \
rustup update nightly && \
rustup target add wasm32-unknown-unknown --toolchain nightly && \
rustup update stable && \
cargo install --git https://github.com/alexcrichton/wasm-gc && \
git clone https://github.com/paritytech/polkadot.git && \
cd polkadot && \
./build.sh && \
cargo build --$PROFILE && \
mv target/$PROFILE/polkadot /usr/local/bin && \
cargo clean && \
rm -rf /root/.cargo /root/.rustup /tmp/*
COPY version /polkadot
WORKDIR /polkadot
EXPOSE 30333 9933
VOLUME ["/data"]
CMD ["/bin/sh", "polkadot"]
#!/usr/bin/env bash
set -e
# Find the current version from Cargo.toml
VERSION=`grep "^version" ../Cargo.toml | egrep -o "([0-9\.]+)"`
GITUSER=chevdor
GITREPO=polkadot
# Build the image
echo "Building ${GITREPO}:$VERSION docker image, hang on!"
time docker build --build-arg PROFILE=release -t ${GITUSER}/${GITREPO}:$VERSION .
# Show the list of available images for this repo
echo "Image is ready"
docker images | grep ${GITREPO}
echo -e "\nIf you just built the latest, you may want to update your tag:"
echo " $ docker tag ${GITUSER}/${GITREPO}:$VERSION ${GITUSER}/${GITREPO}:latest"
#!/usr/bin/env bash
# This script helps reduce the size of the built image
# It removes data that is not required.
export PATH=$PATH:$HOME/.cargo/bin
cargo clean
rm -rf /root/.cargo /root/.rustup /tmp/*
version: '3'
services:
polkadot:
build:
context: .
ports:
- "127.0.0.1:30333:30333/tcp"
- "127.0.0.1:9933:9933/tcp"
image: chevdor/polkadot:latest
volumes:
- "polkadot-data:/data"
command: polkadot
volumes:
polkadot-data:
== Polkadot Docker
=== Start a Polkadot docker container
Run the following command
docker run -d chevdor/polkadot:latest polkadot
=== Building the image
To build your own image from the source, you can run the following command:
./build.sh
NOTE: Building the image takes a while. Count at least 30min on a good machine.
#!/usr/bin/env bash
# This script show the polkadot version and commit ref that was
# used to build the image.
# If you report an issue, call this script to get all details.
# This script will no longer be required once the polkadot cli
# can report its commit ref.
echo "-----------------------------------------"
printf "Polkadot Docker Container: "
polkadot --version
printf " "
git rev-parse HEAD
echo "-----------------------------------------"
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment