在Docker中运行Bazel,在一个可复制的便携式容器中。
dazel的Python项目详细描述
通过无缝代理在Docker容器中运行Google的Bazel。
Bazel在自己的基础上创建快速且可复制的构建方面非常出色 发展环境。问题是它在一个不完美的 以及非便携环境。
输入dazel。
Dazel允许您创建一个Docker映像的构建环境, 通过dockerfile或预先构建的存储库。工具本身是 直接将命令行参数发送到 容器中的bazel,并将所有必需的卷映射到 让它与你无缝连接。它使用“docker exec”命令来实现 然后映射当前目录和bazel workdir链接 使结果显示在主机上,就像运行 主机上的本地命令。
它的运行方式与bazel相同:
dazel build //my/cool/package/... dazel run //my/cool/package:target
这是一个简单的构建和运行。命令行参数已发送 在Docker容器中,输出在同一个 容器内的方式。
第一次运行该命令将启动 拥有,它将自动检测是否需要重建或 重新启动容器(如果dockerfile比conatiner新)。 您可以通过中的“.dazelrc”文件配置所需的任何内容。 相同的目录。查看配置部分以获取信息 关于如何写一个。
安装
依赖性
apt-get install python python-pip apt-get install docker-ce
安装Dazel
pip install dazel
就这些了。连火箭筒都不需要!
配置
您可以通过两种方式(或组合)配置dazel:*a.dazelrc文件 当前目录。*具有配置的环境变量 下面提到的参数。
注意,特定的环境变量取代了 .dazelrc文件。
可能要设置的参数有(默认值):
# The name of the docker container to run.DAZEL_INSTANCE_NAME="dazel"# The name of the dazel image to build or pull.DAZEL_IMAGE_NAME="dazel"# The command to run when running the image (the continuous command that will# hold the container active while we connect to it).DAZEL_RUN_COMMAND="/bin/bash"# The command to run to invoke docker (can be changed to `nvidia-docker` for GPUs).DAZEL_DOCKER_COMMAND="docker"# The path to the Dockerfile to use to build the dazel image.DAZEL_DOCKERFILE="Dockerfile.dazel"# in DAZEL_DIRECTORY# The repository to pull the dazel image from.DAZEL_REPOSITORY="dazel"# The directory to build the dazel image in.DAZEL_DIRECTORY=$PWD# The command to run inside the container.# NOTE: You should add flags to the .bazelrc file instead of here, since it is# also shared in the volume and it is a much cleaner way.DAZEL_COMMAND="/usr/bin/bazel"# Add any additional volumes you want to share between the host and the docker# container, in the normal "hostdir:dockerdir" format.# This can be a python iterable, or a comma-separated string.DAZEL_VOLUMES=[]# Add any ports you want to publish from the dazel container to the host, in the# normal "interface:dockerport:hostport" (e.g. "0.0.0.0:80:80").# This can be useful if you use the "dazel run //my/cool/webserver/target"# command for example, and need to publish port 80.DAZEL_PORTS=[]# The name of the network on which to load all run dependencies and dazel container.# If you are using a docker-compose.yml file to load the environment, this must# be the network name to which all of the necessary dependencies are connected.DAZEL_NETWORK="dazel"# Add any additional images that you want to run as dependencies and hook up to# the same docker network as the main container.# The format is the standard "repository/image:tag", but you can optionally add# the name of the container to create with "repository/image:tag::container".# This is useful if you want to add "postgres" or "rabbitmq" for instance, and# have them run as part of your test environment in a seamless reproducible way.# This can be a python iterable, or a comma-separated string.# Note: alternatively, you can use a docker-compose.yml file for dependencies.DAZEL_RUN_DEPS=[]# Add a docker-compose.yml file here to use it to load any services you want to# launch as part of the environment for running bazel.# This can be a much more complex environment than what is possible using run# dependencies.# Note: you can control both the project name and which services to run with the# variables below.DAZEL_DOCKER_COMPOSE_FILE=""# The command to run to invoke docker-compose (can be changed to# `nvidia-docker-compose` for GPUs).DAZEL_DOCKER_COMPOSE_COMMAND="docker-compose"# If using a docker-compose.yml file, this will set the COMPOSE_PROJECT_NAME# environment variable and thus the project name.DAZEL_DOCKER_COMPOSE_PROJECT_NAME="dazel"# If using a docker-compose.yml file, you can specify the services to run in the# file (and empty string means all services - as in running: docker-compose up).# This can be a python iterable, or a comma-separated string.DAZEL_DOCKER_COMPOSE_SERVICES=""# Whether or not to run in privileged mode (fixes bazel sandboxing issues on some# systems). Note that this can be a python boolean equivalent, so if setting# this from the environment, simply set it to an empty string.DAZEL_DOCKER_RUN_PRIVILEGED=False# Path to custom .bazelrc file to use when running the bazel commands.DAZEL_BAZEL_RC_FILE=""# Use the :delegated flag of the --volume option of docker for the bind-mounting of# the bazel cache directory. This vastly improves throughput on MacOSX.# More information on the :delegated flag: https://docs.docker.com/docker-for-mac/osxfs-caching/.# NOTE: This will fail on Docker versions < 17.04.DAZEL_DELEGATED_VOLUME=True# The user, in the same format as the --user option docker run and docker exec takes,# to use when starting the container and executing commands inside of the containerDAZEL_USER=""