Introdução ao Dokcer

O intuito dessa apresentação é aprender alguns conceitos básicos. Apenas uma breve introdução para entender por onde e como começar.

Igor Ribeiro Lima - lima.igorribeiro@gmail.com

  • Formado em Ciencia da Computação, e mestre em Engenharia de Sistema
  • Atualmente trabalho remoto em um dos maiores e-commerce de material esportivo
  • No dia a dia, as tarefas mais frequentes são:
    • o desenvolvimento de novos requisitos
    • deploy em diversos ambientes
    • monitoramento dos micro servicos em produção

Sumário

  • Evolução do Modelo de Computação
  • Docker
  • Como rodar uma aplicação Node.js em Docker
    • Parte 1: Criando um aplicação Node.js
    • Parte 2: Como dockerizar uma aplicação Node.js

Evolução do Modelo de Computação

  • Grandes Data Center
  • Virtual Machines
  • VMs na nuvem (EC2)
  • Containers
  • Serveless

Docker - o que é e o que o não é

Docker não é um sistema de virtualização tradicional. Enquanto em um ambiente de virtualização tradicional nós temos um S.O. completo e isolado, dentro do Docker nós temos recursos isolados que utilizando bibliotecas de kernel em comum (entre host e container)

Por que rodar uma aplicação em docker?

  • é possível executar uma aplicação em qualquer computador que suporta docker
  • não é preciso instalando ou baixar varias dependencias e bibliotecas na maquina
  • o ambiente onde a aplicação estiver rodando será consistente
    • isso significa que a aplicação vai rodar exatamente da mesma forma pro desenvolvedor, tester, cliente, ambiente de homologação e etc.

Como rodar uma aplicação Node.js em Docker

Parte 1: Criando um aplicação Node.js

  • Instalando o Node.js
  • Inicializando uma nova aplicação via NPM
  • Instalando o Framework Express
  • package.json
  • Detalhes da aplicação Hello World
  • Rodando a aplicação

Instalando o Node.js

nodejs.org/en/download/package-manager

Inicializando uma nova aplicação via NPM


$ mkdir helloworld 
$ cd helloworld
$ npm init 
        

Instalando o Framework Express


$ npm install express --save
        

Como deve ficar o package.json


{
  "name": "helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4"
  }
}
        

Detalhes da aplicação Hello World


// arquivo index.js
// Load express module with `require` directive
var express = require('express')
var app = express()

//Define request response in root URL (/)
app.get('/', function (req, res) {
  res.send('Hello World!')
})

// Launch listening server on port 8081
app.listen(8081, function () {
  console.log('app listening on port 8081!')
})
        

Rodando a aplicação


$ node index.js
        

Parte 2: Como dockerizar uma aplicação Node.js

  • Instalando o Docker
  • Escrevendo o Dockerfile
  • Construindo a imagem Docker da aplicação
  • Rodando o container Docker

Instalando o Docker

https://docs.docker.com/install/

Escrevendo o Dockerfile

  • definir uma imagem de template
  • definir o diretorio padrao para a aplicação dentro do container
  • copiar a aplicação para o container
  • definir o comando de como rodar a aplicação
  • expor a porta da aplicação

Dockerfile


FROM node:10
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD node index.js
EXPOSE 8081
        

Construindo a imagem Docker da aplicação


docker build -t hello-world .
        

Dicas 1

  • comando para listar as imagens:

    docker image ls
  • comando para ir limpando as imagens:

    docker rmi image_id

Dicas 2

  • comando para listar todos os containers:

    docker ps --all
  • comando para um container:

    docker stop container_id
  • comando para remover um container:

    docker rm container_id

Rodando o container Docker


$ docker run -p 8081:8081 hello-world
        
Como fazer o deploy do docker da aplicação?
Obrigado!