Skip to main content

On This Page

Automating Docker Deployments on Azure with Cloud-Init

2 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

How I Deployed a Live Website Using Docker on Azure (And Let Cloud-Init Do the Heavy Lifting)

Vivian Chiamaka Okose deployed a Dockerized static website to an Azure Ubuntu 24.04 LTS instance using automated provisioning. The setup utilizes a cloud-init script to install Docker and configure user permissions before the first SSH connection is even established.

Why This Matters

In modern infrastructure, manual configuration is a liability that scales poorly and introduces human error. Leveraging cloud-init shifts the burden from manual shell commands to declarative automation, ensuring that every VM instance is identical and production-ready from the moment of boot, which significantly reduces the time-to-market for containerized applications.

Key Insights

  • Cloud-init automation allows for zero-touch Docker installation on Ubuntu 24.04 LTS by executing system commands during the initial boot sequence.
  • The nginx:alpine base image provides a high-performance, lightweight web server footprint, resulting in a final container image size of just 92.9 MB.
  • Infrastructure resilience is improved using the —restart unless-stopped flag, ensuring containers automatically recover following VM reboots or service crashes.
  • The usermod -aG docker command in startup scripts allows for seamless execution of Docker commands without requiring sudo on subsequent SSH access.

Working Examples

Cloud-init script for automated Docker installation on Azure VM boot.

#cloud-config
package_update: true
package_upgrade: true
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
runcmd:
- apt-get update -y
- apt-get install -y docker.io
- systemctl enable docker
- systemctl start docker
- usermod -aG docker azureuser

Dockerfile for a lightweight Nginx container serving a static website.

FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY . /usr/share/nginx/html
EXPOSE 80

Practical Applications

  • Use case: Automated environment setup for CI/CD runners using cloud-init to ensure consistent build environments. Pitfall: Hardcoding sensitive credentials in Custom Data scripts which can be exposed in VM metadata.
  • Use case: Serving static assets via Nginx containers for fast, scalable content delivery in microservices. Pitfall: Forgetting to clean default Nginx directories, leading to conflicting index files or default splash pages.

References:

Continue reading

Next article

Building x402-Gated MCP Endpoints with Base L2 USDC Payments

Related Content