Serving a Website from a LXD Container

30 minutes
  • 5 Learning Objectives

About this Hands-on Lab

Containers can serve many purposes, but one of the most common is serving websites. In this hands-on lab, we’ll leverage everyday LXD commands to initialize a container, configure it to serve a website, and snapshot it so we can later deploy a cluster if desired.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create the Container

Launch an Alpine Linux 3.11 container, called web01:

lxc launch images:alpine/3.11 web01
Configure nginx

Access the container’s shell:

lxc exec web01 -- ash

Update the container and install nginx:

apk update
apk add nginx

Configure nginx to start at boot:

rc-service nginx start && rc-update add nginx default

Update the nginx configuration to serve content out of /var/www/hub at port 80:

vi /etc/nginx/conf.d/default.conf
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/hub/;

Exit the container:

Deploy the Website

Push the website to the container:

lxc file push hub/ web01/var/www/ --create-dirs -r

Then restart nginx:

lxc exec web01 -- rc-service nginx restart

We can confirm this work by running curl against the private IP of our container:

lxc list
curl <container-ip-from-list>
Snapshot the Container

Take a snapshot of the web01 container:

lxc snapshot web01 1.0
Map Ports

Ensure that when the host’s IP is accessed, it forwards to the container:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to <container_ip>:80

To confirm visit the public IP of your provided server.

Additional Resources

You have been tasked with creating the LXD environment that will serve your company's website. Create an Alpine Linux 3.11 container and configure it to serve websites using nginx. Since you know that you will eventually need to use this website in a cluster, be sure to take a snapshot when finished.

As a bonus, ensure the website is available over port 80 on the host server, and thus viewable to the public.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Get Started
Who’s going to be learning?

How many seats do you need?

  • $499 USD per seat per year
  • Billed Annually
  • Renews in 12 months

Ready to accelerate learning?

For over 25 licenses, a member of our sales team will walk you through a custom tailored solution for your business.


Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!