# Running the engine in a Docker container For local development and testing, you can run the engine in a Docker container. The steps are: 1. Bundle the engine and its dependencies. 1. Build a Docker image. 1. Create a Docker container. ## About Docker To get a high-level overview of Docker, please read [Understand the architecture](https://docs.docker.com/introduction/understanding-docker/). Optional reading includes reference guides for [`docker run`](https://docs.docker.com/reference/run/) and [Dockerfile](https://docs.docker.com/reference/builder/). ### Installation For Googlers running Goobuntu wanting to install Docker, see [go/installdocker](https://goto.google.com/installdocker). For other contributors using Ubuntu, see [official Docker installation instructions](https://docs.docker.com/installation/ubuntulinux/). ## Bundle Engine The `blimp/engine:blimp_engine_bundle` build target will bundle the engine and its dependencies into a tarfile, which can be used to build a Docker image. This target is always built as part of the top-level `blimp/blimp` meta-target. ### Update Engine Dependencies `blimp/engine/engine-manifest.txt` is a list of the engine's runtime dependencies. From time to time, this list may need to be updated. Use `blimp/tools/generate-engine-manifest.py` to (re)generate the manifest: ```bash ./blimp/tools/generate-engine-manifest.py \ --build-dir out-linux/Debug \ --target //blimp/engine:blimp_engine \ --output blimp/engine/engine-manifest.txt ``` Be sure to review the generated manifest and remove any false runtime dependencies. ## Build Docker Image Using the tarfile you can create a Docker image: ```bash docker build -t blimp_engine - < ./out-linux/Debug/blimp_engine_bundle.tar ``` ## Create Docker Container From the Docker image you can create a Docker container (i.e. run the engine): ```bash docker run blimp_engine ``` You can also pass additional flags: ```bash docker run blimp_engine --with-my-flags ``` See the [blimp engine `Dockerfile`](../engine/Dockerfile) to find out what flags are passed by default.