--- description: Run IGNITE® CLI using a Docker container. --- # Running inside a Docker container You can run IGNITE® CLI inside a Docker container without installing the IGNITE® CLI binary directly on your machine. Running IGNITE® CLI in Docker can be useful for various reasons; isolating your test environment, running IGNITE® CLI on an unsupported operating system, or experimenting with a different version of IGNITE® CLI without installing it. Docker containers are like virtual machines because they provide an isolated environment to programs that runs inside them. In this case, you can run IGNITE® CLI in an isolated environment. Experimentation and file system impact is limited to the Docker instance. The host machine is not impacted by changes to the container. ## Prerequisites Docker must be installed. See [Get Started with Docker](https://www.docker.com/get-started). ## IGNITE® CLI Commands in Docker After you scaffold and start a chain in your Docker container, all IGNITE® CLI commands are available. Just type the commands after `docker run -ti ignite/cli`. For example: ```bash docker run -ti ignitehq/cli -h docker run -ti ignitehq/cli scaffold chain planet docker run -ti ignitehq/cli chain serve ``` ## Scaffolding a chain When Docker is installed, you can build a blockchain with a single command. IGNITE® CLI, and the chains you serve with IGNITE® CLI, persist some files. When using the CLI binary directly, those files are located in `$HOME/.ignite` and `$HOME/.cache`, but in the context of Docker it's better to use a directory different from `$HOME`, so we use `$HOME/sdh`. This folder should be created manually prior to the docker commands below, or else Docker creates it with the root user. ```bash mkdir $HOME/sdh ``` To scaffold a blockchain `planet` in the `/apps` directory in the container, run this command in a terminal window: ```bash docker run -ti -v $HOME/sdh:/home/tendermint -v $PWD:/apps ignitehq/cli:0.25.2 scaffold chain planet ``` Be patient, this command takes a minute or two to run because it does everything for you: - Creates a container that runs from the `ignitehq/cli:0.25.2` image. - Executes the IGNITE® CLI binary inside the image. - `-v $HOME/sdh:/home/tendermint` maps the `$HOME/sdh` directory in your local computer (the host machine) to the home directory `/home/tendermint` inside the container. - `-v $PWD:/apps` maps the current directory in the terminal window on the host machine to the `/apps` directory in the container. You can optionally specify an absolute path instead of `$PWD`. Using `-w` and `-v` together provides file persistence on the host machine. The application source code on the Docker container is mirrored to the file system of the host machine. **Note:** The directory name for the `-w` and `-v` flags can be a name other than `/app`, but the same directory must be specified for both flags. If you omit `-w` and `-v`, the changes are made in the container only and are lost when that container is shut down. ## Starting a blockchain To start the blockchain node in the Docker container you just created, run this command: ```bash docker run -ti -v $HOME/sdh:/home/tendermint -v $PWD:/apps -p 1317:1317 -p 26657:26657 ignitehq/cli:0.25.2 chain serve -p planet ``` This command does the following: - `-v $HOME/sdh:/home/tendermint` maps the `$HOME/sdh` directory in your local computer (the host machine) to the home directory `/home/tendermint` inside the container. - `-v $PWD:/apps` persists the scaffolded app in the container to the host machine at current working directory. - `serve -p planet` specifies to use the `planet` directory that contains the source code of the blockchain. - `-p 1317:1317` maps the API server port (cosmos-sdk) to the host machine to forward port 1317 listening inside the container to port 1317 on the host machine. - `-p 26657:26657` maps RPC server port 26657 (tendermint) on the host machine to port 26657 in Docker. - After the blockchain is started, open `http://localhost:26657` to see the Tendermint API. - The `-v` flag specifies for the container to access the application's source code from the host machine, so it can build and run it. ## Versioning You can specify which version of IGNITE® CLI to install and run in your Docker container. ### Latest version - By default, `ignite/cli` resolves to `ignite/cli:latest`. - The `latest` image tag is always the latest stable [IGNITE® CLI release](https://github.com/ignite/cli/releases). For example, if latest release is [v0.25.2](https://github.com/ignite/cli/releases/tag/v0.25.2), the `latest` tag points to the `0.25.2` tag. ### Specific version You can specify to use a specific version of IGNITE® CLI. All available tags are in the [ignite/cli image](https://hub.docker.com/r/ignitehq/cli/tags?page=1&ordering=last_updated) on Docker Hub. For example: - Use `ignitehq/cli:0.25.2` (without the `v` prefix) to use version `0.25.2`. - Use `ignitehq/cli` to use the latest version. - Use `ignitehq/cli:main` to use the `main` branch, so you can experiment with the upcoming version. To get the latest image, run `docker pull`. ```bash docker pull ignitehq/cli:main ```