Building

The Envoy build system uses Bazel. In order to ease initial building and for a quick start, we provide an Ubuntu 16 based docker container that has everything needed inside of it to build and statically link Envoy, see ci/README.md.

In order to build manually, follow the instructions at bazel/README.md.

Requirements

Envoy was initially developed and deployed on Ubuntu 14.04 LTS. It should work on any reasonably recent Linux including Ubuntu 18.04 LTS.

Building Envoy has the following requirements:

  • GCC 7+ or Clang/LLVM 7+ (for C++14 support). Clang/LLVM 9+ preferred where Clang is used (see below).

  • These Bazel native dependencies.

Please see the linked CI and Bazel documentation for more information on performing manual builds. Please note that for Clang/LLVM 8 and lower, Envoy may need to be built with –define tcmalloc=gperftools as the new tcmalloc code is not guaranteed to compile with lower versions of Clang.

Pre-built binaries

We build and tag Docker images with release versions when we do official releases. These images can be found in the following repositories:

  • envoyproxy/envoy: Release binary with symbols stripped on top of an Ubuntu Bionic base.

  • envoyproxy/envoy-debug: Release binary with debug symbols on top of an Ubuntu Bionic base.

  • envoyproxy/envoy-alpine: Release binary with symbols stripped on top of a glibc alpine base.

  • envoyproxy/envoy-alpine-debug: Deprecated in favor of envoyproxy/envoy-debug. Release binary with debug symbols on top of a Release binary with debug symbols on top of a glibc alpine base.

Note

In the above repositories, we tag a vX.Y-latest image for each security/stable release line.

On every master commit we additionally create a set of development Docker images. These images can be found in the following repositories:

In the above dev repositories, the latest tag points to the last Envoy SHA in master that passed tests.

Note

The Envoy project considers master to be release candidate quality at all times, and many organizations track and deploy master in production. We encourage you to do the same so that issues can be reported as early as possible in the development process.

Packaged Envoy pre-built binaries for a variety of platforms are available via GetEnvoy.io.

We will consider producing additional binary types depending on community interest in helping with CI, packaging, etc. Please open an issue in GetEnvoy for pre-built binaries for different platforms.

ARM64 binaries

envoyproxy/envoy, envoyproxy/envoy-debug, envoyproxy/envoy-dev and envoyproxy/envoy-debug-dev are Docker multi-arch images and should run transparently on compatible ARM64 hosts.

Modifying Envoy

If you’re interested in modifying Envoy and testing your changes, one approach is to use Docker. This guide will walk through the process of building your own Envoy binary, and putting the binary in an Ubuntu container.