Docker para Iniciantes
Docker para Iniciantes
INICIANTES
EXPLORANDO CONTAINERS
FELIPE AZAMBUJA
DOCKER PARA
INICIANTES
EXPLORANDO CONTAINERS
FELIPE AZAMBUJA
ÍNDICE
Bem-vindo ao Mundo do Docker 04
Entendendo os Containers 05
Comandos Docker 21
Criando Imagens 23
Conclusão 33
Introdução: Bem-vindo ao Mundo do Docker
Docker é uma ferramenta poderosa que
revolucionou a forma como desenvolvemos e
implementamos aplicações. Antes de nos
aprofundarmos em detalhes técnicos, imagine o
seguinte cenário: você está cozinhando um prato
sofisticado em sua cozinha. Você tem todos os
ingredientes frescos, as ferramentas certas e um
livro de receitas detalhado. Tudo parece perfeito,
mas então você descobre que seu forno não
funciona, sua faca está cega e, para piorar, seus
ingredientes foram deixados ao ar livre e não
estão mais frescos.
4
Capítulo 1: Entendendo os Containers
5
Essas tecnologias resolveram muitos problemas
de isolamento e segurança, mas ainda eram
complexas de configurar e gerenciar. A evolução
contínua dessas ideias levou a uma abordagem
mais padronizada e simplificada: os containers
como conhecemos hoje.
6
Como resultado, temos uma estrutura de
diretórios do sistema parecida com a da imagem
abaixo:
7
A Necessidade dos Containers
8
Imagine um time de desenvolvedores
trabalhando em uma aplicação complexa. Cada
um tem seu próprio ambiente de
desenvolvimento configurado de forma
ligeiramente diferente. As versões das bibliotecas
não coincidem, as variáveis de ambiente estão
desorganizadas e, frequentemente, um bug surge
em um ambiente mas não no outro. A
coordenação se torna um desafio, e a
produtividade é prejudicada. Com os containers,
cada desenvolvedor pode trabalhar no mesmo
ambiente padronizado, encapsulado dentro de
um container. Isso elimina as discrepâncias e
garante que o código funcione de maneira
consistente para todos.
9
E não se trata apenas de consistência. A
segurança também é aprimorada. Quando
múltiplas aplicações são executadas no mesmo
servidor sem containers, há sempre o risco de
uma aplicação interferir na outra, seja por
conflitos de dependências ou por questões de
segurança. Os containers fornecem isolamento.
Cada aplicação roda em seu próprio container,
isolada das outras, evitando conflitos e
aumentando a segurança.
10
A Evolução das Ferramentas e Técnicas
11
O Nascimento do Docker
12
Capítulo 1I: Primeiros Passos com Docker
Instalando o Docker
O primeiro passo para começar a usar Docker é
instalá-lo em seu sistema. O Docker é compatível
com várias plataformas, incluindo Windows,
macOS e Linux. Abaixo, você encontrará
instruções para instalar Docker em cada uma
dessas plataformas.
Windows
1 - Instale o WSL no seu sistema. Para isso, abra o
PowerShell e execute o comando:
wsl --install
13
2 - Reinicie e depois abra a nova aplicação
disponível “Ubuntu”. (Ubuntu é padrão)
14
Linux (Ubuntu based)
1 - Atualize o sistema
3 - Instale o Docker
sudo apt-get install docker-ce
15
MacOS
16
Conceitos Básicos do Docker
Imagem Docker
Container Docker
17
Dockerfile
Dockerfile
FROM python:3.11-slim
COPY . /app/
EXPOSE 8000
18
Camadas da imagem gerada
19
Docker Hub
20
Capítulo 1II: Comandos Docker
1 - Executando um container
O comando mais simples para executar um
container é docker run. Vamos começar com uma
imagem popular chamada hello-world, que é
usada para testar se o Docker está funcionando
corretamente.
2 - Listando containers
Para ver todos os containers em execução, use o
comando docker ps. Para listar todos os
containers, incluindo os que foram finalizados,
use docker ps -a.
docker ps
docker ps -a
21
3 - Baixando Imagens
Você pode baixar imagens diretamente do Docker
Hub usando o comando docker pull. Vamos
baixar uma imagem do Ubuntu.
docker rm <container_id>
docker rmi <image_id>
22
Capítulo 1V: Criando Imagens
Agora que você já está familiarizado com alguns
comandos básicos do Docker, vamos criar sua
primeira imagem Docker. Para isso, vamos usar
um Dockerfile.
23
Crie também um arquivo chamado app.py no
mesmo diretório com o seguinte conteúdo:
print("Olá, Docker!")
Executando a Imagem
Agora, execute um container a partir da imagem
que você acabou de criar:
24
Capítulo V: Sobre Docker Compose
Conforme suas aplicações Docker se tornam mais
complexas, com múltiplos containers interagindo
entre si, gerenciá-las manualmente pode se
tornar uma tarefa desafiadora. É aí que entra o
Docker Compose. Docker Compose é uma
ferramenta poderosa que permite definir e
gerenciar ambientes multi-container de forma
declarativa usando um simples arquivo YAML.
Neste capítulo, você aprenderá a usar o Docker
Compose para facilitar o desenvolvimento, teste e
implantação de aplicações complexas.
25
Instalando o Docker Compose
sudo curl -L
"https://github.com/docker/compose/releases/download/$(curl -s
https://api.github.com/repos/docker/compose/releases/latest |
grep -oP '"tag_name": "\K(.*)(?=")')/docker-compose-$(uname -
s)-$(uname -m)" -o /usr/local/bin/docker-compose
3 - Verifique a instalação
docker-compose --version
26
Estrutura do Arquivo docker-compose.yml
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- web-data:/usr/share/nginx/html
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
web-data:
db-data:
27
Comandos Básicos do Docker Compose
28
Capítulo VI: Exemplo Prático: Aplicação Web
com Banco de Dados
Vamos criar uma aplicação web simples que se
conecta a um banco de dados PostgreSQL. A
aplicação será escrita em Python usando o
framework Flask.
Estrutura do Projeto
Crie a seguinte estrutura de diretórios:
29
Arquivos da Aplicação
app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db_conn = 'postgresql://user:password@db:5432/mydb'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = db_conn
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
with app.app_context():
db.create_all()
app/app.py
from flask import request, jsonify
from app import app, db
from app.models import Person
@app.route('/')
def hello():
return "Olá, Docker Compose!"
@app.route('/persons', methods=['POST'])
def create_person():
data = request.get_json()
new_person = Person(name=data['name'])
db.session.add(new_person)
db.session.commit()
return jsonify({'message': 'Person created successfully'}), 201
@app.route('/persons', methods=['GET'])
def get_persons():
persons = Person.query.all()
result = [{'id': person.id, 'name': person.name} for person in persons]
return jsonify(result)
30
app/models.py
from app import db
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
app/requirements.txt
Flask
Flask-SQLAlchemy
psycopg2-binary
docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- ./app:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
31
Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY app/ .
Executando a Aplicação
No terminal, navegue até o diretório do projeto e
execute:
docker-compose up
{
"name": "John Doe"
}
32
Capítulo VII: Conclusão
Ao longo deste e-book, você foi apresentado ao
Docker, uma ferramenta revolucionária que
transformou a maneira como desenvolvemos,
testamos e implantamos aplicações. Desde o
entendimento básico de containers até o uso de
Docker Compose para gerenciar ambientes
complexos, você aprendeu os fundamentos
necessários para começar a utilizar Docker em
seus projetos.
33
Ao longo dos capítulos, também conhecemos o
Docker Hub, uma plataforma essencial para
compartilhar e encontrar imagens Docker. Vimos
como ele facilita a distribuição de aplicações e a
colaboração entre desenvolvedores. Além disso,
exploramos o Docker Compose, uma ferramenta
poderosa para orquestrar múltiplos containers e
simplificar o gerenciamento de ambientes
complexos.
Próximos Passos
34
2. Praticar com Projetos Reais: A melhor maneira
de solidificar seu conhecimento é aplicá-lo em
projetos reais. Tente construir e implantar uma
aplicação completa usando Docker e Docker
Compose. Experimente diferentes configurações
e explore as melhores práticas para otimização e
segurança.
35
Recursos Adicionais
Agradecimentos
Obrigado por acompanhar este e-book até o final.
Esperamos que você tenha encontrado o
conteúdo útil e que ele tenha proporcionado uma
base sólida para sua jornada com Docker.
Continue explorando, praticando e aprendendo.
O mundo dos containers é vasto e cheio de
possibilidades. Boa sorte!
36
Contato
Siga @pycodebr nas redes sociais
@pycodebr
@pycodebr
@pycodebr
37
FELIPE AZAMBUJA