These notes supplement the presentation. They outline basic usages of Docker in the context of spinning up a Wordpress server.
In order to view the presentation, please click on the slides
or pdf
links above.
curl -sSL https://get.docker.com | sh
# Executing docker install script, commit: 92d5116
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian stretch edge" > /etc/apt/sources.list.d/docker.list
+ [ raspbian = debian ]
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client:
Version: 18.04.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 3d479c0
Built: Tue Apr 10 18:25:24 2018
OS/Arch: linux/arm
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.04.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 3d479c0
Built: Tue Apr 10 18:21:25 2018
OS/Arch: linux/arm
Experimental: false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker [user]
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.
docker run --name nginxHost -d -p 1537:80 nginx
Breakdown of options
--name
: give the container a name-d
: detach from the container at startup but keep running:80
Have the container broadcast to docker bridge over port 801537:
Have the host broadcast html over port 1537$ docker rm -f nginxHost # removes the container even if running
nginxHost
Show all locally stored docker images, even unused ones
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5e9a751dd34b 7 days ago 88MB
erase a locally stored image by name
mikey@raspberrypi:~ $ docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:18156dcd747677b03968621b2729d46021ce83a5bc15118e5bcced925fb4ebb9
Deleted: sha256:5e9a751dd34bb183e7420687b1267bbaacce6db1ac46ea50e4c940bc65341b55
Deleted: sha256:da6e92160985350cc11d8f2b2574f4df8ab6719cbe6f928d61fc45dca18f74c7
Deleted: sha256:08d44e544461d26f1c31c8f8aff193ce514a2a2c59cc479f7686ec9181fb9206
Deleted: sha256:ce5f8bad44b279bcfff7c568fe6eca2650592cc0a7109ea424aac8061a87ec3b
DockerFile:
FROM ubuntu:14.04
MAINTAINER md537@njit.edu
RUN apt-get install -y apache2
EXPOSE 80
CMD [“apache2ctl””, “-D”, “FOREGROUND”]
Pull a docker image into a custom dockerfile in the current working directory. :1.0
gives the dockerfile a version.
$ docker build -t webhost:1.0 .
Run the container from dockerfile detached and broadcasting from port 1538
on the host.
$ docker run -it --name apacheHost -d -p 1538:80
Docker ps vs Docker ls
try docker ps
or docker container ls
What about docker port nginxHost
?
Okay. Lets build a wordpress manually using docker containers and the docker bridge.
Database
$ mkdir -p ~/docker/db
$ docker run -d -v /home/mikey/docker/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=cs332 -p 1540:3306 --name wordpressdb mariadb:10.0.25
view in sql client 127.0.0.1 root | cs332 this is not a talk on setting up apache we will use the existing wordpress container
$ docker pull wordpress:4.6.1-php7.0-apache
Lets get some things straight docker images
$ docker run -d --name wordpressHost --link wordpressdb:mysql -p 8080:80 wordpress:4.6.1-php7.0-apache
This should automatically pick up the ip:port of the wordpressdb container. To troubleshoot, if there is an issue we can broadcast over the default 3306.
We can now browse to localhost:8080 and see the wp startup.
docker run --name nginxHost -d -p 1537:80 nginx
Visit and be amazed
$ mkdir -p ~/docker/db
$ docker run -d -v /home/mikey/docker/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=cs332 -p 1540:3306 --name wordpressdb mariadb:10.0.25
We now have a database running (docker ps) but now web server. Lets pull in an html server
$ docker pull wordpress:4.6.1-php7.0-apache
We now have to ‘link’ the webserver with the database over the docker bridge SDN
.
$ docker run -d --name wordpressHost --link wordpressdb:mysql -p 8080:80 wordpress:4.6.1-php7.0-apache
[Visit]($ docker run -d –name wordpressHost –link wordpressdb:mysql -p 8080:80 wordpress:4.6.1-php7.0-apache)