Docker: Criando containers sem dor de cabeça.

Overview

Docker: Criando containers sem dor de cabeça.

A evolução do host de aplicações
Antigamente... Várias aplicações, vários servidores.
Capacidade pouco aproveitada.
Muito tempo ocioso!
Muitos recursos desperdiçados!

Melhorando a situação: Virtualização
APP - VM -> Hypervisor -> S.O. (Um Sistema Operacional para cada VM) -> Hardware

Nem tudo são flores... o problema das VMs.
Quanto mais VMs, mais custos de hardware - processamento, configuração, atualização, segurança e tempo.

Então como melhorar agora? A era dos containers!
APP - Container - SO (Um Sistema Operacional para todos os containers) - Hardware
Mais leve
Não tem os custos de manter múltiplos S.O.
Mais rápido de subir

Ganhamos:
Melhor controle sobre o uso de cada recurso (CPU, Disco, Rede... etc)
Agilidade na hora de criar ou remover um container
Maior facilidade na hora de trabalhar com diferentes versões de linguagens e bibliotecas
Mais leves que as VM

Docker
Docker Inc. - A empresa
Docker - A tecnologia de containers

Tecnologias de containers para prover ferramentas modernas para deployar e rodar aplicações.

Docker Engine: Tecnologia mais famosa e responsável por fazer o meio de campo entre os containers e o SO.
Docker Compose: Um jeito fácil de definir e orquestrar múltiplos containers.
Docker Swarm: Uma ferramenta para colocar múltiplos Dockers Host's para trabalharem juntos em cluster.
Docker Hub: Um repositório com mais de 250 mil imagens diferentes para os seus containers.
Docker Machine: Uma ferramenta que nos permite instalar e configurar em host virtuais.

Exibe a versão do docker.

docker version

Cria um container com a respectiva imagem passada como parâmetro.

docker run hello-world

Play With Docker
Basta clicar em +Add New Instance e começar a utilizá-lo como estivesse usando sua máquina normalmente.

docker run ubuntu

Lista todos os containers.

docker ps -a
docker run ubuntu echo "Olá Mundo"

Dentro do Container, consegue rodar comandos nativos da Imagem do Container.

docker run -it ubuntu

Lista só os containers ativos.

docker ps

exit ou Ctrl + d -> Sai do container.

Iniciar o container

docker start container_id

Parar o container

docker stop container_id

Acessar o container no modo interativo

docker start -a -i container_id

Remover um container

docker rm container_id

Remover containers inativos

docker container prune

Listar imagens

docker images

Remover imagem

docker rmi nome_imagem

Baixar uma imagem com a versão informada

docker run ubuntu:14.04

Layered File System
Toda imagem que baixamos é composta de uma ou mais camadas.
Essas camadas podem ser reaproveitadas em outras imagens, acelerando assim o tempo de download.

Layer de Scrita

Imagem não oficiais, criado por pessoas, informar o username/imagem

docker run dockersamples/static-site

-d -> detached, roda em background, liberando o terminal

docker run -d dockersamples/static-site

-t -> tempo, padrão é 10 segundos

docker stop -t 0 container_id

-P -> container atribui a porta aleatória

docker run -d -P dockersamples/static-site

Verificar a porta

docker port container_id

Definir um nome para o container

docker run -d -P --name meu-site dockersamples/static-site

Parar o container pelo o nome

docker stop -t 0 meu-site

Definir a porta que o container vai rodar - localhost:12345

docker run -d -p 12345:80 dockersamples/static-site
  • e -> Variável de Ambiente
docker run -d -P -e AUTHOR="Lucas Magalhães" dockersamples/static-site

-q -> Retorna os IDs

docker ps -q

Para os containers com um comando só, útil para parar vários containers

docker stop -t 0 $(docker ps -q)

Containers são voláteis: Aonde salvar o código? Logs? Dados? Nos volumes!
/var/www -> Docker Host

-v -> Especifica o caminho

docker run -v "/var/www" ubuntu

Informações do container

docker inspect container_id

Mounts -> Source -> Informa onde está salvando os dados localmente.

docker run -it -v "C:\Users\Lucas\Desktop:/var/www" ubuntu
cd var/www/
touch novo-arquivo.txt
echo "Este arquivo foi criado dentro de um volume" > novo-arquivo.txt

