SlideShare a Scribd company logo
1 of 20
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 use in development
can be scaled to production on any platform
that supports Linux Containers (Amazon, VMs,
etc)
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
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)
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
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
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 found on the index and
adding any customizations either from
inside the running container or using a
Dockerfile
Dockerfile-->(build)-->Image---(run)->Container
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.
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
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
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
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
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 shell script that starts up
the processes and call that using a CMD
or ENTRYPOINT

–

Use supervisord
Example supervisord.conf
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
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
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

More Related Content

What's hot

What's hot (20)

Docker introduction - Part 1
Docker introduction - Part 1Docker introduction - Part 1
Docker introduction - Part 1
 
Meetup 05 27-2015
Meetup   05 27-2015Meetup   05 27-2015
Meetup 05 27-2015
 
Docker Compose: Docker Configuration for the Real World
Docker Compose:  Docker Configuration for the Real WorldDocker Compose:  Docker Configuration for the Real World
Docker Compose: Docker Configuration for the Real World
 
Introduction to Docker - Getting Started with Docker
Introduction to Docker - Getting Started with DockerIntroduction to Docker - Getting Started with Docker
Introduction to Docker - Getting Started with Docker
 
Docker. Micro services for lazy developers
Docker. Micro services for lazy developersDocker. Micro services for lazy developers
Docker. Micro services for lazy developers
 
Sep Nasiri "Upwork PHP Architecture"
Sep Nasiri "Upwork PHP Architecture"Sep Nasiri "Upwork PHP Architecture"
Sep Nasiri "Upwork PHP Architecture"
 
Building CLI Applications with Golang
Building CLI Applications with GolangBuilding CLI Applications with Golang
Building CLI Applications with Golang
 
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4
 
Introduction to Docker Container
Introduction to Docker ContainerIntroduction to Docker Container
Introduction to Docker Container
 
Boston Code Dojo - Docker meetup slides
Boston Code Dojo - Docker meetup slidesBoston Code Dojo - Docker meetup slides
Boston Code Dojo - Docker meetup slides
 
docker compose
docker composedocker compose
docker compose
 
Moving to Docker... Finally!
Moving to Docker... Finally!Moving to Docker... Finally!
Moving to Docker... Finally!
 
Docker 101
Docker 101Docker 101
Docker 101
 
Rkt Container Engine
Rkt Container EngineRkt Container Engine
Rkt Container Engine
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
Docker cheat-sheet
Docker cheat-sheetDocker cheat-sheet
Docker cheat-sheet
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2
 
Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Orchestration of docker containers at scale
Orchestration of docker containers at scaleOrchestration of docker containers at scale
Orchestration of docker containers at scale
 

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

Similar to Introduction to Docker for NodeJs developers at Node DC 2/26/2014 (20)

[@NaukriEngineering] Docker 101
[@NaukriEngineering] Docker 101[@NaukriEngineering] Docker 101
[@NaukriEngineering] Docker 101
 
Dockerized maven
Dockerized mavenDockerized maven
Dockerized maven
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
 
Docker in everyday development
Docker in everyday developmentDocker in everyday development
Docker in everyday development
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Docker workshop GDSC_CSSC
Docker workshop GDSC_CSSCDocker workshop GDSC_CSSC
Docker workshop GDSC_CSSC
 
Run automated tests in Docker
Run automated tests in DockerRun automated tests in Docker
Run automated tests in Docker
 
Docker up and Running For Web Developers
Docker up and Running For Web DevelopersDocker up and Running For Web Developers
Docker up and Running For Web Developers
 
Docker Up and Running for Web Developers
Docker Up and Running for Web DevelopersDocker Up and Running for Web Developers
Docker Up and Running for Web Developers
 
Introduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxDataIntroduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxData
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
JOSA TechTalks - Docker in Production
JOSA TechTalks - Docker in ProductionJOSA TechTalks - Docker in Production
JOSA TechTalks - Docker in Production
 
Docker for .NET Developers
Docker for .NET DevelopersDocker for .NET Developers
Docker for .NET Developers
 
Introduction of Docker and Docker Compose
Introduction of Docker and Docker ComposeIntroduction of Docker and Docker Compose
Introduction of Docker and Docker Compose
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and JenkinsExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
 
PuppetConf 2017: What’s in the Box?!- Leveraging Puppet Enterprise & Docker- ...
PuppetConf 2017: What’s in the Box?!- Leveraging Puppet Enterprise & Docker- ...PuppetConf 2017: What’s in the Box?!- Leveraging Puppet Enterprise & Docker- ...
PuppetConf 2017: What’s in the Box?!- Leveraging Puppet Enterprise & Docker- ...
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Powercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptxPowercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptx
 
DevAssistant, Docker and You
DevAssistant, Docker and YouDevAssistant, Docker and You
DevAssistant, Docker and You
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

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

  • 1. Node.js in a Docker Container Lenworth Henry (lenworth.henry@gmail.com)
  • 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. 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. Example MEAN Stack app ● MongoDB, Express, Angular and Node – Uses PassPortJS for authentication
  • 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
  • 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. 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. 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