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