Por que usamos volumes?
Muitas vezes removemos os containers após o uso. Volumes são usados para os dados que não devem ser removidos.
É muito comum usar o container e apagá-lo após seu uso. Dessa forma também são removidos os dados desse container e aí entram os volumes que permitem salvar dados fora do container.

Um volume fica salvo: No Docker Host
Fica salvo no computador onde a Docker Engine está rodando.

Informando o caminho e rodando o projeto - CAMINHO_HOST:CAMINHO_CONTAINER

docker run -d -p 8080:3000 -v "C:\Users\Lucas\Desktop\volume-exemplo:/var/www" -w "/var/www" node npm start

Dentro da pasta e rodando o projeto

docker run -d -p 8080:3000 -v "$(pwd):/var/www" -w "/var/www" node npm start

Build

docker build -f node.dockerfile -t lucasrmagalhaes/node .

Listando imagens

docker images

Remove e força o stop

docker rm -f container_id

Rodando a imagem criada

docker run -d -p 8080:3000 lucasrmagalhaes/node

Login do Docker HUB

docker login

Subindo a imagem

docker push lucasrmagalhaes/node

Baixando a imagem

docker pull lucasrmagalhaes/node

Mostra o ip atribuído ao container pelo docker (funciona apenas dentro do container)

hostname -i

Ativando o comando ping no Ubuntu

apt-get update && apt-get install -y iputils-ping

Cria uma rede especificando o driver desejado

docker network create --driver bridge minha-rede

Listando as redes

docker network ls

Cria um container especificando seu nome e qual rede deverá ser usada

docker run -it --name meu-container-de-ubuntu --network minha-rede ubuntu
docker run -it --name meu-segundo-container-de-ubuntu --network minha-rede ubuntu
ping meu-container-de-ubuntu
docker pull douglasq/alura-books:cap05
docker pull mongo

Startando o mongo

docker run -d --name meu-mongo --network minha-rede mongo

Startando o projeto

docker run --network minha-rede --name alura-books -d -p 8080:3000 douglasq/alura-books:cap05

Salva os livros no banco

http://localhost:8080/seed

Subir 5 containers na mão? Não!
Docker Compose salva nossa vida!
docker-compose.yml

Buildar

docker-compose build

Rodar os containers

docker-compose up

Rodar em background

docker-compose up -d

Listar os serviços

docker-compose ps

Para e remove

docker-compose down
docker exec -it alura-books-1 ping alura-books-2
docker-compose restart
You might also like...

This provides an extension integration with Docker Desktop to run k9s quickly and easily through the Docker Desktop interface.

This provides an extension integration with Docker Desktop to run k9s quickly and easily through the Docker Desktop interface.

k9s extension for Docker Desktop This provides an extension integration with Docker Desktop to allow k9s quickly and easily through the Docker Desktop

Dec 16, 2022

Atlan is a CLI that helps you to manage local dockerized infrastructure without any needed knowledge on Docker and Docker Compose.

Atlan is a CLI that helps you to manage local dockerized infrastructure without any needed knowledge on Docker and Docker Compose.

Atlan CLI Atlan is a CLI that helps you to manage local dockerized infrastructure without any needed knowledge on Docker and Docker Compose. What is A

Aug 17, 2022

An example T3 app containerized with Docker, Docker Compose, and deployed on Railway

Create T3 App This is an app bootstrapped according to the init.tips stack, also known as the T3-Stack. What's next? How do I make an app with this? W

Dec 19, 2022

🧰 Javascript array-like containers for multithreading

بسم الله الرحمن الرحيم Struct Vec 🧰 Javascript array-like containers for multithreading Efficiently communicating between js workers is a pain becaus

Jun 23, 2022

Simple auto-scaling for Amazon Lightsail Containers written in Javascript

About Amazon Lightsail Containers is one of the easiest way to run container based app on AWS. It automatically sets up a load balanced TLS endpoint,

Oct 22, 2022

distributed-nginx nginx k8s docker micro front-end

