# Setting Up Containers for Lightweight Workloads

Linux Containers (LXC) are a powerful feature in Proxmox, allowing you to run lightweight, resource-efficient workloads with minimal setup. Whether you’re hosting a small web server, testing a new application, or setting up a DNS service, LXC containers are a great way to get started quickly without the overhead of a full virtual machine.

In this guide, I’ll walk you through the process of setting up LXC containers in Proxmox and share tips to optimize them for lightweight workloads. Even though I primarily use containers for testing in my homelab, they’ve proven invaluable for quick experiments and resource-efficient deployments.

---

## Prerequisites

Before setting up an LXC container, make sure you have:

1. **Proxmox VE Installed**: Ensure your Proxmox host is up and running.
2. **Storage Configured**: Define storage locations for container images and data.
3. **Templates Available**: Download LXC templates via the Proxmox interface.

---

## Step-by-Step Setup

### Step 1: Download an LXC Template

1. Log in to the Proxmox web interface.
2. Navigate to **`Datacenter > Storage`** and select the storage you’ve designated for containers.
3. Click **Templates**, then browse the list of available templates (e.g., Ubuntu, Debian, Alpine).
4. Select a template suitable for your workload and click **Download**.

### Step 2: Create a New LXC Container

1. In the Proxmox web interface, navigate to **`Create CT`** (short for Create Container).
2. Fill out the following details:
    - **Node**: Select the Proxmox host.
    - **Hostname**: Enter a name for the container (e.g., `lightweight-app`).
    - **Password**: Set a strong root password for the container.
3. Choose the **template** you downloaded in Step 1.

### Step 3: Configure Resources

Assign resources to the container:

- **CPU**: Specify the number of cores (e.g., 1 or 2 for lightweight workloads).
- **Memory**: Allocate sufficient RAM (e.g., 512 MB or 1 GB).
- **Disk Space**: Define the disk size (e.g., 8 GB).

These settings ensure the container remains lightweight while providing enough capacity for the workload.

### Step 4: Network Configuration

1. Select the **network bridge** (e.g., `vmbr0`) for the container.
2. Assign an IP address. You can:
    - Use DHCP to automatically get an IP from your network.
    - Assign a static IP for more control.
3. Set the DNS server, if needed (e.g., your Pi-hole instance).

### Step 5: Finalize and Start

1. Review your settings in the summary screen.
2. Click **Finish** to create the container.
3. Once created, start the container and access its console to verify functionality.

---

## Post-Setup Configuration

### Install Required Packages

Use your container’s package manager (e.g., `apt`, `apk`, or `yum`) to install necessary software. For example, if you’re setting up a web server:

```bash
apt update && apt install nginx -y
```

### Optimize for Lightweight Workloads

- **Resource Limits**: Adjust CPU and memory limits via the Proxmox interface if needed.
- **Reduce Startup Services**: Disable unnecessary services within the container to save resources.
- **Backups**: Schedule regular backups using Proxmox’s built-in tools.

---

## Example Use Case: Hosting a Simple Web Server

1. Create a container using an Ubuntu template.
2. Install Nginx with:
    
    ```bash
    apt update && apt install nginx -y
    ```
    
3. Start Nginx and verify it’s running:
    
    ```bash
    systemctl start nginx
    systemctl enable nginx
    ```
    
4. Access the container’s IP in your browser to see the default Nginx page.

---

## Final Thoughts

Setting up LXC containers in Proxmox is straightforward and efficient, making them ideal for lightweight workloads. While I mostly use containers for testing in my homelab, they’ve consistently proven their value for quick, low-resource deployments. If you’re just getting started, try creating a small container to explore its capabilities—you might find it’s the perfect fit for more than just testing!