knock on dockers door and get in

By | September 5, 2020

In the last blog we created containers and looked at them from the outside. Next we will install ubuntu and get inside our container. Once there we can play around and install an apache server. This will be fun.

ubuntu play time

Let’s create an ubunto container using the following command docker run --name myWebServer -p 8080:80 -t -i ubuntu. This will put us into a bash shell at the root directory. Once there we can run linux commands like ls to list out the directories in our ubunto distribution.

docker run --name myWebServer -p 8080:80 -t -i ubuntu
Downloaded newer image for ubuntu:latest
root@abae4da22ea3:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

We can get out of the shell by entering “exit”. This will stop the container and return us to the command line. If we want to leave the container running we can press ctrl+p and ctrl+q to exit to the command line.

To restart the container we can enter the following.

docker container start -ai myWebServer

Alternatively if we left the container running we could get back into it using.

docker attach myWebServer

Install some apps in our ubuntu container

Next we will install curl and vim so we can play around in our container and make changes. These changes will be persistent for this container only.

apt-get update
apt-get install curl
apt-get install vim

First try some curl commands like curl --version.

curl --version
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

Then get the headers from google using curl -I www.google.com .

curl -I www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Sat, 05 Sep 2020 04:22:02 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Sat, 05 Sep 2020 04:22:02 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2020-09-05-04; expires=Mon, 05-Oct-2020 04:22:02 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=204=SSRcEBj8cZXR438Z2A9UwPn8FPd5gFquOUaHlE5zcxlIozjrXU0Zu-BcWRzy0H0JNK2diRxWddgIhgr4RgzBeLp04ZAuu9-ycnHokZbVHo6nXCNxLVqlJ74-qFESE5BdS0p7k4kyQq8dEL-mCHobdf4nQRkS5G13b3geVTBHAXU; expires=Sun, 07-Mar-2021 04:22:02 GMT; path=/; domain=.google.com; HttpOnly

Next create a file with vim and list it out with cat.

vim my_file

Once in vim press “i” to start editing the file. When finished press “esc” then “:wq” to save the file. Then print out the file to your terminal using “cat my_file”

cat my_file
This is a test

And finally delete the file by typing in rm my_file .

rm my_file

Install a web server in our container.

We saw previously that we could install Curl and Vim in our ubuntu container. We can also install an Apache web server. How cool is that?

Install apache buy typing in apt-get install apache2.

Then run your server using service apache2 start.

Then go to your browser and enter localhost:8080 and the following will be displayed.

Navigate to the var/www/html folder where you will find the index.html file.

cd var/www/html
ls
index.html

Edit the file using vim index.html to add some new html. Press esc :wq to save the changes. Refresh your browser and see your changes.

vim index.html

Congratulations you have created a web server inside a ubuntu container and changed the web page content.

Docker Desktop

These containers are running in Docker Desktop. When you open desktop we can see our containers running. You can also start and stop the container and enter into the bash shell all from docker desktop. Nice tool.

Our next post will be on how containers can communicate with each other.