distributed-nginx (分布式 nginx) 🍙 适用于微前端的去中心化分布式部署 nginx 服务器. 特性 支持 前端服务上线下线 自动更新微前端模块配置 完全实现了分布式去中心化 支持【微前端组】 支持 redis 协议和 multicast-dns 协议 支持 命名空间 Ge

Feb 25, 2022

Hundreds of Offensive and Useful Docker Images for Network Intrusion. The name says it all.

🐳 HOUDINI: Hundreds of Offensive and Useful Docker Images for Network Intrusion HOUDINI is a curated list of Network Security related Docker Images f

Dec 31, 2022

Sample AWS microservices app with service discovery defined using the CDK. Uses Docker + Fargate & ELB.

Sample AWS microservices app with service discovery defined using the CDK. Uses Docker + Fargate & ELB.

AWS Microservices Demo with CDK and Fargate About Simple AWS microservice-based app. Consists of two Spring Boot based services: Name Service GET /nam

Nov 23, 2022

⛵Generate a ready-to-use local docker environment for your Adonis application

⛵Generate a ready-to-use local docker environment for your Adonis application

Adonis Sail ⛵ Generate a ready-to-use local docker environment for your Adonis application Installation npm i --save-dev adonis-sail node ace configur

Nov 27, 2022
Owner
Lucas Magalhães
Mid-Level Developer at OAB/RS
Lucas Magalhães
A Restaurant (Table) Reservation API built with Node, TypeScript, Express, TypeORM, a MySQL DB, all running on Docker containers

Restaurant (Table) Reservation API A simple API for reserving tables at a restaurant. The API is based on the REST architectural style and uses Node.j

null 14 Oct 5, 2022
A Restaurant (Table) Reservation API built with Node, TypeScript, Express, TypeORM, a MySQL DB, all running on Docker containers

Restaurant (Table) Reservation API A simple API for reserving tables at a restaurant. The API is based on the REST architectural style and uses Node.j

null 14 Oct 5, 2022
Customizable browser's home page to interact with your homeserver's Docker containers (e.g. Sonarr/Radarr)

Homarr A homepage for your server. Demo ↗️ • Install ➡️ Join the discord! ?? Table of Contents ?? Table of Contents ?? Getting Started ℹ️ About ?? Kno

Thomas Camlong 1.6k Jan 7, 2023
Govinor is a platform to deploy and preview docker containers.

Govinor A platform for creating and managing Docker containers that integrates with Github to offer branch preview links. Note: This is a work in prog

iFixit 2 Jan 10, 2022
Running webdriverio in docker containers so you can easily add tests to your CI.

WebDriverIO tests in Docker Running WebdriverIO tests in a docker container allows you to easily add tests to your CI. About This project uses the aut

Promenade 6 Dec 3, 2022
⛴ Manage Docker containers from the menu bar.

Captain INTRODUCTION Manage Docker containers. Instantly from the menu bar. See which containers are running and which have stopped. Conveniently star

Rick Wong 19 Dec 8, 2022
O objetivo dessa aplicação era criar um frontend feito totalmente em Javascript, sem nenhum arquivo HTML ou CSS pré-criado. Além disso, esse projeto também é o frontend da minha API 100% NodeJS.

Projeto HTML 100% Javascript Front-end feito "sem HTML" Conteúdos ➜ Sobre o projeto ➜ O que aprendi ➜ Como usar ?? Sobre o projeto Voltar ao topo O ob

João Victor Negreiros 19 Aug 3, 2021
API desenvolvida em NodeJs sem o uso de framewors e, utilizando o google planilhas para armazenamento de dados

NodeJS + Google SpreadSheet Catálogo online de produtos ??️ O Projeto Desenvolver uma API de busca de informações como preço médio, marca e categoria,

Arthur Couto 10 Jul 14, 2022
A Turborepo with Strapi v4 (w/ postgres database) + Next.js powered by docker and docker-compose

Turborepo + Strapi + Next.js + Docker A Turborepo with Strapi v4 (w/ postgres database) + Next.js powered by docker and docker-compose. ⚠️ Prerequisit

Elvin Chu 60 Dec 29, 2022
Docker Extension to backup and restore docker volumes.

vackup-docker-extension This repository contains a Docker Extension that backups Docker volumes. This extension is purely a demonstration of how it'd

Felipe Cruz Martinez 34 Dec 28, 2022