Yaykyi Tools
HomeGuidesDocker Run to Docker Compose — How to Migrate Your Containers
DevOps8 min readMarch 3, 2025

Docker Run to Docker Compose — How to Migrate Your Containers

Starting a container with a single 'docker run' command is easy, but managing multiple interconnected services (like a web app, a database, and a cache) quickly becomes a nightmare. Docker Compose is the professional way to define and share multi-container applications. This guide shows you how to migrate from messy shell commands to clean YAML configurations.

Why Move to Docker Compose?

A `docker run` command is "fire and forget" — if you stop the container, you have to remember the exact flags you used to start it again. Docker Compose (`docker-compose.yml`) offers: 1. **Infrastructure as Code** — Your setup is documented in a file, not hidden in your shell history. 2. **Single Command** — Start your entire stack with `docker-compose up -d`. 3. **Isolated Networks** — Services can talk to each other by name (e.g., 'db') without exposing ports to the host. 4. **Volume Management** — Persistent data is defined clearly, preventing data loss during updates.

The Basic Mapping: Flags to YAML

Most `docker run` flags map directly to Compose keys: - `-p 8080:80` → `ports: ["8080:80"]` - `-v /host/path:/data` → `volumes: ["/host/path:/data"]` - `-e KEY=VALUE` → `environment: { KEY: "VALUE" }` - `--name my-app` → `container_name: my-app` - `--restart always` → `restart: always` Don't do the manual conversion yourself. Use our [Docker Run to Compose Converter](/docker-run-to-compose) to instantly transform any complex command into a production-ready YAML file.

Best Practices for docker-compose.yml

- **Use Environment Files** — Keep secrets out of the main YAML by using an `.env` file. - **Explicit Tags** — Use `image: postgres:15` instead of `postgres:latest` to ensure stability across deployments. - **Port Management** — Only expose ports that need to be accessed from outside. Use a [Random Port Generator](/random-port-generator) if you have local conflicts. - **Healthchecks** — Define a `healthcheck` so Compose knows when a service is truly ready before starting its dependants.


Conclusion

Migrating to Docker Compose is a rite of passage for every developer moving toward DevOps. It brings reliability, documentation, and ease of use to your local and production environments. Start by converting your most used 'run' commands with our [migration tool](/docker-run-to-compose) and see how much cleaner your workflow becomes.