SlideShare a Scribd company logo
www.aurorasolutions.io
Ship Python Apps with Docker!
www.aurorasolutions.io
Raise your hands if you have...
❖ Tried Docker (online tutorial)
❖ Tried real Docker (e.g. deployed on remote VM)
❖ Installed Docker locally (e.g. with boot2docker)
❖ Written a Dockerfile (and built it!)
❖ An image on Docker hub (pushed or autobuilt)
❖ Deployed Docker images for dev/QA/test/prod… etc.
www.aurorasolutions.io
About: Rasheed
Full Stack Developer & Co-Founder @ Aurora Solutions -
Provides REMOTE Teams specializing in JVM languages and
Angular + Ember
My team at Aurora specializes in:
► Web/Backend Apps ◄ Java, Groovy, Grails, C# and
AngularJS/EmberJS based single or multi page web apps
► Mobile Apps ◄ Android & iOS
Business domains we specialize in:
¤ Media Streaming
¤ Automated/Algorithmic Trading
¤ Bitcoin / Crypto Currency
LinkedIn: https://se.linkedin.com/in/rasheedwaraich
Email: rasheed@aurorasolutions.io
www.aurorasolutions.io
Agenda
● Background
● Container vs VM
● Define Sample App
● Build/Run Docker Images
● Docker Index
● Deploy Locally
● Deploy AWS
● Deploy GCE
www.aurorasolutions.io
Background
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
A useful analogy...
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
Say again?
❏ Build: package your application in a container
❏ Ship: move that container from a machine to another
❏ Run: execute that container
❏ Any application: anything that runs on Linux
❏ Anywhere: local VM, cloud instance, bare metal…
www.aurorasolutions.io
Container vs. VM
www.aurorasolutions.io
www.aurorasolutions.io
www.aurorasolutions.io
Basic Docker Concepts
www.aurorasolutions.io
Main Docker Parts
● docker daemon
○ used to manage docker (LXC) containers on the host it runs
● docker CLI
○ used to command and communicate with the docker daemon
● docker image index
○ a repository (public or private) for docker images
www.aurorasolutions.io
Main Docker Elements
● Dockerfiles
○ scripts automating the building process of images
● docker images
○ snapshots of containers or base OS (e.g. Ubuntu) images
● docker containers
○ directories containing everything-your-application
www.aurorasolutions.io
Install Docker (Ubuntu 14.04)
Step 1: add docker repository key to apt-key for package verification
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
Step 2: add the docker repository to your list of repositories:
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main >
/etc/apt/sources.list.d/docker.list"
Step 3: finally install docker with an apt-get combo:
sudo apt-get update
sudo apt-get install lxc-docker
www.aurorasolutions.io
Sample python flask app!
www.aurorasolutions.io
Sample flask app
❏ repo
❏ https://github.com/rasheedamir/flask-sample
❏ flask-sample app structure
❏ app.py
❏ requirements.txt
❏ Dockerfile
www.aurorasolutions.io
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Welcome To PyCon Sweden 2015!"
if __name__ == "__main__":
app.run('0.0.0.0')
www.aurorasolutions.io
requirements.txt
flask
www.aurorasolutions.io
Install & Run locally!
❏ sudo apt-get install -y python-setuptools
❏ sudo easy_install pip
❏ sudo pip install -r requirements.txt
❏ python app.py
* Running on http://0.0.0.0:5000/
www.aurorasolutions.io
How to build a Docker Image?
Dockerfile: http://docs.docker.io/reference/builder/
www.aurorasolutions.io
Dockerfile
FROM ubuntu
# Install Python Setuptools
RUN apt-get install -y python-setuptools
# Install pip
RUN easy_install pip
# Install requirements.txt
ADD requirements.txt /src/requirements.txt
RUN cd /src; pip install -r requirements.txt
# Add the Flask App
ADD . /src
# EXPOSE PORT
EXPOSE 5000
# Run the Flask APP
CMD python src/app.py
www.aurorasolutions.io
Build an Image
❏ docker build -t <image name> <Dockerfile PATH>
❏ docker build -t pycon-app .
Step 0 : FROM ubuntu
---> 07f8e8c5e660
Step 1 : RUN apt-get install -y python-setuptools
---> Using cache
---> f2a1db95b4b8
Step 2 : RUN easy_install pip
---> Using cache
---> 643c89e6188d
…(ignore)...
Successfully built 403ed7ef1455
www.aurorasolutions.io
List an Image
❏ docker images
www.aurorasolutions.io
Run it!
❏ docker run -d -p 5000:5000 pycon-app
❏ -d : detached mode
❏ -p : port forwarding
www.aurorasolutions.io
List Container(s)
❏ docker ps -a
❏ -a: list stopped containers as well
www.aurorasolutions.io
Stop/Kill Container(s)
❏ docker kill <CONTAINER ID>
www.aurorasolutions.io
Remove Container!
❏ docker rm <CONTAINER ID>
❏ removes the container
www.aurorasolutions.io
Remove Image!
❏ docker rmi <IMAGE ID>
❏ removes the image!
www.aurorasolutions.io
Deploy Locally!
www.aurorasolutions.io
Docker Index
www.aurorasolutions.io
Docker Index
❏ https://index.docker.io/
❏ It’s GitHub for Docker images!
❏ You can pull activemq, mysql, mongodb, hadoop, … etc.
❏ You can hook your docker index repository on to your own repository on GitHub!!!
❏ Build images automatically once you push something to Github
www.aurorasolutions.io
flask-sample repository
❏ https://registry.hub.docker.com/u/rasheedamir/flask-sample/
www.aurorasolutions.io
Deploy on EC2!
www.aurorasolutions.io
Deploy on GCE!
www.aurorasolutions.io
Docker Linking
www.aurorasolutions.io
www.aurorasolutions.io
Thank you!
Questions...

More Related Content

Ship python apps with docker!