|  | --- | 
|  | layout: documentation | 
|  | title: Bazel container | 
|  | --- | 
|  |  | 
|  | # Getting Started with Bazel Docker Container | 
|  |  | 
|  | This page provides details on the contents of the Bazel container, how to build | 
|  | the [abseil-cpp](https://github.com/abseil/abseil-cpp) project using Bazel | 
|  | inside the Bazel container, and how to build this project directly | 
|  | from the host machine using the Bazel container with directory mounting. | 
|  |  | 
|  | ## Build Abseil project from your host machine with directory mounting | 
|  |  | 
|  | The instructions in this section allow you to build using the Bazel container | 
|  | with the sources checked out in your host environment. A container is started up | 
|  | for each build command you execute. Build results are cached in your host | 
|  | environment so they can be reused across builds. | 
|  |  | 
|  | Clone the project to a directory in your host machine. | 
|  |  | 
|  | ```bash | 
|  | git clone https://github.com/abseil/abseil-cpp.git /src/workspace | 
|  | ``` | 
|  |  | 
|  | Create a folder that will have cached results to be shared across builds. | 
|  |  | 
|  | ```bash | 
|  | mkdir -p /tmp/build_output/ | 
|  | ``` | 
|  |  | 
|  | Use the Bazel container to build the project and make the build | 
|  | outputs available in the output folder in your host machine. | 
|  |  | 
|  | ```bash | 
|  | docker run \ | 
|  | -e USER="$(id -u)" \ | 
|  | -u="$(id -u)" \ | 
|  | -v /src/workspace:/src/workspace \ | 
|  | -v /tmp/build_output:/tmp/build_output \ | 
|  | -w /src/workspace \ | 
|  | l.gcr.io/google/bazel:latest \ | 
|  | --output_user_root=/tmp/build_output \ | 
|  | build //absl/... | 
|  | ``` | 
|  |  | 
|  | Build the project with sanitizers by adding the --config=<asan/tsan/msan> build | 
|  | flag to select AddressSanitizer (asan), ThreadSanitizer (tsan) or | 
|  | MemorySanitizer (msan) accordingly. | 
|  |  | 
|  | ```bash | 
|  | docker run \ | 
|  | -e USER="$(id -u)" \ | 
|  | -u="$(id -u)" \ | 
|  | -v /src/workspace:/src/workspace \ | 
|  | -v /tmp/build_output:/tmp/build_output \ | 
|  | -w /src/workspace \ | 
|  | l.gcr.io/google/bazel:latest \ | 
|  | --output_user_root=/tmp/build_output \ | 
|  | build --config=<asan/tsan/msan> -- //absl/... -//absl/types:variant_test | 
|  | ``` | 
|  |  | 
|  | ## Build Abseil project from inside the container | 
|  |  | 
|  | The instructions in this section allow you to build using the Bazel container | 
|  | with the sources inside the container. By starting a container at the beginning | 
|  | of your developement workflow and doing changes in the worskpace within the | 
|  | container, build results will be cached. | 
|  |  | 
|  | Start a shell in the Bazel container: | 
|  |  | 
|  | ```bash | 
|  | docker run --interactive --entrypoint=/bin/bash l.gcr.io/google/bazel:latest | 
|  | ``` | 
|  |  | 
|  | Each container id is unique. In the instructions bellow, the container was 5a99103747c6. | 
|  |  | 
|  | Clone the project. | 
|  |  | 
|  | ```bash | 
|  | root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/ | 
|  | ``` | 
|  |  | 
|  | Do a regular build. | 
|  |  | 
|  | ```bash | 
|  | root@5a99103747c6:~/abseil-cpp# bazel build //absl/... | 
|  | ``` | 
|  |  | 
|  | Build the project with sanitizers by adding the `--config=<asan/tsan/msan>` build | 
|  | flag to select AddressSanitizer (asan), ThreadSanitizer (tsan) or | 
|  | MemorySanitizer (msan) accordingly. | 
|  |  | 
|  | ```bash | 
|  | root@5a99103747c6:~/abseil-cpp# bazel build --config=<asan/tsan/msan> -- //absl/... -//absl/types:variant_test | 
|  | ``` | 
|  |  | 
|  | ## Explore the Bazel container | 
|  |  | 
|  | If you haven't already, start an interactive shell inside the Bazel container. | 
|  |  | 
|  | ```bash | 
|  | docker run -it --entrypoint=/bin/bash l.gcr.io/google/bazel:latest | 
|  | root@5a99103747c6:/# | 
|  | ``` | 
|  |  | 
|  | Explore the container contents. | 
|  |  | 
|  | ```bash | 
|  | root@5a99103747c6:/# clang --version | 
|  | clang version 8.0.0 (trunk 340178) | 
|  | Target: x86_64-unknown-linux-gnu | 
|  | Thread model: posix | 
|  | InstalledDir: /usr/local/bin | 
|  |  | 
|  | root@5a99103747c6:/# java -version | 
|  | openjdk version "1.8.0_181" | 
|  | OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13) | 
|  | OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) | 
|  |  | 
|  | root@5a99103747c6:/# python -V | 
|  | Python 2.7.12 | 
|  |  | 
|  | root@5a99103747c6:/# python3 -V | 
|  | Python 3.6.6 | 
|  |  | 
|  | root@5a99103747c6:/# bazel version | 
|  | Extracting Bazel installation... | 
|  | Build label: 0.17.1 | 
|  | Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar | 
|  | Build time: Fri Sep 14 10:39:25 2018 (1536921565) | 
|  | Build timestamp: 1536921565 | 
|  | Build timestamp as int: 1536921565 | 
|  | ``` |