Node on Docker

March 2020 JaxNode

Docker Facts

  • Project started out dotCloud
  • Written in Go
  • Using Linux Isolation features of namespaces and cgroups 
  • Offer services like Docker Hub and Docker Cloud
  • Windows 2016 Server is added Docker

Docker

  • Uses hyper-V on Windows
  • Use xhyve on Mac OS X
  • Remove need for Oracle VirtualBox
  • Containers also on Windows

Docker terms

  • Docker Engine
  • Docker Machine
  • Docker Compose
  • Docker Swarm
  • Docker Hub
  • Docker Cloud

Common Docker Commands

  • docker build
  • docker run
  • docker run -i -t
  • docker run -d
  • docker attach
  • docker ps
  • docker ps -a
  • docker commit

Docker-Machine

  • docker-machine ls
  • docker-machine create
  • eval "$(docker-machine env default)"
  • docker-machine start
  • docker-machine stop
  • docker-machine kill

Docker Compose

  • Organize your containers and services
  • docker-compose.yml
  • 'docker-compose up' to deploy containers
  • Gives an abstraction for deploying multiple services

Docker Swarm

  • Combine a pool of Docker hosts into 1
  • Can create Clusters
  • Uses Docker API
  • Discovery Services
  • Scheduling

Docker Hub

  • A host for containers
  • Publish your containers
  • Search Public repositories
  • Pull down to build containers

Docker Cloud

  • Deploy to your own cloud
  • Define a node
  • Define cluster of nodes of same type
  • Cluster Nodes have to by of the same provider
  • You can use with AWS, Azure, Digital Ocean or your own hosts

Building Containers

  • Start with base image
  • Use Dockerfile to define and set up
  • Can run and commit, but better to use Dockerfile 
  • For Nodejs apps, split the npm install and adding code step into separate steps

Dockerfile

FROM node:14.4.0

RUN mkdir /src
COPY package.json /src
WORKDIR /src 
RUN npm install

ENV foo bar
 
# Add your source files
COPY . /src  
CMD ["npm","start"] 

Dockerfile commands

  • FROM specify base container image
  • ADD/COPY lets you add files to container
  • RUN will let you run a Bash command
  • CMD takes an array of commands
  • ENV sets up an environment variable
  • EXPOSE exposes a port
  • USER to set the user
  • WORKDIR to set the directory your working dir

Docker Build

bash > docker build -t username/container:version /src

Docker run

bash > docker run -d -p 80:3000 username/container:version

Running Multiple Containers

  • Test Dependencies
  • Simulate Persistence Services
  • Run Tests on Mock Data

Common Scenario

  • Run HAProxy or Nginx
  • Use a database like MySQL or Mongo
  • Use Cache like Redis or HBase
  • Search with Elasticsearch

Honorable Mentions

  • Kubernetes
  • Mesos
  • Heroku

Demo

Code

  • https://github.com/jaxnode-UG/jaxnodechat
  • https://github.com/jaxnode-UG/node6es2015
  • https://slides.com/davidfekke/node6docker

Questions

Contact

  • David Fekke @ gmail dot com
  • Twitter @JaxNode
  • Skype: davidfekke

Docker for Node Development

By David Fekke

Docker for Node Development

These are the slides for the March 2020 JaxNode meetup. This presentation will cover developing Node applications with Docker.

  • 720