Primeiros passos com o contêiner do Docker do Bazel

Nesta página, você verá detalhes sobre o conteúdo do contêiner do Bazel, como criar o projeto abseil-cpp usando o Bazel dentro do contêiner dele e como criar esse projeto diretamente na máquina host usando o contêiner do Bazel com montagem de diretório.

Crie um projeto do Abseil na sua máquina host com montagem de diretório.

Com as instruções desta seção, você pode criar usando o contêiner do Bazel com as origens verificadas no ambiente do host. Um contêiner é inicializado para cada comando de build que você executa. Os resultados da versão são armazenados em cache no seu ambiente de host para que possam ser reutilizados em todas as versões.

Clone o projeto em um diretório na máquina host.

git clone https://github.com/abseil/abseil-cpp.git /src/workspace

Crie uma pasta que terá os resultados armazenados em cache para compartilhar entre builds.

mkdir -p /tmp/build_output/

Use o contêiner do Bazel para criar o projeto e disponibilizar as saídas de compilação na pasta de saída da máquina host.

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  gcr.io/bazel-public/bazel:latest \
  --output_user_root=/tmp/build_output \
  build //absl/...

Crie o projeto com limpadores adicionando a flag de build --config=asan|tsan|msan para selecionar AddressSanitizer (asan), ThreadSanitizer (tsan) ou MemorySanitizer (msan).

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  gcr.io/bazel-public/bazel:latest \
  --output_user_root=/tmp/build_output \
  build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

Crie o projeto do Abseil de dentro do contêiner

As instruções nesta seção permitem criar usando o contêiner do Bazel com as origens dentro dele. Ao iniciar um contêiner no início do fluxo de trabalho de desenvolvimento e fazer alterações no espaço de trabalho dentro dele, os resultados da versão serão armazenados em cache.

Inicie um shell no contêiner do Bazel:

docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest

Cada ID de contêiner é exclusivo. Nas instruções abaixo, o contêiner era 5a99103747c6.

Clone o projeto.

root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/

Faça um build regular.

root@5a99103747c6:~/abseil-cpp# bazel build //absl/...

Crie o projeto com limpadores adicionando a flag de build --config=asan|tsan|msan para selecionar AddressSanitizer (asan), ThreadSanitizer (tsan) ou MemorySanitizer (msan).

root@5a99103747c6:~/abseil-cpp# bazel build --config=--config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

conheça o contêiner do Bazel

Inicie um shell interativo no contêiner do Bazel, caso ainda não tenha feito isso.

docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
root@5a99103747c6:/#

Analise o conteúdo do contêiner.

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: 6.0.0
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Mon Dec 19 15:52:35 2022 (1671465155)
Build timestamp: 1671465155
Build timestamp as int: 1671465155