Skip to main content

Convert Docker Run to Docker Compose

Moving from docker run commands to docker-compose.yml makes your deployments reproducible and easier to manage. Here is how to map common flags.

The Mapping Guide

Docker Run FlagCompose KeyExample
-p 80:80ports- "80:80"
-v /host:/containervolumes- /host:/container
-e KEY=VALenvironment- KEY=VAL
--name my-appcontainer_namecontainer_name: my-app
--network my-netnetworksnetworks: [my-net]
--restart alwaysrestartrestart: always
--link otherdepends_on- other

Example 1: Simple Web Server

Docker Run:

docker run -d -p 8080:80 --name web nginx:latest

Docker Compose:

services:
web:
image: nginx:latest
container_name: web
ports:
- "8080:80"

Example 2: Database with Environment Variables

Docker Run:

docker run -d \
--name db \
-e POSTGRES_PASSWORD=secret \
-v db-data:/var/lib/postgresql/data \
postgres:15

Docker Compose:

services:
db:
image: postgres:15
container_name: db
environment:
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data

volumes:
db-data:

Example 3: Linking Containers

Docker Run:

# Start DB
docker run -d --name db postgres
# Start App linked to DB
docker run -d -p 3000:3000 --link db:db my-app

Docker Compose:

services:
db:
image: postgres

app:
image: my-app
ports:
- "3000:3000"
depends_on:
- db
# No need for 'links', they share a network by default

Tools to Automate

There are tools like Composerize that can automatically convert docker run commands to YAML. However, doing it manually ensures you understand the structure and can optimize it (e.g., by removing unnecessary container names or links).


Stop pasting commands

Once you have your docker-compose.yml, deployment becomes a single click on Hostim.dev.

Deploy Compose File