Skip to content

feat(cli): add Docker support and usage instructions in README #151

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Build artifacts
target/
**/*.rs.bk
*.pdb

# IDE files
.vscode/
.idea/
*.swp
*.swo
*~

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Git
.git/
.gitignore

# Docker
Dockerfile
.dockerignore

# Documentation and assets
README.md
LICENSE
assets/
**/*.md

# GitHub
.github/

# Other
.env
.env.local
.env.*.local
45 changes: 45 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Multi-stage build for Rex CLI
# Stage 1: Build stage
FROM rustlang/rust:nightly-slim AS builder

# Install system dependencies needed for building
RUN apt-get update && apt-get install -y \
git \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /rex

# Copy workspace files
COPY Cargo.toml Cargo.lock ./
COPY cli/ ./cli/
COPY sdk/ ./sdk/

# Build the CLI binary with optimizations
RUN cargo build --release --bin rex

# Stage 2: Runtime stage
FROM debian:bookworm-slim

# Install runtime dependencies
RUN apt-get update && apt-get install -y \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*

# Create non-root user
RUN useradd -r -s /bin/false rex

# Copy the built binary from builder stage
COPY --from=builder /rex/target/release/rex /usr/local/bin/rex

# Set permissions
RUN chmod +x /usr/local/bin/rex

# Switch to non-root user
USER rex

# Set entrypoint
ENTRYPOINT ["rex"]
CMD ["--help"]
34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,40 @@ To install it, you need to clone the repository and run the following command to
make cli
```

#### Using Docker

Alternatively, you can use Docker to run Rex without installing Rust:

```Shell
# Build the Docker image
docker build -t rex .

# Run rex commands
docker run --rm rex --help
docker run --rm rex balance 0x... --rpc-url https://ethereum.node.url

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The command doesn't seem to have a --rpc-url flag, the rpc url is passed directly without it, same with the other commands

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be better to state the example commands as
docker run --rm rex balance <ADDRESS> <RPC_URL>
So that they are easier to follow


# For interactive usage, you can create an alias
alias rex="docker run --rm rex"
```

##### Docker Networking

To access services running on your host machine (like local blockchain nodes):

```Shell
# For local RPC nodes (e.g., local Ethereum node on port 8545)
docker run --rm --add-host=host.docker.internal:host-gateway rex balance 0x... --rpc-url http://host.docker.internal:8545

# Create an alias for easier usage with host access
alias rex="docker run --rm --add-host=host.docker.internal:host-gateway rex"

# Now you can use rex normally with local services
rex balance 0x... --rpc-url http://host.docker.internal:8545
rex l2 deposit --amount 1000000000000000000 --rpc-url http://host.docker.internal:8545
```

**Note**: By default, Docker containers cannot access `localhost` services on your host machine. The `--add-host=host.docker.internal:host-gateway` flag creates a bridge that allows the container to reach your host's services via `host.docker.internal`.

### Using the CLI

After installing the CLI with `make cli`, run `rex` to display the help message and see the available commands.
Expand Down
Loading