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

Commits on Feb 23, 2023

  1. ✨ 🐳 Add support for dockerized builds

    The initial docker builds takes a while with QEMU, while the built
    docker image caches makes building locally very fast. If this is
    for the purpose of reuse, one may just pull the latest version
    from the docker registry, making it more efficient than just
    building from the sources (without having experience with rust/cargo).
    
    Docker builds can be performed as follows:
    
    $ docker buildx build --platform linux/amd64 -t marcellodesales/mdbook -o type=docker  .
    [+] Building 2.8s (23/23) FINISHED
     => [internal] load build definition from Dockerfile                                                                                                                     0.0s
     => => transferring dockerfile: 2.17kB                                                                                                                                   0.0s
     => [internal] load .dockerignore                                                                                                                                        0.0s
     => => transferring context: 2B                                                                                                                                          0.0s
     => [internal] load metadata for docker.io/library/alpine:3.16.0                                                                                                         2.0s
     => [internal] load metadata for docker.io/rustlang/rust:nightly-buster-slim                                                                                             1.4s
     => [auth] library/alpine:pull token for registry-1.docker.io                                                                                                            0.0s
     => [auth] rustlang/rust:pull token for registry-1.docker.io                                                                                                             0.0s
     => [runtime 1/3] FROM docker.io/library/alpine:3.16.0@sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c                                           0.0s
     => => resolve docker.io/library/alpine:3.16.0@sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c                                                   0.0s
     => [builder  1/11] FROM docker.io/rustlang/rust:nightly-buster-slim@sha256:609c65daad3c69f9a37717e45d794e2eab99ad488dc5d492b8fc85c97c1df531                             0.0s
     => => resolve docker.io/rustlang/rust:nightly-buster-slim@sha256:609c65daad3c69f9a37717e45d794e2eab99ad488dc5d492b8fc85c97c1df531                                       0.0s
     => [internal] load build context                                                                                                                                        0.0s
     => => transferring context: 4.94kB                                                                                                                                      0.0s
     => CACHED [builder  2/11] RUN apt-get update && apt-get install -y git                                                                                                  0.0s
     => CACHED [builder  3/11] WORKDIR /usr/src/github.com/rust-lang                                                                                                         0.0s
     => CACHED [builder  4/11] RUN USER=root cargo new mdBook                                                                                                                0.0s
     => CACHED [builder  5/11] COPY Cargo.toml Cargo.lock /usr/src/github.com/rust-lang/mdBook                                                                               0.0s
     => CACHED [builder  6/11] COPY examples /usr/src/github.com/rust-lang/mdBook/examples                                                                                   0.0s
     => CACHED [builder  7/11] WORKDIR /usr/src/github.com/rust-lang/mdBook                                                                                                  0.0s
     => CACHED [builder  8/11] RUN rustup target add x86_64-unknown-linux-musl                                                                                               0.0s
     => CACHED [builder  9/11] RUN cargo build -vv --config "net.git-fetch-with-cli=true" --target x86_64-unknown-linux-musl --release                                       0.0s
     => CACHED [builder 10/11] COPY src /usr/src/github.com/rust-lang/mdBook/src                                                                                             0.0s
     => CACHED [builder 11/11] RUN cargo build --locked --bin mdbook --release --target x86_64-unknown-linux-musl                                                            0.0s
     => CACHED [runtime 2/3] COPY --from=builder /usr/src/github.com/rust-lang/mdBook/target/x86_64-unknown-linux-musl/release/mdbook /usr/local/bin/mdbook                  0.0s
     => CACHED [runtime 3/3] RUN echo "I am running on linux/arm64, building for linux/amd64" > /etc/build.log                                                               0.0s
     => exporting to oci image format                                                                                                                                        0.7s
     => => exporting layers                                                                                                                                                  0.0s
     => => exporting manifest sha256:f658cf0db29cb5655960164f745fbd841fb0dbba53f2b387e60c5e23f360459b                                                                        0.0s
     => => exporting config sha256:55c34204ee9e1fea12a11af808615f46f89cb428a3c6ff1e46c1bade9282a26a                                                                          0.0s
     => => sending tarball                                                                                                                                                   0.7s
     => importing to docker
    
    Running the server is a matter of the following:
    
    * Specifying a container to run exposing a given port number
    * Specifying the source-code to load mounted as docker volume
    
    At this point, just specifying the current dir of sources with md files
    and the local port number the same as the server, here's what we have:
    
    $ ls -la src
    total 24
    drwxr-xr-x  13 mdesales  staff   416 Feb 22 14:06 .
    drwxr-xr-x  12 mdesales  staff   384 Feb 22 14:06 ..
    -rw-r--r--   1 mdesales  staff   980 Feb 22 14:06 README.md
    -rw-r--r--   1 mdesales  staff  4764 Feb 22 14:06 SUMMARY.md
    drwxr-xr-x  10 mdesales  staff   320 Feb 22 14:06 assets
    drwxr-xr-x   7 mdesales  staff   224 Feb 22 14:06 data
    drwxr-xr-x  19 mdesales  staff   608 Feb 22 14:06 infra
    drwxr-xr-x   7 mdesales  staff   224 Feb 22 14:06 monitoring
    drwxr-xr-x   7 mdesales  staff   224 Feb 22 14:06 onboard
    drwxr-xr-x  17 mdesales  staff   544 Feb 22 14:06 services
    drwxr-xr-x   4 mdesales  staff   128 Feb 22 14:06 structure
    drwxr-xr-x  43 mdesales  staff  1376 Feb 22 14:06 support
    drwxr-xr-x  17 mdesales  staff   544 Feb 22 14:06 tips
    
    $ docker run -ti -v $(pwd)/src:/src -p 3000:3000 marcellodesales/mdbook
    WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
    2023-02-23 03:08:29 [INFO] (mdbook::book): Book building has started
    2023-02-23 03:08:29 [INFO] (mdbook::book): Running the html backend
    2023-02-23 03:08:34 [INFO] (mdbook::cmd::serve): Serving on: http://0.0.0.0:3000
    2023-02-23 03:08:34 [INFO] (warp::server): Server::run; addr=0.0.0.0:3000
    2023-02-23 03:08:34 [INFO] (warp::server): listening on http://0.0.0.0:3000
    2023-02-23 03:08:34 [INFO] (mdbook::cmd::watch): Listening for changes...
    
    At this point, one may just check the service locally as follows:
    
    $ curl -I http://localhost:3000/
    HTTP/1.1 200 OK
    content-length: 26343
    content-type: text/html
    accept-ranges: bytes
    last-modified: Thu, 23 Feb 2023 03:08:29 GMT
    date: Thu, 23 Feb 2023 03:08:35 GMT
    
    $ curl http://localhost:3000/  | grep mdBook
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0        <!-- Book generated using mdBook -->
    100 26343  100 26343    0     0   366k      0 --:--:-- --:--:-- --:--:--  467k
    marcellodesales committed Feb 23, 2023
    Configuration menu
    Copy the full SHA
    4fbf5a7 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d988864 View commit details
    Browse the repository at this point in the history

