Container |
I need to test some html running in Wordpress.
But I don't use Wordpress...obviously.
In Linux, that's easy to fix. Just install Wordpress.
Oops, not so easy: Wordpress pulls in an entire LAMP stack with it.
That's a lot to pollute my laptop with just to do some testing.
Containers to the rescue!
Let's spin up a container, install LAMP and Wordpress inside it, run the tests, then destroy the container.
Cargo |
The Router
I'm going to open a whole new port on my router's firewall for this, so others can help me test.
On the router, I want to forward port 112233 to the similar port on the server.
On the server, I want to forward port 112233 to the container's port 80. (That part is later)
Creating the container
Thanks the the amazing Stephane Graber for his detailed instructional series on how to create and use a container This is a slightly different setup than he did. Instead of installing directly on, say, a laptop, I'm installing the container onto a server that I access via ssh.
Three moving pieces: Laptop (me), Server (headless), Container (added to server)
So, from Laptop, I ssh into Server normally.
On SERVER: sudo apt-get install lxc # Install the container system sudo lxc-create -t ubuntu-cloud -n c1 # Download and install a 195MB cloud image of Ubuntu 14.10 sudo lxc-start -n wp1 -d # Boot the image in the background (name is 'wp1') sudo lxc-info -n wp1 # Discover the IP of the image Name: c1 State: RUNNING IP: 10.0.3.201 # <-- Ooh, there is the IP ping 10.0.3.201 # Check network connectivity on the container PING 10.0.3.201 (10.0.3.201) 56(84) bytes of data. 64 bytes from 10.0.3.201: icmp_seq=1 ttl=64 time=0.081 ms 64 bytes from 10.0.3.201: icmp_seq=2 ttl=64 time=0.085 ms # Forward port 112233 to the container sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 112233 -j DNAT --to-destination 10.0.3.201:80 sudo iptables -A FORWARD -p tcp -d 10.0.3.201 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Set up LAMP and Wordpress within the container
The container is installed, started, and responds to ping.
On SERVER: sudo lxc-console -n wp1 # Login to the console of wp1 (username: ubuntu, password: ubuntu)
A couple words about the container.
I'm going to skip the part where you would delete the 'ubuntu' user and add your own admin user and password. But you should do it.
Also, two pieces of information you should have handy before going farther.
- Server's IP address on the LAN (mine is 192.168.0.101)
- The real, fully qualified domain name (freds_blog.fred.com) that readers on the internet will use
Special thanks to the Ubuntu community for putting together this fantastic tutorial about how to install wordpress in Ubuntu.
# On CONTAINER sudo apt-get install mysql-server wordpress # 49 packages, 28MB download
Let's jump over to Laptop for a moment and check that Server's port forwarding and Container's apache service are working: Open a browser window, and look for http://192.168.0.101:112233. You should get the apache default page. Success! Okay, now back to Container:
# On CONTAINER
sudo ln -s /usr/share/wordpress /var/www/html/wordpress # Make Wordpress accessible from apache # Create mysql account, and link it to Wordpress sudo gzip -d /usr/share/doc/wordpress/examples/setup-mysql.gz sudo bash /usr/share/doc/wordpress/examples/setup-mysql -n freds_blog_fred_com freds_blog.fred.com # Prevent a Wordpress error (can't locate config file) from within the LAN # by linking the LAN addr to existing FQDN config file sudo ln /etc/wordpress/config-freds_blog.fred.com.php /etc/wordpress/config-192.168.0.101.php exit <ctrl+a, q> to exit the console
Use Wordpress
The setup is complete. Since I'm on my LAN, I point my Laptop browser to http://192.168.1.101/wordpress/ and I get the Wordpress setup screen.
Outside, on the big wide internet, I would point it to http://freds_blog.fred.com/wordpress/ (er, that's an example - you already know that's not my real blog).
Wordpress is ready for my data.
Bye, Container! |
Destroying the container
This is one of the true joys of LXC
# On SERVER sudo lxc-stop -n wp1 sudo lxc-destroy -n wp1
And all the work is wiped out forever....
Remember to clean up:
- Uninstall lxc from the server
- Delete the iptables rules on the server
- Close the port on the router firewall