Node.js in a Docker Container
Lenworth Henry (lenworth.henry@gmail.com)
What is Docker
●

●

Docker is an easy way to create a lightweight
container from any application
The same container you u...
What can you do with Docker
●

Software distribution (app + dependencies)
–

e.g. NodeJs web apps (app+node+mongo+redis)

...
Why did I seek out Docker
●

●

●

Every time a new framework or library was
added to our code base the developers got
out...
Why not Vagrant
●

●

●

Vagrant requires each machine to have
VM software like Virtuabox
Vagrant is not designed for crea...
What  you will need
●

A workstation running Linux kernel 3.8
or greater
–

●

Docker containers can run inside VMs like
V...
Getting Started With Docker
Simple Docker Example
Docker speak
●

●

●

A container is a running instance of an
image.
You create an image starting with one of
the images f...
Two work­flows with docker
●

Using commits
–
–

Connect to the shell of the base image and add whatever software,
customi...
How to create a Docker File
●

If you don't remember all the packages
you installed then you can launch a
shell using a ba...
Shell for Your Container
●

Once a docker image has been
created you can run it and enter the
bash shell using this comman...
Docker gotchas
●

You can only run one command or entrypoint for a container
–
–

●

●

You only have one cmd or entrypoin...
Two containers
●

●

●

DB container is separate because it
rarely changes
The Node app resides in its own
container
Commu...
Example MEAN Stack app
●

MongoDB, Express, Angular and Node
–

Uses PassPortJS for authentication
Need to start multiple 
processes?
●

●

Each Dockerfile will have only one
entry point
Two options:
–

Create your own sh...
Example supervisord.conf
Helpful Docker commands 
●

logs (sudo docker logs @containerid)
–

●

Gives a print out of the tty after running

ps (sud...
Docker Tips
●

Only run in daemon mode (-d) if you have run
it without -d to see if there are any problems
with your confi...
Questions and Helpful Links
●

●

●

●

Main Docker Site:
https://docs.docker.io/
Index Site (Prebuilt image search):
http...
Upcoming SlideShare
Loading in …5
×

Introduction to Docker for NodeJs developers at Node DC 2/26/2014

3,152 views

Published on

This was my presentation to the Node DC meetup on using Docker for Node JS projects. The code for the demonstration is available at github: https://github.com/lenworthhenry/Docker-Example

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,152
On SlideShare
0
From Embeds
0
Number of Embeds
43
Actions
Shares
0
Downloads
16
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Introduction to Docker for NodeJs developers at Node DC 2/26/2014

  1. 1. Node.js in a Docker Container Lenworth Henry (lenworth.henry@gmail.com)
  2. 2. What is Docker ● ● Docker is an easy way to create a lightweight container from any application The same container you use in development can be scaled to production on any platform that supports Linux Containers (Amazon, VMs, etc)
  3. 3. What can you do with Docker ● Software distribution (app + dependencies) – e.g. NodeJs web apps (app+node+mongo+redis) ● Fast spin-up VMs (no booting) ● Automated testing and continuous integration/deployment. ● ● Deploying and scaling databases and back-end services in a service-oriented environment. Document what components you need to run your application
  4. 4. Why did I seek out Docker ● ● ● Every time a new framework or library was added to our code base the developers got out of sync and we lost productivity We needed a way to synchronize our development environments I also needed a way to keep track of all the components that we were using in our application (i.e. not use history to tell what I have installed)
  5. 5. Why not Vagrant ● ● ● Vagrant requires each machine to have VM software like Virtuabox Vagrant is not designed for creating containers for production because of all the overhead Vagrant wasn't any easier to configure than docker, but, the container footprint was larger
  6. 6. What  you will need ● A workstation running Linux kernel 3.8 or greater – ● Docker containers can run inside VMs like Virtuabox, but, as Linux containers they are made for Linux Knowledge of how to configure your application on bare hardware – There is lots of help for this
  7. 7. Getting Started With Docker
  8. 8. Simple Docker Example
  9. 9. Docker speak ● ● ● A container is a running instance of an image. You create an image starting with one of the images found on the index and adding any customizations either from inside the running container or using a Dockerfile Dockerfile-->(build)-->Image---(run)->Container
  10. 10. Two work­flows with docker ● Using commits – – Connect to the shell of the base image and add whatever software, customizations and your source (e.g. pull a git remote repository) – Commit to a new image – ● Run a base image Run that image Using Dockerfile – Create a dockerfile that includes all your configurations, customizations and access to your source – This can all be pulled down from git to a different workstation – This is the most reliable option since your Dockerfile should be rewritten that you can recreate the image with one command.
  11. 11. How to create a Docker File ● If you don't remember all the packages you installed then you can launch a shell using a base image and then run all the steps. Each step can be copied to the docker file as a “RUN” command
  12. 12. Shell for Your Container ● Once a docker image has been created you can run it and enter the bash shell using this command: – sudo docker run -t -i --rm ubuntu bash
  13. 13. Docker gotchas ● You can only run one command or entrypoint for a container – – ● ● You only have one cmd or entrypoint. Only one will get executed. You must create a start script or use something like supervisord If you change your source on the client you have to rebuild the image to see those changes on the container. You can't have long running processes in your Dockerfile – Each step is meant to execute and complete – Daemon like functionality should be executed when the container is running
  14. 14. Two containers ● ● ● DB container is separate because it rarely changes The Node app resides in its own container Communication is enabled between the two containers using linking – Linking works the same in production environment
  15. 15. Example MEAN Stack app ● MongoDB, Express, Angular and Node – Uses PassPortJS for authentication
  16. 16. Need to start multiple  processes? ● ● Each Dockerfile will have only one entry point Two options: – Create your own shell script that starts up the processes and call that using a CMD or ENTRYPOINT – Use supervisord
  17. 17. Example supervisord.conf
  18. 18. Helpful Docker commands  ● logs (sudo docker logs @containerid) – ● Gives a print out of the tty after running ps (sudo docker ps) – – ● Shows you all running containers Containers running in daemon mode will show up here for as long as they are running stop (sudo docker stop @containerid) – Stops a running container
  19. 19. Docker Tips ● Only run in daemon mode (-d) if you have run it without -d to see if there are any problems with your configuration – ● You will not see errors printed out to stdout while trying to load the container Watch your disk space while creating images and containers – Docker creates intermediate containers that can quickly eat up disk space – Use the -rm=true when building
  20. 20. Questions and Helpful Links ● ● ● ● Main Docker Site: https://docs.docker.io/ Index Site (Prebuilt image search): https://index.docker.io/ How to cleanup docker disk usage: http://sosedoff.com/2013/12/17/cleanup-docker-cont Docker Networking Details: https://blog.codecentric.de/en/2014/01/docker-netwo

×