Commits on Nov 23, 2023

  1. Configuration menu
    Copy the full SHA
    dc007c3 View commit details
    Browse the repository at this point in the history
  2. 🐳 ♻️ re-order build avoiding rustup reinstalls

    The sequence now guarantees the caches aren't broken when
    Cargo.* files change for the dependencies.
    marcellodesales committed Nov 23, 2023
    Configuration menu
    Copy the full SHA
    268b187 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    d10159a View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    f68dab9 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    1fc0153 View commit details
    Browse the repository at this point in the history
  6. πŸ“ ♻️ add docker compose instructions

    $ docker compose build
    [+] Building 1.9s (24/24) FINISHED                                                                                                                                   docker-container:mac-linux-builder
     => [mdbook internal] load build definition from Dockerfile                                                                                                                                        0.0s
     => => transferring dockerfile: 2.47kB                                                                                                                                                             0.0s
     => [mdbook internal] load metadata for docker.io/rustlang/rust:nightly-buster-slim                                                                                                                1.4s
     => [mdbook internal] load metadata for docker.io/library/alpine:3.18.4                                                                                                                            1.3s
     => [mdbook auth] library/alpine:pull token for registry-1.docker.io                                                                                                                               0.0s
     => [mdbook auth] rustlang/rust:pull token for registry-1.docker.io                                                                                                                                0.0s
     => [mdbook internal] load .dockerignore                                                                                                                                                           0.0s
     => => transferring context: 2B                                                                                                                                                                    0.0s
     => [mdbook internal] load build context                                                                                                                                                           0.0s
     => => transferring context: 4.94kB                                                                                                                                                                0.0s
     => [mdbook runtime 1/2] FROM docker.io/library/alpine:3.18.4@sha256:eece025e432126ce23f223450a0326fbebde39cdf496a85d8c016293fc851978                                                              0.0s
     => => resolve docker.io/library/alpine:3.18.4@sha256:eece025e432126ce23f223450a0326fbebde39cdf496a85d8c016293fc851978                                                                             0.0s
     => [mdbook builder  1/13] FROM docker.io/rustlang/rust:nightly-buster-slim@sha256:328863752ff0c44a09be7c19d612de90e2a59fc2547496317cc2b01b0c1d1bd0                                                0.0s
     => => resolve docker.io/rustlang/rust:nightly-buster-slim@sha256:328863752ff0c44a09be7c19d612de90e2a59fc2547496317cc2b01b0c1d1bd0                                                                 0.0s
     => CACHED [mdbook builder  2/13] RUN apt-get update && apt-get install -y git                                                                                                                     0.0s
     => CACHED [mdbook builder  3/13] WORKDIR /usr/src/github.com/rust-lang                                                                                                                            0.0s
     => CACHED [mdbook builder  4/13] RUN USER=root cargo new mdBook                                                                                                                                   0.0s
     => CACHED [mdbook builder  5/13] WORKDIR /usr/src/github.com/rust-lang/mdBook                                                                                                                     0.0s
     => CACHED [mdbook builder  6/13] RUN rustup default stable                                                                                                                                        0.0s
     => CACHED [mdbook builder  7/13] RUN rustup target add x86_64-unknown-linux-musl                                                                                                                  0.0s
     => CACHED [mdbook builder  8/13] COPY Cargo.toml Cargo.lock /usr/src/github.com/rust-lang/mdBook                                                                                                  0.0s
     => CACHED [mdbook builder  9/13] COPY examples /usr/src/github.com/rust-lang/mdBook/examples                                                                                                      0.0s
     => CACHED [mdbook builder 10/13] RUN cargo build -vv --config "net.git-fetch-with-cli=true" --target x86_64-unknown-linux-musl --release                                                          0.0s
     => CACHED [mdbook builder 11/13] WORKDIR /usr/src/github.com/rust-lang/mdBook                                                                                                                     0.0s
     => CACHED [mdbook builder 12/13] COPY src /usr/src/github.com/rust-lang/mdBook/src                                                                                                                0.0s
     => CACHED [mdbook builder 13/13] RUN cargo build --locked --bin mdbook --release --target x86_64-unknown-linux-musl                                                                               0.0s
     => CACHED [mdbook runtime 2/2] COPY --from=builder /usr/src/github.com/rust-lang/mdBook/target/x86_64-unknown-linux-musl/release/mdbook /usr/local/bin/mdbook                                     0.0s
     => [mdbook] exporting to docker image format                                                                                                                                                      0.3s
     => => exporting layers                                                                                                                                                                            0.0s
     => => exporting manifest sha256:f4bff2d67ccffb4741203fb90e532154b0e1714343d361ebc1ca682de293fdc9                                                                                                  0.0s
     => => exporting config sha256:d222b963c70cb9ac09fd3ae7c4c51e4605340c6d5a0930cf6b9c85ce145a5b74                                                                                                    0.0s
     => => sending tarball                                                                                                                                                                             0.3s
     => [mdbook mdbook] importing to docker                                                                                                                                                            0.0s
    marcellodesales committed Nov 23, 2023
    Configuration menu
    Copy the full SHA
    52f007e View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    35fd99b View commit details
    Browse the repository at this point in the history

Commits on Dec 19, 2023

  1. 🐳 ♻️ Dockerfile: add / to COPY command to dir

    According to the spec, we need to end the command with a "/"
    marcellodesales authored Dec 19, 2023
    Configuration menu
    Copy the full SHA
    f67842d View commit details
    Browse the repository at this point in the history