Skip to content
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

Feature: support dockerized builds of current source-code #2030

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
52 changes: 52 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
################
##### Builder
##### docker buildx create --use --name multi-builder --platform linux/arm64,linux/amd64
# https://github.com/docker/buildx/issues/318#issuecomment-1023226339
#FROM --platform=$BUILDPLATFORM rustlang/rust:nightly-buster-slim as builder
FROM rustlang/rust:nightly-buster-slim as builder
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved

# Installing git because of the workaround for the config
# https://github.com/rust-lang/cargo/issues/10781#issuecomment-1441071052
RUN apt-get update && apt-get install -y git

WORKDIR /usr/src/github.com/rust-lang

# Create blank project
RUN USER=root cargo new mdBook

# We want dependencies cached, so copy those first.
COPY Cargo.toml Cargo.lock /usr/src/github.com/rust-lang/mdBook
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved
# examples is referenced in Cargo.toml
COPY examples /usr/src/github.com/rust-lang/mdBook/examples

WORKDIR /usr/src/github.com/rust-lang/mdBook

## Install target platform (Cross-Compilation) --> Needed for Alpine
#RUN rustup install nightly
RUN rustup target add x86_64-unknown-linux-musl
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved

# This is a dummy build to get the dependencies cached.
# https://github.com/rust-lang/cargo/issues/8172#issuecomment-659056517
# Very slow builds: https://github.com/rust-lang/cargo/issues/9167#issuecomment-1219251978
# Logs verbose: https://github.com/rust-lang/cargo/issues/1106#issuecomment-141555744
RUN cargo build -vv --config "net.git-fetch-with-cli=true" --target x86_64-unknown-linux-musl --release

# Now copy in the rest of the sources
COPY src /usr/src/github.com/rust-lang/mdBook/src

# This is the actual application build: # ./target/x86_64-unknown-linux-musl/release/mdbook
RUN cargo build --locked --bin mdbook --release --target x86_64-unknown-linux-musl

################
##### Runtime
FROM --platform=$BUILDPLATFORM alpine:3.16.0 AS runtime
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved

# Copy application binary from builder image
COPY --from=builder /usr/src/github.com/rust-lang/mdBook/target/x86_64-unknown-linux-musl/release/mdbook /usr/local/bin/mdbook

ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM" > /etc/build.log
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved

EXPOSE 3000
ENTRYPOINT ["mdbook", "serve", "--hostname", "0.0.0.0"]
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@ The User Guide also serves as a demonstration to showcase what a book looks like

If you are interested in contributing to the development of mdBook, check out the [Contribution Guide].

## Container

> **NOTE**: You need to have docker installed
> https://docs.docker.com/language/golang/run-containers/
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved

1. Locate a local directory with md files
2. Quickly run a docker container with the current version:

```console
docker run -ti -v $(pwd)/src:/src -p 3000:3000 rust-lang/mdbook
marcellodesales marked this conversation as resolved.
Show resolved Hide resolved
```

## License

All the code in this repository is released under the ***Mozilla Public License v2.0***, for more information take a look at the [LICENSE] file.
Expand Down