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:
exit
- 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.