For Wordpress Development
Teacher and Mentor
Meetup Organizer
Ruby Developer
Part-time DevOps
Not a Wordpress Dev
( ^ this is encouraging )
Docker allows you to package an application with all of its dependencies into a standardized unit for software development.
Docker is not a virtual machine manager
Start time ( seconds v.s. minutes )
Server resources ( 128MB v.s. 1GB RAM )
Consistency ( no more "works for me" )
Idempotent builds ( same instructions always )
Isolation of dependencies ( Redis/MySQL in Docker )
Easy to share containers ( docker pull image_name )
The big picture
OSX || Linux || Windows
Engine || Machine || Compose || Registry || Swarm
Primary runtime
# run an some_container and shut it down after exit
$ docker run -it some_container some_command
# list all the containers available within local docker host
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee51d10253ae ubuntu "bash" 30 minutes ago Exited (0) 17 seconds ago jolly_jones
1f7f1f55c9e2 hello-world "/hello" 32 minutes ago Exited (0) 32 minutes ago gloomy_kirch
Container Dependencies
FROM ubuntu:latest
RUN apt-get update
RUN apt-get -y upgrade
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install \
mysql-client mysql-server apache2 libapache2-mod-php5
pwgen python-setuptools vim-tiny php5-mysql php5-ldap
RUN easy_install supervisor
ADD ./scripts/start.sh /start.sh
ADD ./scripts/foreground.sh /etc/apache2/foreground.sh
ADD ./configs/supervisord.conf /etc/supervisord.conf
ADD ./configs/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN rm -rf /var/www/
ADD https://wordpress.org/latest.tar.gz /wordpress.tar.gz
RUN tar xvzf /wordpress.tar.gz
RUN mv /wordpress /var/www/
RUN chown -R www-data:www-data /var/www/
RUN chmod 755 /start.sh
RUN chmod 755 /etc/apache2/foreground.sh
RUN mkdir /var/log/supervisor/
EXPOSE 80
CMD ["/bin/bash", "/start.sh"]
Creates and manages the VM running Docker
$ docker-machine start default
> Starting VM...
$ eval "$(docker-machine env default)"
$ env | ack DOCK
DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_CERT_PATH=/Users/mansfield/.docker/machine/machines/default
DOCKER_MACHINE_NAME=default
Configures ports, env, and links between containers
# project_dir/docker-compose.yml
---
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
docker-compose.yml
# from within same dir as docker-compose.yml
$ docker-compose up
Pulling image redis...
Building web...
Starting composetest_redis_1...
Starting composetest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576
web_1 | * Running on http://0.0.0.0:5000/
web_1 | * Restarting with stat
Docker-compose CLI
Store private or use open source containers
Setup and manage a cluster of hosts