December 29, 2025
0
Install and run Docker on Ubuntu VPS
Prerequisites (Once per server)
Install Docker
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
Verify:
docker --version
docker compose version
Folder Structure
project_name/
├── public/
│ └── index.php
├── docker/
│ └── php/
│ ├── Dockerfile
│ └── php.ini
├── docker-compose.yml
├── .env.example
└── .gitignore
STEP 4️⃣ PHP 8.2 Dockerfile
📄 docker/php/Dockerfile
FROM php:8.2-fpm
# Install PHP extensions needed for MySQL
RUN docker-php-ext-install pdo pdo_mysql
WORKDIR /var/www/html
COPY php.ini /usr/local/etc/php/conf.d/custom.ini
📄 docker/php/php.ini
memory_limit=256M
display_errors=Off
log_errors=On
error_log=/proc/self/fd/2
max_execution_time=60
STEP 5️⃣ docker-compose.yml
📄 docker-compose.yml
services:
php:
build: ./docker/php
container_name: php82_app
volumes:
- .:/var/www/html
ports:
- "127.0.0.1:9005:9000"
restart: unless-stopped
mem_limit: 512m
cpus: 1
⚠️ Port
9005must be unused.
(Use a different port per project.)
STEP 6️⃣ Environment variables (MySQL on host)
📄 .env.example
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=app_db
DB_USER=app_user
DB_PASS=secret
📄 .gitignore
.env
vendor/
node_modules/
Create real env:
cp .env.example .env
Build & start PHP container
docker compose build
docker compose up -d
Check:
docker ps
You should see php82_app.
Restart / rebuild docker
Navigate to the docker project first the apply below commands which need.
# Restart cur docker
docker compose restart
# Docker down and up again when core variable changes
docker compose down
docker compose up -d
# Down rebuild and and up again
docker compose down
docker compose build
docker compose up -d
# Down rebuild and and up again with clear cache
docker compose down
docker compose build --no-cache
docker compose up -d
Docker networks
# Create network
docker network create nameof-network
# Inspect a network
docker network inspect nameof-network
To use a network from the sdasdasd.sdasd file add this code in same label of services:
services:
..
..
..
networks:
default:
external: true
name: nameof-network
To access network container from another container follow this. replace the port with the running app’s port
http://nameof-network:3000/
Essential Commands
# Find docker IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' containerName
# List of docker containers
docker ps
# Monitor all container who using how much resource
docker stats
# See log
docker compose logs -f
You should see:
CONTAINER ID IMAGE NAMES PORTS
abcd1234 nginx:alpine nginx_proxy 0.0.0.0:8080->80/tcp
Down a container
docker-compose down
Up a Docker container
Go the the container directory first then run
docker compose up -d
Down & up again a container
docker compose down
docker compose up -d
Restart a container
docker restart container_name
Open a container
docker exec -it container_name sh
docker exec -it service_status_prismict bash
🔄 Rebuild & start
docker-compose build --no-cache
docker-compose up -d