Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

1. Introdução à Computação em Nuvem 
A computação em nuvem transformou significativamente a maneira como indivíduos e organizações utilizam 
e gerenciam recursos de TI. Essa tecnologia revolucionária permite o acesso a um vasto conjunto de 
recursos computacionais sob demanda, promovendo eficiência, escalabilidade e inovação. 
Esta primeira unidade tem como objetivo fornecer uma base sólida para o entendimento da computação em 
nuvem. Começaremos com uma definição clara e concisa da computação em nuvem, detalhando suas 
principais características que a diferenciam de outros modelos de TI tradicionais. Em seguida, exploraremos 
a história e a evolução dessa tecnologia, destacando os marcos históricos e as inovações que moldaram o 
cenário atual da nuvem. 
Além disso, discutiremos os benefícios e desafios associados à adoção da computação em nuvem. 
Compreender esses aspectos é crucial para que as organizações possam tomar decisões informadas sobre 
a melhor forma de integrar a nuvem em suas operações. Finalmente, apresentaremos os diferentes modelos 
de implantação de nuvem, incluindo nuvem pública, nuvem privada, nuvem híbrida e multicloud, explicando 
suas características, vantagens e desvantagens. 
Os objetivos desta unidade são: 
• Definir a computação em nuvem e suas características fundamentais; 
• Entender a história e a evolução da computação em nuvem; 
• Explorar os benefícios e desafios; 
• Conhecer os modelos de implantação de nuvem. 
Ao final desta unidade, você terá uma compreensão abrangente dos fundamentos da computação em 
nuvem, preparado para explorar mais profundamente os tópicos avançados que serão abordados nas 
unidades subsequentes. 
 
1.1. Definição de Computação em Nuvem 
O Instituto Nacional de Padrões e Tecnologia dos Estados Unidos (National Institute of Standards and 
Technology – NIST/USA) define a computação em nuvem como um modelo para habilitar o acesso 
amplamente disponível e onipresente à rede, conveniente e sob demanda a um conjunto compartilhado de 
recursos de computação (como redes, servidores, armazenamento, aplicações e serviços) que possam ser 
rapidamente provisionados e liberados com o mínimo de esforço de gerenciamento ou interação com o 
provedor de serviços. 
Essa definição de computação em nuvem descreve um sistema que permite acessar facilmente e quando 
necessário a diversos recursos de computação pela Internet. Este modelo é amplamente adotado devido à 
sua flexibilidade, escalabilidade e economia. 
Imagine que, em vez de ter um armário cheio de ferramentas que você raramente usa, você pode ir a uma 
loja e pegar qualquer ferramenta que precisar, usá-la e devolvê-la sem precisar comprar ou manter essas 
ferramentas. Da mesma forma, a computação em nuvem oferece acesso a servidores, armazenamento e 
aplicativos sem que você precise gerenciá-los diretamente ou interagir muito com o fornecedor. Tudo isso 
está disponível via Internet, e você usa apenas o que precisa, quando precisa. 
Características Fundamentais 
De acordo com a definição do NIST, a computação em nuvem possui cinco características essenciais: 
• Serviço sob demanda: A capacidade de um consumidor de computação em nuvem de provisionar 
unilateralmente capacidades computacionais, como tempo de servidor e armazenamento em rede, 
conforme necessário, automaticamente, sem a necessidade de interação humana com cada 
provedor de serviços. 
• Acesso amplo à rede: Os serviços de computação em nuvem estão disponíveis pela internet e 
podem ser acessados de qualquer lugar, usando diversos dispositivos como smartphones, laptops 
ou tablets. Isso significa que é possível trabalhar em projetos ou acessar dados de qualquer lugar do 
mundo, desde que tenha uma conexão com a internet. 
• Agrupamento de recursos: Os recursos computacionais do provedor são agrupados para atender 
múltiplos consumidores usando um modelo de multi-tenant, com diferentes recursos físicos e virtuais 
dinamicamente atribuídos e reatribuídos conforme a demanda do consumidor. Existe um senso de 
independência de localização em que o consumidor geralmente não tem controle ou conhecimento 
sobre a localização exata dos recursos fornecidos, mas pode ser capaz de especificar a localização 
em um nível mais alto de abstração (por exemplo, país, estado ou datacenter). 
• Elasticidade rápida: Capacidades podem ser elástica e rapidamente provisionadas, em alguns 
casos automaticamente, para escalar rapidamente para mais ou para menos de acordo com a 
demanda. Para o consumidor, as capacidades disponíveis para provisionamento frequentemente 
parecem ilimitadas e podem ser apropriadas em qualquer quantidade a qualquer momento. 
• Serviço medido: Sistemas de computação em nuvem controlam e otimizam automaticamente o uso 
de recursos por meio de uma capacidade de medição em algum nível de abstração apropriado ao 
tipo de serviço (por exemplo, armazenamento, processamento, largura de banda e contas de usuário 
ativas). O uso de recursos pode ser monitorado, controlado e relatado, proporcionando transparência 
tanto para o provedor quanto para o consumidor do serviço utilizado. O consumidor paga apenas 
pelo que realmente usou. 
Essas características formam a base para a computação em nuvem e são cruciais para entender como ela 
transforma a maneira como as organizações lidam com a tecnologia da informação (TI). Ao permitir a entrega 
de serviços de TI sob demanda, a computação em nuvem facilita uma abordagem mais ágil e econômica 
para gerenciar e utilizar recursos computacionais. 
 
1.2. História e Evolução da Computação em Nuvem 
A computação em nuvem, como a conhecemos hoje, é o resultado de várias décadas de evolução 
tecnológica e inovações significativas. A trajetória dessa transformação começa na década de 1960, quando 
J.C.R. Licklider introduziu a ideia de uma "rede intergaláctica de computadores". Ele vislumbrava um futuro 
onde todos poderiam ser interconectados e compartilhar dados e programas de qualquer lugar, um conceito 
que formou a base para a criação da Internet. 
Em 1967, a empresa IBM deu um passo crucial ao virtualizar os sistemas operacionais, permitindo que 
vários usuários compartilhassem o mesmo recurso computacional de maneira eficiente. Esse avanço foi 
fundamental para o desenvolvimento de tecnologias que possibilitam o compartilhamento e a otimização de 
recursos de computação. Dois anos depois, em 1969, o Departamento de Defesa dos Estados Unidos lançou 
a ARPANET, uma rede baseada no protocolo TCP/IP que se tornaria a precursora da Internet moderna. A 
ARPANET revolucionou a comunicação de dados, permitindo a interconexão de múltiplos sistemas e a troca 
de informações em tempo real. 
Durante as décadas de 1970 e 1980, houve avanços significativos em sistemas operacionais, 
armazenamento e redes, que permitiram o desenvolvimento de novas aplicações tecnológicas. A introdução 
de sistemas de pagamento eletrônico transformou a indústria financeira, permitindo transações rápidas e 
seguras entre instituições. O uso inovador de sinais de TV para transmissão de dados abriu novas 
possibilidades para a comunicação e o entretenimento. No final dos anos 1980 e início dos anos 1990, o 
surgimento da World Wide Web (WWW), facilitada por Tim Berners-Lee, transformou a maneira como as 
pessoas acessam e compartilham informações, pavimentando o caminho para a era digital. 
Em 1996, a primeira menção à computação em nuvem apareceu na literatura em um documento interno da 
Compaq, sinalizando o início de um novo paradigma na utilização de recursos de TI. Essa menção foi um 
precursor do que estava por vir nos anos seguintes, com a popularização da Internet e o surgimento de 
serviços de nuvem. 
A transformação acelerou na década de 2000. Em 2002, a Amazon fundou a Amazon Web Services (AWS), 
oferecendo serviços de nuvem pública sem competidores à vista. Em 2006, a Amazon expandiu seus 
serviços com o lançamento do Elastic ComputeCloud (EC2), que permitiu a oferta de serviços de 
computação em escala. Outro marco importante inclue o lançamento do Google App Engine em 2008, focado 
no modelo de Plataforma como Serviço (PaaS). 
A evolução continuou com a introdução de serviços de contêiner na nuvem em 2014, como o Docker, que 
impulsionou o uso de microserviços e facilitou o desenvolvimento, a implantação e a escalabilidade de 
aplicativos. A computação sem servidor (serverless computing) também ganhou destaque, permitindo que 
os desenvolvedores escrevam e implantem código sem se preocupar com a infraestrutura subjacente, 
gerenciada automaticamente pelos provedores de nuvem. 
Atualmente, a computação em nuvem continua a evoluir rapidamente, impulsionada por novas tecnologias 
e necessidades de mercado. A integração com inteligência artificial (IA) e a Internet das Coisas (IoT) está se 
tornando cada vez mais comum, fornecendo a infraestrutura necessária para processar grandes volumes 
de dados e executar algoritmos complexos. Além disso, o edge computing está ganhando importância, 
levando o poder computacional para mais perto das fontes de dados, melhorando a velocidade e a eficiência 
do processamento. 
A computação em nuvem transformou a forma como as empresas e indivíduos consomem e interagem com 
a tecnologia, oferecendo uma flexibilidade e escalabilidade sem precedentes. Como continua a evoluir, 
espera-se que a nuvem continue a ser uma força motriz por trás da inovação tecnológica e da transformação 
digital. 
 
1.3. Benefícios e Desafios da Computação em Nuvem 
A computação em nuvem tem se tornado uma escolha estratégica para empresas de todos os tamanhos 
devido aos seus inúmeros benefícios. No entanto, junto com essas vantagens, surgem desafios que 
precisam ser gerenciados adequadamente. Nesta seção, exploraremos os principais benefícios e desafios 
da computação em nuvem. 
Benefícios da Computação em Nuvem 
Vamos explorar os principais benefícios da computação em nuvem, destacando como ela pode transformar 
a maneira como as empresas operam e competem no mercado. 
• Escalabilidade: Um dos maiores benefícios da computação em nuvem é a escalabilidade. Isso 
significa que os recursos computacionais podem ser aumentados ou diminuídos rapidamente 
conforme a demanda. Por exemplo, durante um evento sazonal de vendas, uma empresa pode 
precisar de recursos adicionais para lidar com o aumento do tráfego. Com a nuvem, é possível 
escalar a infraestrutura de forma dinâmica e automática, garantindo que os serviços permaneçam 
disponíveis e eficientes. 
• Flexibilidade: A computação em nuvem oferece uma flexibilidade incomparável. Empresas podem 
escolher entre diferentes tipos de serviços (IaaS, PaaS, SaaS) e adaptar a infraestrutura às suas 
necessidades específicas. A nuvem permite a criação de ambientes de teste e desenvolvimento de 
forma rápida e econômica, facilitando a inovação e a experimentação sem grandes investimentos 
iniciais. 
• Custo-Efetividade: Com a nuvem, as empresas podem evitar altos investimentos iniciais em 
hardware e software. Em vez disso, pagam apenas pelos recursos que utilizam, o que pode resultar 
em economias significativas. Este modelo de pagamento conforme o uso (pay-as-you-go) permite 
uma gestão mais eficiente do orçamento e evita gastos excessivos com infraestrutura não utilizada. 
• Inovação: A computação em nuvem permite acesso a tecnologias avançadas e novas soluções que 
seriam difíceis de implementar em um ambiente tradicional. Provedores de nuvem frequentemente 
atualizam seus serviços e oferecem novas funcionalidades, como inteligência artificial, análise de big 
data e serviços de machine learning, que podem ser facilmente integrados aos negócios, 
promovendo a inovação contínua. 
 
Desafios da Computação em Nuvem 
Agora, discutiremos os desafios associados à adoção da nuvem que as organizações devem atentar-se para 
tomar melhores decisões sobre a implementação dessa tecnologia. 
• Segurança e Privacidade: A segurança é uma das principais preocupações quando se trata de 
computação em nuvem. Armazenar dados críticos e confidenciais fora da infraestrutura da empresa 
pode ser arriscado se não forem implementadas medidas de segurança adequadas. Provedores de 
nuvem oferecem uma série de recursos de segurança, como criptografia e controle de acesso, mas 
é fundamental que as empresas compreendam e implementem essas ferramentas corretamente. 
Além disso, conformidade com regulamentos de proteção de dados, como a Lei Geral de Proteção 
de Dados (LGPD), deve ser garantida. 
• Confiabilidade e Disponibilidade: Embora os provedores de nuvem geralmente ofereçam altos 
níveis de disponibilidade e redundância, interrupções de serviço podem ocorrer. Falhas de rede, 
desastres naturais ou ataques cibernéticos podem afetar a disponibilidade dos serviços na nuvem. 
As empresas precisam planejar e implementar estratégias de recuperação de desastres e 
continuidade de negócios para minimizar o impacto dessas interrupções. 
• Gerenciamento de Recursos: Gerenciar recursos na nuvem pode ser desafiador, especialmente 
para organizações que migram de uma infraestrutura tradicional. É essencial ter uma compreensão 
clara de como os recursos são utilizados e monitorar continuamente o uso para evitar desperdícios 
e custos inesperados. Ferramentas de gerenciamento de nuvem podem ajudar a otimizar o uso de 
recursos e a controlar os gastos. 
• Integração e Compatibilidade: Integrar a computação em nuvem com sistemas e aplicativos 
existentes pode ser complicado. Diferenças de arquitetura, padrões de dados e protocolos de 
comunicação podem causar problemas de compatibilidade. As empresas precisam planejar 
cuidadosamente a integração e, possivelmente, reestruturar alguns de seus processos e sistemas 
para aproveitar ao máximo a nuvem. A interoperabilidade entre diferentes provedores de nuvem 
também pode ser um desafio em ambientes multicloud. 
A computação em nuvem oferece inúmeros benefícios que podem transformar a maneira como as empresas 
operam, proporcionando escalabilidade, flexibilidade, custo-efetividade e acesso a tecnologias inovadoras. 
No entanto, é crucial que as empresas estejam cientes dos desafios associados e implementem estratégias 
eficazes para mitigá-los. Com a abordagem certa, a computação em nuvem pode ser uma poderosa 
ferramenta para alcançar eficiência operacional e inovação contínua. 
1.4. Modelos de Implantação de Nuvem 
A computação em nuvem pode ser implementada de várias maneiras, dependendo das necessidades 
específicas de cada organização. Ao considerarmos a implementação da computação em nuvem, é crucial 
entender os diferentes modelos de implantação disponíveis. Cada modelo oferece características únicas 
que podem ser mais ou menos adequadas dependendo das necessidades específicas de segurança, 
controle, custo e escalabilidade de uma organização. 
Exploraremos os quatro principais modelos de implantação de nuvem - pública, privada, híbrida 
e multicloud - para ajudá-lo a identificar qual modelo melhor se alinha aos objetivos e estratégias de um 
negócio. 
Nuvem Pública 
A nuvem pública é um modelo em que os serviços de computação são fornecidos por provedores de nuvem 
através da internet. Esses provedores gerenciam e mantêm a infraestrutura necessária, permitindo que os 
usuários acessem os recursos de forma remota. Entre os principais deles podemos destacar: 
• Amazon Web Services (AWS): Embora tenha sido fundada em 2002 pela Amazon, foi em 2006 que 
ela de fato começa a ser reconhecida como a pioneira em serviços de nuvem pública. AWS oferece 
uma vasta gama de serviços, incluindo computação, armazenamento, banco de dados, redes, 
aprendizado de máquina, análise de dados e muito mais. Uma das características principais da AWS 
é a sua ampla cobertura global, com dezenas de regiões e zonas de disponibilidade em todo o 
mundo, permitindo uma baixa latência e altadisponibilidade dos serviços. AWS é conhecida por sua 
capacidade de escalabilidade, flexibilidade e inovação contínua, atendendo a uma ampla gama de 
indústrias e necessidades empresariais. O foco de atuação da AWS é proporcionar uma 
infraestrutura robusta e serviços avançados para empresas de todos os tamanhos, desde startups 
até grandes corporações. 
• Microsoft Azure: Foi lançado em 2010 e rapidamente se estabeleceu como um dos principais 
provedores de serviços de nuvem pública. Azure oferece uma integração profunda com outros 
produtos e serviços da Microsoft, como Windows Server, SQL Server, Office 365 e Dynamics 365, 
tornando-o uma escolha atraente para empresas que já utilizam o ecossistema Microsoft. Uma das 
características distintivas do Azure é a sua forte capacidade híbrida, permitindo que empresas 
integrem suas soluções on-premises com a nuvem, facilitando a migração e a gestão de ambientes 
híbridos. O foco de atuação do Azure é fornecer uma plataforma confiável e segura, com uma ampla 
variedade de serviços que suportam desde desenvolvedores até grandes corporações, com especial 
atenção para soluções empresariais e governamentais. 
• Google Cloud Platform (GCP): Foi lançado em 2008 e é conhecido por seu foco em inovação e 
tecnologia avançada. GCP oferece uma gama abrangente de serviços que incluem computação, 
armazenamento, bancos de dados, big data, aprendizado de máquina e análise de dados. Uma das 
principais características do GCP é sua forte ênfase em inteligência artificial e aprendizado de 
máquina, aproveitando a experiência do Google em pesquisa e dados. GCP também é elogiado por 
sua infraestrutura de rede global, que oferece uma baixa latência e alta performance. O foco de 
atuação do Google Cloud é fornecer ferramentas poderosas e inovadoras para empresas que 
buscam alavancar tecnologias avançadas de análise de dados e inteligência artificial, atendendo 
desde startups inovadoras até grandes empresas tecnológicas. 
A nuvem pública oferece uma série de benefícios, sendo a economia de escala um dos principais. 
Provedores de nuvem pública podem oferecer serviços a preços competitivos devido ao compartilhamento 
de infraestrutura entre múltiplos usuários. Isso reduz os custos unitários e permite que até pequenas 
empresas tenham acesso a recursos robustos. Além disso, a nuvem pública proporciona flexibilidade e 
elasticidade, permitindo que recursos sejam escalados rapidamente para atender a flutuações na demanda. 
Isso é particularmente útil durante picos sazonais ou campanhas de marketing intensas. 
Apesar disso, a nuvem pública apresenta desafios, principalmente em termos de segurança e privacidade. 
Compartilhar infraestrutura com outros usuários pode aumentar os riscos de vulnerabilidades e violações de 
dados. As organizações podem ter menos controle sobre a infraestrutura subjacente, o que pode ser uma 
preocupação para aplicações que requerem configurações específicas ou um alto nível de personalização. 
Além disso, a migração entre diferentes provedores pode ser complexa e custosa, criando uma dependência 
a longo prazo de um único fornecedor. 
Nuvem Privada 
A nuvem privada é um modelo onde a infraestrutura de computação é dedicada exclusivamente a uma única 
organização. As seguintes soluções de implementação podem ser utilizadas: 
• VMware: é um dos líderes de mercado em soluções de virtualização e computação em nuvem 
privada. As soluções de nuvem privada da VMware, como o VMware vSphere e VMware vCloud 
Suite, são conhecidas por sua robustez e maturidade no mercado. A principal característica do 
VMware é a sua capacidade de fornecer virtualização de servidores, redes e armazenamento, 
permitindo que empresas criem e gerenciem data centers definidos por software. VMware se destaca 
pela facilidade de gerenciamento e pela capacidade de integração com infraestruturas de TI 
existentes, oferecendo alta disponibilidade, recuperação de desastres e balanceamento de carga 
automatizado. O foco de atuação da VMware é fornecer uma plataforma confiável e escalável para 
grandes corporações e instituições que necessitam de um controle rigoroso sobre seus ambientes 
de TI. 
• Microsoft Azure Stack: é uma extensão da plataforma de nuvem pública Azure, que permite às 
empresas rodar serviços de Azure em seus próprios data centers. A principal característica do Azure 
Stack é a sua integração perfeita com a nuvem pública Azure, proporcionando uma experiência 
híbrida consistente. As empresas podem usar Azure Stack para desenvolver, implantar e gerenciar 
aplicativos de maneira uniforme, seja em um ambiente local ou na nuvem pública, facilitando a 
movimentação de cargas de trabalho entre os dois ambientes. O foco de atuação do Azure Stack é 
atender empresas que precisam manter dados e aplicativos sensíveis on-premises por razões de 
conformidade ou desempenho, enquanto ainda aproveitam a agilidade e inovação oferecidas pela 
nuvem pública Azure. 
• OpenStack: é uma plataforma de código aberto para construção de nuvens públicas e privadas. As 
principais características do OpenStack incluem a sua flexibilidade, extensibilidade e comunidade 
ativa de desenvolvimento, o que permite personalizações e inovações rápidas. OpenStack oferece 
uma variedade de componentes que suportam computação, armazenamento e rede, permitindo que 
as organizações construam suas próprias soluções de nuvem privada altamente personalizadas. A 
plataforma é amplamente adotada por empresas que desejam evitar a dependência de fornecedores 
proprietários e preferem ter maior controle sobre suas infraestruturas de TI. O foco de atuação do 
OpenStack é fornecer uma solução flexível e econômica para empresas de diferentes tamanhos, 
especialmente aquelas com requisitos específicos que precisam de uma solução de nuvem privada 
altamente customizável. 
Uma das principais vantagens da nuvem privada é o controle total sobre a infraestrutura, permitindo 
configurações específicas para atender às necessidades da organização. Isso é crucial para empresas com 
requisitos rigorosos de conformidade ou que necessitam de personalizações específicas. Com recursos 
dedicados, a segurança é aprimorada, já que há menos risco de vulnerabilidades causadas por outros 
usuários. Além disso, a nuvem privada garante um desempenho previsível e estável para aplicações críticas. 
No entanto, manter uma nuvem privada pode ser caro devido ao investimento inicial em hardware e software, 
além dos custos contínuos de manutenção e operação. Esse modelo também pode ter limitações de 
escalabilidade, já que a capacidade de aumentar rapidamente os recursos pode ser restrita pela 
infraestrutura física disponível. Gerenciar uma nuvem privada requer habilidades especializadas e recursos 
humanos dedicados, o que pode ser um desafio para algumas organizações. 
Nuvem Híbrida 
A nuvem híbrida combina elementos da nuvem pública e privada, permitindo que dados e aplicações sejam 
compartilhados entre os dois ambientes. A Figura 1 exemplifica uma topologia de nuvem híbrida, onde uma 
organização utiliza uma nuvem privada baseada em OpenStack e uma nuvem pública da Amazon Web 
Services (AWS), interconectadas para compartilhar dados e aplicações. 
Figura 1 - Topologia de Nuvem Híbrida. 
 
Fonte: adaptado de ;. 
A nuvem híbrida proporciona flexibilidade e otimização de custos, permitindo que as organizações utilizem 
recursos de nuvem pública para tarefas não críticas, enquanto mantêm dados sensíveis em uma nuvem 
privada. Isso resulta em uma alocação eficiente de recursos, adaptando-se às necessidades variáveis do 
negócio. A escalabilidade é outro ponto forte, pois as empresas podem escalar suas operações rapidamente 
usando a nuvem pública para atender a picos de demanda. Além disso, a nuvem híbrida oferece uma 
https://www.cloudflare.com/pt-br/learning/cloud/what-is-hybrid-cloud/%3Esolução robusta para recuperação de desastres, garantindo a continuidade das operações em caso de falhas 
na infraestrutura principal. 
Contudo, integrar e gerenciar dois ambientes distintos pode ser desafiador e exigir ferramentas e estratégias 
avançadas. Garantir a segurança e a conformidade em ambos os ambientes pode ser complexo e requer 
monitoramento contínuo. Além disso, a comunicação entre nuvem pública e privada pode introduzir latência, 
impactando o desempenho de algumas aplicações. 
Multicloud 
O modelo multicloud envolve o uso de múltiplos serviços de nuvem pública de diferentes fornecedores. Na 
Figura 2 é ilustrada uma arquitetura de multicloud, de forma que uma aplicação utiliza simultaneamente 
serviços de dois provedores de nuvem pública: Amazon Web Services (AWS) e Microsoft Azure. 
Figura 2 - Topologia Multicloud. 
 
Fonte: adaptado de ;. 
 
Utilizar múltiplos provedores reduz o risco de dependência de um único fornecedor, proporcionando maior 
flexibilidade e capacidade de adaptação a diferentes condições e requisitos de mercado. Empresas podem 
escolher os melhores serviços de cada provedor com base em desempenho, custo e requisitos específicos 
de cada aplicação. A implementação em múltiplas nuvens pode melhorar a resiliência da aplicação, 
garantindo continuidade de serviço mesmo se um dos provedores enfrentar problemas técnicos ou 
interrupções. 
No entanto, gerenciar vários provedores de nuvem pode ser complexo e exigir ferramentas e habilidades 
especializadas. Garantir a segurança e a conformidade em um ambiente multicloud pode ser desafiador e 
requer uma abordagem robusta de gerenciamento de segurança. O uso de múltiplos provedores também 
pode aumentar os custos operacionais devido à necessidade de ferramentas adicionais e habilidades 
especializadas, além da gestão de contratos e integração de serviços que podem gerar despesas adicionais. 
Cada modelo de implantação de nuvem oferece opções para atender às necessidades específicas das 
organizações. A escolha do modelo adequado depende de fatores como requisitos de segurança, controle, 
custo, escalabilidade e flexibilidade. Compreender as características, vantagens e desafios de cada modelo 
ajuda as empresas a tomar decisões informadas e estratégicas para maximizar os benefícios da computação 
em nuvem. 
 
Comparação entre os Modelos de Implantação 
O Quadro 1 apresenta as características de diferentes modelos de implantação de nuvem: pública, privada, 
híbrida e multicloud. Ele destaca diferenças em termos de acesso, controle, custo, segurança, flexibilidade 
e os contextos ideais para cada modelo. Por exemplo, a nuvem pública é acessível universalmente e custa 
menos, sendo ideal para startups e PMEs. A nuvem privada oferece segurança e controle total, adequada 
para empresas com dados sensíveis. A nuvem híbrida combina aspectos de públicas e privadas, oferecendo 
flexibilidade. O multicloud permite usar serviços de vários provedores para maximizar a eficiência e reduzir 
dependências. 
https://www.cloudflare.com/pt-br/learning/cloud/what-is-multicloud/%3E
 
Quadro 1 - Quadro Comparativo entre os Modelos de Implantação. 
 
Fonte: autoria própria. 
Cada modelo de implantação de nuvem oferece opções para atender às necessidades específicas das 
organizações. Compreender as características, vantagens e desafios de cada modelo ajuda as empresas a 
tomar decisões informadas e estratégicas para maximizar os benefícios da computação em nuvem. 
1.5. Conclusão 
A computação em nuvem revolucionou a maneira como as empresas e os indivíduos acessam e utilizam 
recursos tecnológicos. Desde sua concepção inicial até a sofisticada infraestrutura que conhecemos hoje, a 
nuvem tem proporcionado flexibilidade, escalabilidade e inovação, permitindo que organizações de todos os 
tamanhos aprimorem suas operações e desenvolvam novas capacidades. 
Nesta unidade, exploramos as bases fundamentais da computação em nuvem, começando com uma 
definição clara e destacando suas principais características, como serviço sob demanda, acesso amplo à 
rede, agrupamento de recursos, elasticidade rápida e serviço medido. Entender essas características é 
crucial para aproveitar ao máximo os benefícios da nuvem. 
A trajetória histórica da computação em nuvem mostrou-nos como avanços tecnológicos e inovações 
contínuas moldaram esta tecnologia ao longo das décadas. Desde os primeiros conceitos de 
compartilhamento de recursos e a criação da ARPANET até o surgimento dos provedores de nuvem, vimos 
como a nuvem evoluiu para se tornar uma parte indispensável do panorama tecnológico moderno. 
Os benefícios da computação em nuvem são muitos, incluindo escalabilidade, flexibilidade, custo-efetividade 
e acesso a tecnologias avançadas. No entanto, também é essencial reconhecer e gerenciar os desafios, 
como questões de segurança e privacidade, confiabilidade e gerenciamento de recursos. Cada organização 
deve avaliar cuidadosamente esses aspectos para adotar uma estratégia de nuvem que melhor atenda às 
suas necessidades. 
Finalmente, analisamos os diferentes modelos de implantação de nuvem: pública, privada, híbrida 
e multicloud. Cada modelo oferece um conjunto único de vantagens e é adequado para diferentes cenários 
e requisitos empresariais. A escolha do modelo certo depende de fatores como segurança, controle, custo, 
escalabilidade e flexibilidade. Compreender essas opções permite que as empresas tomem decisões 
informadas e estratégicas para maximizar os benefícios da computação em nuvem. 
Ao longo desta unidade, fornecemos uma base sólida para entender os conceitos e a evolução dessa 
tecnologia, preparando o terreno para uma exploração mais profunda nas unidades seguintes. 
 
2. Modelos de Negócio em Nuvem 
Como vimos no capítulo anterior, a computação em nuvem permitiu o acesso a um vasto leque de recursos 
computacionais, que são ofertados aos seus clientes. Oferta em demanda é a palavra chave no negócio. 
Mas como exatamente os provedores de serviços de computação em nuvem obtém lucro. Existe alguma 
formula para isso? Nesse capítulo iremos aprender a identificar um modelo de negócio em computação em 
nuvem e classifica-lo. 
Os objetivos dessa unidade são: 
• Descrever um modelo de negócio de computação em nuvem 
• Classificar os tipos de modelos de negócio que existem atualmente 
• Caracterizar cada um dos modelos de negócio 
 
2.1. Descrição 
Segundo Pereira (2023), um modelo de negócio é a espinha dorsal de qualquer empresa bem-sucedida. Ele 
é definido como o plano fundamental que orienta o funcionamento da organização da empresa, 
detalhando como ela cria e entrega valor aos seus clientes, como gera receita e finalmente como se 
posiciona no ambiente de negócios. 
 
Antes de conhecer os modelos de negócio de computação em nuvem. É preciso entender um pouco como 
as as empresas de tecnologia eram planejadas no passado, ou seja, como sua arquitetura era projetada. 
Veremos dois modelos de arquitetura descritos abaixo: 
Modelo clássico de arquitetura 
Em TI, o modelo clássico de arquitetura previa uma série de requisitos para que uma empresa, por exemplo, 
desenvolvesse e disponibilizasse um sistema para internet aos seus usuários finais. 
 
Seria necessário: 
• Uma equipe dedicada para manter e gerenciar a infraestrutura de TI 
• Manutenção contínua de hardware e software 
• Atualização de equipamentos 
• Infraestrutura Física 
 
 
A empresa então era responsável por toda a infraestrutura de TI, do gerenciamento a governança de 
hardware e software, além da própria infraestrutura física: sala para equipamentos, refrigeração, gastos com 
eletricidade, etc. 
 
 
Modelo em nuvem de arquitetura 
Os modelos de arquitetura em nuvem oferecem uma série de vantagens significativas para empresas de 
todos os portes. Uma das principais é a capacidade da equipe acessarremotamente os recursos de 
computação, permitindo maior flexibilidade e mobilidade no ambiente de trabalho. Uma simples sala de 
escritório, conforme imagem abaixo, é suficiente para gerenciar e manipular os recursos computacionais 
contratados 
 
Não existe a obrigatoriedade de um espaço físico para hardware de servidores e equipamentos de 
infraestrutura de rede e redundância energética. Além disso, problemas físicos, manutenção e 
gerenciamento do hardware agora são responsabilidade dos provedores de serviços de computação em 
nuvem, aliviando as empresas dessas tarefas complexas e muitas vezes onerosas. Para empresas de 
pequeno e médio porte apresenta uma grande vantagem econômica. 
 
2.2. Comparativo 
Visando atender a demanda da arquitetura das empresas, em especial a arquitetura em nuvem. Os 
provedores de serviços de computação em nuvem vendem basicamente gerenciamento sob demanda. Na 
tabela abaixo, é feito um comparativo entre empresas que adotam a arquitetura clássica, também chamada 
de on-premisses, e os três modelos que veremos nos próximos subcapítulos (IaaS, PaaS e SaaS). 
 
Na primeira coluna da tabela, perceba que todo o gerenciamento e responsabilidade de funcionamento da 
arquitetura escolhido é papel da empresa de TI. Desde os ativos de rede, armazenamento de informação, 
normalidade dos servidores em operação, fisicamente instalados ou virtualizados, sistemas operacionais e 
aplicações disponibilizas, são geridos pela empresa. 
Ao avançar nas colunas, dos três modelos que serão descritos, perceba que os recursos computacionais 
são retirados do domínio da empresa e oferecidos em escala pelos provedores. De maneira que a última 
coluna evidencia um controle total do provedor de serviço em nuvem. 
No subcapítulo seguinte vamos conhecer os três modelos de negócio de nuvem de computadores e quem 
são seus potenciais clientes. 
 
2.3. Tipos de Modelo de Negócio em Nuvem 
Os modelos de negócio de computação em nuvem são classificados de forma hierárquica, de acordo como 
tipo de serviço ofertado, veja a imagem abaixo: 
 
A estrutura é de uma pirâmide, e são ofertados infraestrutura como serviço (IaaS), plataforma como serviço 
(PaaS) e o softwares ou aplicativos como serviço (SaaS). Olhando da base da representação, ao subir na 
pirâmide, perceba que o controle, assim como o gerenciamento, dos recursos computacionais oferecidos 
aos clientes, passa a ser menor, a responsabilidade é repassada ao provedor de serviço de computação em 
nuvem. 
 
SaaS (Software as a Service): 
• O cliente principal é o usuário final 
• Nesse modelo, o software é hospedado em servidores e oferecido como um serviço. 
• Os usuários pagam pelo uso do software, geralmente com base na assinatura ou no consumo. 
• Exemplos: Google Drive, Google Fotos, Instagram. 
PaaS (Platform as a Service): 
• Os clientes principais, são os desenvolvedores 
• Nesse modelo, uma plataforma completa para desenvolvimento e implantação de aplicativos é 
oferecida como serviço. 
• Os desenvolvedores podem criar, testar e implantar aplicativos sem se preocupar com a 
infraestrutura subjacente. 
IaaS (Infrastructure as a Service): 
• Os clientes principais são arquitetos de redes e infraestrutura 
• Aqui, a infraestrutura (como servidores, armazenamento e redes) é fornecida como serviço. 
• Os clientes podem alugar recursos de infraestrutura conforme necessário. 
• Exemplos: Amazon Web Services (AWS), Microsoft Azure. 
 
2.4. Recapitulando 
Houve uma evolução no modelo clássico de arquitetura, mais inflexível, para os modelos de arquitetura em 
nuvem, mais flexíveis. 
Seguindo essa linha os provedores de serviços de computação em nuvem utilizam três modelos de negócio 
em computação em nuvem para obterem seus lucros. 
São eles: SaaS, PaaS e IaaS. 
Lembre-se: o modelo que utilizarei depende do tipo de cliente que utilizara o recurso, além disso modelos 
inferiores na hierarquia, podem ser utilizados para implementar outras camadas. 
Quanto mais baixo na hierarquia em pirâmide o modelo está (Ex: IaaS) maior a complexidade de 
configuração, manutenção e gerencia, visto que o cliente tem mais controles dos recursos computacionais. 
Por outro lado, quanto mais alta o modelo menor a complexidade de configuração (PaaS) e quase não a 
necessidade na entrega final de softwares em nuvem (SaaS). 
 
3. Introdução aos Contêineres 
Bem-vindo à terceira unidade, em que abordaremos contêineres e Docker! Esta unidade serve como uma 
base essencial para sua jornada no mundo dos contêineres, uma tecnologia que tem revolucionado a 
maneira como desenvolvemos, testamos e implantamos software. Aqui, você obterá um entendimento 
profundo do que são contêineres, aprenderá sobre a arquitetura do Docker, como instalar essa poderosa 
ferramenta e, finalmente, como criar o seu primeiro contêiner. 
Os objetivos desta unidade são: 
• Entender o que são contêineres; 
• Conhecer as principais ferramentas; 
• Compreender a arquitetura do Docker. 
Esta unidade foi projetada para fornecer a base sobre contêineres e Docker. Com os conhecimentos 
adquiridos aqui, você estará preparado para avançar em sua jornada no mundo dos contêineres, explorando 
tópicos mais avançados e aplicando esses conceitos em projetos reais. Vamos começar! 
 
3.1. O que são Contêineres? 
Contêineres são uma tecnologia que permite empacotar um aplicativo juntamente com todas as suas 
dependências, garantindo que ele seja executado de forma consistente em qualquer ambiente. Imagine um 
contêiner como uma "caixa" que contém tudo o que seu aplicativo precisa para rodar: bibliotecas, arquivos 
de configuração, dependências e até mesmo partes do sistema operacional. Essa "caixa" pode ser movida 
entre diferentes máquinas ou ambientes sem que o aplicativo precise ser reconfigurado. 
Diferente das máquinas virtuais, que virtualizam o hardware e necessitam de um sistema operacional 
completo, os contêineres compartilham o kernel do sistema operacional do host. Isso significa que eles são 
mais leves e iniciam muito mais rápidos do que uma máquina virtual tradicional. Enquanto uma máquina 
virtual pode levar minutos para iniciar, um contêiner normalmente leva apenas alguns segundos. 
Por que isso é importante? Porque no mundo atual, onde a velocidade e a eficiência são cruciais, a 
capacidade de desenvolver, testar e implantar aplicativos rapidamente é uma vantagem competitiva. Com 
contêineres, desenvolvedores podem criar aplicativos que funcionam da mesma forma em seus laptops, nos 
servidores de teste e na infraestrutura de produção. Isso reduz drasticamente os problemas de "funciona na 
minha máquina" e acelera o ciclo de desenvolvimento. 
 
3.2. Por que Utilizar Contêineres? 
A adoção de contêineres traz diversos benefícios significativos. Entre os mais notáveis, estão: 
• Portabilidade: Como os contêineres incluem tudo o que o aplicativo precisa, eles podem ser 
executados em qualquer lugar que tenha um ambiente de contêineres compatível. Isso facilita a 
migração de aplicativos entre diferentes ambientes de desenvolvimento, teste e produção, bem como 
entre diferentes provedores de nuvem. 
• Isolamento: Contêineres isolam aplicativos uns dos outros e do sistema operacional subjacente. 
Isso aumenta a segurança e a estabilidade, pois problemas em um contêiner não afetam os outros. 
• Eficiência de Recursos: Como contêineres compartilham o kernel do sistema operacional, eles são 
mais eficientes em termos de uso de recursos do que máquinas virtuais. Isso permite uma densidade 
maior de contêineres em uma única máquina física, otimizando o uso do hardware. 
• Escalabilidade e Gerenciamento: Ferramentas modernas de orquestração de contêineres, como 
Kubernetes, facilitam o escalonamento de aplicativos. É possível adicionar ou remover instâncias de 
contêineres com base na demanda, garantindo que os recursos estejam sempre otimizados. 
Um exemplo prático do uso de contêineres podeser visto na Netflix (https://netflixtechblog.com/the-
evolution-of-container-usage-at-netflix-3abfc096781b), que utiliza essa tecnologia para melhorar a 
escalabilidade e resiliência de seus serviços de streaming. De forma semelhante, empresas de todos os 
tamanhos estão adotando contêineres para aumentar a eficiência e acelerar a entrega de software. 
Com esta compreensão inicial dos contêineres, vamos aprofundar no próximo tópico sobre a importância da 
Open Container Initiative (OCI) e seu papel na padronização e interoperabilidade dos contêineres. 
 
3.3. O que é a Open Container Initiative? 
A Open Container Initiative (OCI) é um projeto de código aberto, iniciado pela Linux Foundation, que visa 
criar padrões abertos para contêineres de software. A OCI foi fundada em junho de 2015, como uma resposta 
https://netflixtechblog.com/the-evolution-of-container-usage-at-netflix-3abfc096781b
https://netflixtechblog.com/the-evolution-of-container-usage-at-netflix-3abfc096781b
à crescente popularidade dos contêineres e à necessidade de interoperabilidade entre diferentes 
ferramentas e plataformas. A principal motivação por trás da OCI é garantir que contêineres de diferentes 
fornecedores possam trabalhar juntos de forma harmoniosa. 
O foco principal da OCI está em dois componentes essenciais: o formato de imagem de contêiner e o 
ambiente de execução de contêiner. Esses componentes definem como as imagens de contêiner são 
estruturadas e como os contêineres são executados, respectivamente. Ao padronizar esses aspectos, a OCI 
facilita a portabilidade e a compatibilidade entre diferentes tecnologias de contêineres. 
A OCI é composta por um conjunto diversificado de membros, incluindo líderes da indústria de tecnologia 
como Docker, Google, Microsoft, Red Hat, IBM e muitos outros. Esses membros colaboram para manter e 
evoluir as especificações de contêineres, garantindo que elas atendam às necessidades do mercado e 
acompanhem a evolução tecnológica. 
Importância da OCI 
A padronização promovida pela OCI traz diversos benefícios importantes para desenvolvedores, empresas 
e a comunidade de tecnologia como um todo: 
• Interoperabilidade: Com padrões abertos, diferentes ferramentas e plataformas de contêineres 
podem interagir sem problemas. Isso significa que você pode criar uma imagem de contêiner em 
uma ferramenta e executá-la em outra, sem precisar fazer ajustes complexos. 
• Portabilidade: As especificações da OCI garantem que contêineres podem ser facilmente movidos 
entre diferentes ambientes, seja no local (on-premises) ou na nuvem. Isso é especialmente 
importante para empresas que operam em ambientes híbridos ou multicloud. 
• Redução da dependência de fabricante/fornecedor: Ao adotar padrões abertos, as empresas 
evitam o aprisionamento a um único fornecedor ou tecnologia específica. Isso dá mais flexibilidade 
para escolher e mudar ferramentas conforme necessário, sem grandes custos ou complicações. 
• Segurança: Padrões bem definidos ajudam a identificar e corrigir vulnerabilidades de maneira mais 
eficiente. A comunidade pode trabalhar em conjunto para fortalecer a segurança dos contêineres, 
baseando-se em especificações comuns. 
• Eficiência no Desenvolvimento: Com especificações padronizadas, desenvolvedores podem focar 
na criação de aplicativos e soluções, ao invés de se preocupar com problemas de compatibilidade e 
integração. Isso acelera o ciclo de desenvolvimento e implantação. 
Compreender a importância da OCI é fundamental para aproveitar ao máximo os benefícios dos contêineres 
e garantir que sua implementação seja robusta e flexível. No próximo tópico, exploraremos como tecnologias 
subjacentes, como chroot, namespaces e cgroups, são usadas para isolar e gerenciar contêineres. 
 
3.4. Fundamentos Técnicos dos Contêineres 
Para entender completamente como os contêineres funcionam, é essencial conhecer as tecnologias 
subjacentes que possibilitam sua existência. Entre essas tecnologias, destacam-
se chroot, namespaces e cgroups. Cada uma delas desempenha um papel crucial na forma como os 
contêineres isolam e gerenciam aplicativos e recursos. 
chroot 
O conceito de chroot (change root) é uma tecnologia antiga do Unix que cria um ambiente de execução 
isolado. Quando um comando é executado dentro de um diretório específico usando chroot, esse diretório 
se torna a nova raiz do sistema de arquivos para o comando e seus processos filhos. Isso significa que 
esses processos não têm acesso a arquivos fora do diretório especificado, criando um ambiente isolado. 
Embora chroot ofereça um nível básico de isolamento, ele não é suficiente para garantir a segurança e a 
flexibilidade que os contêineres modernos exigem. É aqui que entram as tecnologias 
de namespaces e cgroups, que fornecem camadas adicionais de isolamento e controle. 
Namespaces 
Namespaces são uma característica fundamental do kernel Linux que permite a criação de instâncias 
isoladas de recursos do sistema. Existem vários tipos de namespaces, cada um responsável por isolar um 
aspecto específico do sistema. Os principais namespaces utilizados pelos contêineres são: 
• pid namespace: Isola o espaço de identificação de processos, permitindo que processos dentro de 
um contêiner tenham seus próprios identificadores de processos (PIDs) separados dos processos 
no host. 
• net namespace: Isola interfaces de rede, endereços IP, portas e tabelas de roteamento. Cada 
contêiner pode ter sua própria pilha de rede, permitindo que ele se comunique de forma 
independente. 
• mnt namespace: Isola pontos de montagem do sistema de arquivos, permitindo que cada contêiner 
tenha seu próprio conjunto de sistemas de arquivos montados. 
• uts namespace: Isola o nome do host e o domínio NIS, permitindo que cada contêiner pareça ter 
seu próprio nome de host. 
• ipc namespace: Isola recursos de comunicação entre processos (IPC), como filas de mensagens e 
semáforos. 
• user namespace: Isola identificadores de usuários e grupos, permitindo que um processo dentro de 
um contêiner possa ter privilégios de root sem ter privilégios reais no host. 
Esses namespaces permitem que os contêineres funcionem de forma isolada, como se fossem pequenas 
máquinas virtuais, mas com uma sobrecarga muito menor. 
cgroups 
Enquanto os namespaces cuidam do isolamento, os cgroups (control groups) gerenciam a alocação de 
recursos. Os cgroups são uma característica do kernel Linux que permite agrupar processos e limitar a 
quantidade de recursos que eles podem usar, como CPU, memória, disco e rede. Com cgroups, você pode 
garantir que um contêiner não consuma mais recursos do que o permitido, evitando que um contêiner afete 
negativamente o desempenho de outros contêineres no mesmo host. 
Os principais recursos controlados por cgroups são: 
• CPU: Limitação da quantidade de tempo de CPU que um grupo de processos pode usar. 
• Memória: Limitação da quantidade de memória física e swap que um grupo de processos pode usar. 
• Bloco de E/S: Controle da taxa de leitura/escrita de disco. 
• Rede: Limitação da largura de banda de rede que um grupo de processos pode usar. 
A combinação de chroot, namespaces e cgroups fornece o isolamento, a segurança e a eficiência de 
recursos que tornam os contêineres tão poderosos. Essas tecnologias trabalham juntas para criar ambientes 
isolados onde aplicativos podem ser executados de forma segura e eficiente, sem interferir uns nos outros 
ou no sistema host. 
No próximo tópico, exploraremos as ferramentas de contêineres disponíveis atualmente. 
 
3.5. Principais Ferramentas de Contêineres 
O uso de contêineres tem crescido exponencialmente nos últimos anos, e com isso, diversas ferramentas 
surgiram para facilitar a criação, gestão e orquestração de contêineres. Cada ferramenta possui suas 
particularidades, vantagens e desvantagens, e é importante conhecer as principais para escolher a mais 
adequada para suas necessidades. 
•Docker: sem dúvida, a ferramenta mais popular e amplamente adotada para contêineres. Ela 
simplifica a criação, distribuição e execução de contêineres, fornecendo um conjunto completo de 
funcionalidades e uma comunidade ativa. Docker introduziu o conceito de "imagem" de contêiner, 
que pode ser usada para criar contêineres reproduzíveis em qualquer lugar. A facilidade de uso e a 
integração com várias plataformas tornam o Docker uma escolha frequente. 
• Podman: uma alternativa ao Docker que se destaca por ser "daemonless" (não necessita de um 
serviço de background). Ele é compatível com os comandos Docker, o que facilita a migração. 
Podman também enfatiza a segurança, permitindo a execução de contêineres em modo rootless 
(sem privilégios de administrador). 
• CRI-O: uma implementação leve do Kubernetes Container Runtime Interface (CRI). Ele é projetado 
para executar contêineres criados por meio de runtimes compatíveis com a OCI. CRI-O se integra 
perfeitamente ao Kubernetes, oferecendo uma alternativa ao Docker para execução de contêineres 
em clusters Kubernetes. 
• LXC/LXD: uma tecnologia de contêineres baseada em Linux que oferece um ambiente de execução 
mais próximo de máquinas virtuais tradicionais. LXD é uma extensão do LXC que adiciona uma 
experiência de gerenciamento mais amigável e recursos adicionais, como a migração ao vivo de 
contêineres. 
 
Por que usar o Docker? 
Durante esse curso, faremos uso do Docker. Apesar da existência de várias ferramentas, ele se destaca 
como a escolha principal por várias razões: 
• Popularidade e Comunidade Ativa: Docker possui uma enorme base de usuários e uma 
comunidade ativa que contribui para a documentação, desenvolvimento de plugins e resolução de 
problemas. Essa comunidade vibrante significa que é fácil encontrar suporte e recursos adicionais. 
• Facilidade de Uso: Docker simplifica o processo de criação, distribuição e execução de contêineres. 
Sua interface de linha de comando é intuitiva e bem documentada, facilitando o aprendizado e a 
adoção. 
• Ampla Adoção em Empresas: Muitas empresas, desde startups até grandes corporações, utilizam 
Docker em seus ambientes de produção. Isso garante que as habilidades aprendidas com Docker 
sejam altamente transferíveis e relevantes no mercado de trabalho. 
• Ecossistema Rico: Docker oferece um ecossistema rico de ferramentas e serviços 
complementares, como Docker Compose para orquestração de múltiplos contêineres e Docker 
Swarm para orquestração de clusters de contêineres. 
• Docker Hub: Docker Hub é um repositório de imagens de contêiner públicas e privadas. Ele facilita 
a distribuição e o compartilhamento de imagens, além de oferecer uma vasta biblioteca de imagens 
prontas para uso. 
Escolher a ferramenta certa para trabalhar com contêineres é crucial para o sucesso de projetos de 
desenvolvimento e operações. Docker, com sua popularidade, facilidade de uso e rica oferta de recursos, é 
uma excelente escolha para começar a jornada no mundo dos contêineres. No próximo tópico, exploraremos 
a arquitetura do Docker em detalhes, preparando o terreno para a instalação e uso prático da ferramenta. 
 
3.6. Arquitetura do Docker 
Entender a arquitetura do Docker é essencial para aproveitar ao máximo suas capacidades e 
funcionalidades. A arquitetura do Docker é baseada em um modelo cliente-servidor, onde vários 
componentes trabalham juntos para permitir que você crie, distribua e execute contêineres de maneira 
eficiente. A Figura 1 ilustra essa interação: 
Figura 1 - Arquitetura do Docker. 
 
Fonte: disponível em . 
No coração do Docker está o Docker Daemon, também conhecido como dockerd. O daemon é o 
responsável por toda a magia do Docker acontecer. Ele gerencia todos os objetos do Docker, incluindo 
imagens, contêineres, redes e volumes. Quando você envia comandos através da interface de linha de 
comando do Docker, é o daemon que realmente executa essas ações. O daemon escuta solicitações da API 
Docker e as processa, fazendo com que seus contêineres sejam criados, iniciados, parados e removidos 
conforme necessário. 
Falando em interface de linha de comando, o Docker Client (docker) é a ferramenta que você, como 
usuário, utiliza para interagir com o Docker Daemon. Quando você executa um comando como docker 
run, docker build ou docker pull, o Docker Client envia essas instruções para o daemon, que então as 
executa. O cliente Docker pode estar no mesmo host que o daemon ou em uma máquina diferente, 
permitindo flexibilidade no gerenciamento remoto de contêineres. 
As imagens Docker são um componente central na arquitetura do Docker. Elas são modelos somente leitura 
que definem como um contêiner deve ser construído. Uma imagem inclui o código do aplicativo, bibliotecas, 
dependências e configurações necessárias para que o aplicativo seja executado. 
Uma vez que você tem uma imagem, você pode usá-la para criar um contêiner. Pense em uma imagem 
como uma receita de bolo e em um contêiner como o bolo pronto. Um contêiner é uma instância em 
execução de uma imagem. Quando você executa um contêiner, o Docker Daemon usa a imagem como base 
e cria um ambiente isolado onde o aplicativo pode rodar. Este ambiente é independente do sistema host e 
contém tudo o que é necessário para a execução do aplicativo. 
Para armazenar e compartilhar imagens, o Docker utiliza registry. O Docker Hub é o registry público mais 
conhecido, onde você pode encontrar milhares de imagens pré-configuradas para diversas aplicações. 
Empresas também podem configurar registries privados para manter suas imagens seguras e acessíveis 
apenas internamente. O registry facilita a distribuição de imagens, permitindo que você faça o download 
(pull) ou upload (push) para compartilhá-las. 
Docker Hub 
Para facilitar o uso e a distribuição de imagens, o Docker oferece um serviço chamado Docker Hub. O Docker 
Hub é um repositório de imagens públicas e privadas que permite armazenar, compartilhar e gerenciar 
imagens Docker. Ele funciona de maneira similar a um repositório de código fonte, como o GitHub, mas é 
específico para imagens de contêiner. Entre as funcionalidade do Docker Hub, podemos destacar: 
https://docs.docker.com/guides/docker-overview/
• Repositórios Públicos e Privados: Permite que usuários compartilhem suas imagens com a 
comunidade ou mantenham-nas privadas para uso interno. 
• Busca de Imagens: Oferece uma vasta biblioteca de imagens, incluindo imagens oficiais para 
sistemas operacionais, runtimes de linguagem e aplicações populares. 
• Automatização: Integração com sistemas de controle de versão, permitindo que novas imagens 
sejam automaticamente construídas e atualizadas a partir de código fonte. 
• Webhooks: Facilita a integração com outros serviços e automação de fluxos de trabalho. 
Além disso, o Docker utiliza volumes para persistência de dados. Volumes são usados para armazenar 
dados que precisam sobreviver além do ciclo de vida de um contêiner. Isso é especialmente importante para 
aplicações que geram ou dependem de dados, como bancos de dados. Os volumes podem ser 
compartilhados entre múltiplos contêineres, permitindo que dados sejam facilmente acessados e 
gerenciados. 
Finalmente, as redes Docker permitem que contêineres se comuniquem entre si e com outros serviços 
externos. O Docker fornece diferentes drivers de rede para atender várias necessidades, 
como bridge, host e overlay. Essas redes são configuráveis e permitem que você crie topologias complexas 
de rede para seus aplicativos contêinerizados. 
Em resumo, a arquitetura do Docker combina vários componentes que trabalham juntos de forma 
harmoniosa para fornecer uma plataforma poderosa e flexível para criação, distribuição e execução de 
contêineres. O Docker Daemon, o Docker Client, imagens, contêineres, registries, volumes e redes formam 
a base dessa tecnologia inovadora. 
Na próxima subseção,vamos abordar melhor a diferença entre imagem e contêiner. 
 
3.7. Imagens vs. Contêineres 
Definição de Imagens 
No universo do Docker, o conceito de imagem é fundamental. Uma imagem Docker é um pacote leve, 
independente e executável que inclui tudo o que é necessário para rodar um pedaço de software: 
código, runtime, bibliotecas, variáveis de ambiente e arquivos de configuração. Pense na imagem como um 
molde ou modelo estático que define como o contêiner será criado. As imagens são construídas a partir de 
um arquivo chamado Dockerfile, que especifica todas as etapas necessárias para configurar o ambiente e 
instalar o software. 
Imagens são compostas de camadas, onde cada camada representa uma instrução no Dockerfile. Essas 
camadas são empilhadas, criando uma imagem final que pode ser usada para iniciar contêineres. Uma das 
grandes vantagens dessa abordagem em camadas é a eficiência: se múltiplas imagens compartilham uma 
mesma camada, essa camada é baixada e armazenada apenas uma vez, economizando espaço e tempo. 
Quando uma imagem é alterada, apenas as camadas modificadas são atualizadas, o que torna o processo 
de construção e distribuição de imagens muito mais eficiente. Assim, esse sistema de camadas das imagens 
tem os seguintes benefícios: 
• Eficiência de Armazenamento: Como as camadas são compartilhadas entre imagens, isso 
economiza espaço no disco. Por exemplo, se você tiver várias imagens baseadas na mesma versão 
do Ubuntu, a camada base do Ubuntu será armazenada apenas uma vez. 
• Rápida Construção e Deploy: As camadas permitem que apenas as partes modificadas da imagem 
sejam reconstruídas e distribuídas. Isso reduz o tempo necessário para construir e distribuir novas 
versões de uma imagem. 
• Cache de Construção: Durante a construção da imagem, o Docker usa um mecanismo de cache 
para reutilizar camadas que não foram alteradas. Isso acelera o processo de construção, pois as 
instruções que não mudaram não precisam ser executadas novamente. 
Observe a Figura 2 que apresenta um cenário de exemplo em que é necessárias duas aplicações python e 
tem as seguintes camadas: 
Debian base: Serve como a fundação da imagem, contendo o sistema operacional básico. 
Python and pip: Camada onde são instalados o Python e o gerenciador de pacotes pip. 
App requirements (requisitos das aplicações): Camadas específicas para cada aplicação, onde são 
instaladas as dependências listadas nos arquivos de requisitos. 
App dependencies (dependências das aplicações): Cada aplicação adiciona suas dependências 
específicas em camadas separadas. 
App sources (código fonte da aplicação): O código de cada aplicação é adicionado no topo da pilha de 
camadas. 
Figura 2 - Exemplo de reuso de camadas. 
 
Fonte: disponível em ;. 
Se você tem duas imagens para duas aplicações diferentes, o sistema irá reaproveitar as duas primeiras 
camadas (no exemplo, Debian base e Python and pip) para elas. Portanto, será necessário armazená-las 
apenas uma vez. 
 
Diferença entre Imagens e Contêineres 
Agora que entendemos o que são imagens, vamos diferenciar imagens de contêineres. 
Imagens são o modelo estático, enquanto contêineres são as instâncias ativas dessas imagens. Em outras 
palavras, um contêiner é uma imagem em execução. Quando você cria um contêiner a partir de uma 
imagem, o Docker cria um ambiente isolado onde a aplicação pode ser executada de acordo com as 
especificações da imagem. 
Uma vez que o contêiner está em execução, ele é independente da imagem original. Você pode iniciar, parar, 
mover e excluir contêineres sem afetar a imagem de origem. Isso permite um ciclo de desenvolvimento 
rápido e eficiente, onde as imagens podem ser versionadas e distribuídas, enquanto os contêineres podem 
ser criados e destruídos conforme necessário. 
 
3.8. Conclusão 
Chegamos ao fim desta unidade, em que exploramos o fascinante mundo dos contêineres. Vamos 
recapitular os pontos principais que abordamos. 
https://docs.docker.com/guides/docker-concepts/building-images/understanding-image-layers/%3E
https://docs.docker.com/guides/docker-concepts/building-images/understanding-image-layers/%3E
Nesta unidade, começamos com uma introdução detalhada sobre o que são contêineres e por que eles se 
tornaram tão essenciais no desenvolvimento e operações de software modernos. Entendemos como os 
contêineres se diferenciam das máquinas virtuais e os benefícios de usá-los, como portabilidade, isolamento, 
eficiência de recursos e escalabilidade. 
Em seguida, discutimos a Open Container Initiative (OCI) e sua importância na padronização e 
interoperabilidade de contêineres. A OCI assegura que diferentes ferramentas e plataformas possam 
trabalhar juntas de maneira harmoniosa, promovendo um ecossistema de contêineres mais robusto e 
flexível. 
Exploramos os fundamentos técnicos dos contêineres, incluindo as tecnologias de chroot, namespaces e 
cgroups, que fornecem o isolamento e o controle de recursos necessários para a execução segura e eficiente 
de contêineres. 
Também revisamos as principais ferramentas de contêineres disponíveis atualmente, com destaque para 
Docker, Podman, CRI-O e LXC/LXD. Justificamos a escolha pelo Docker como a ferramenta principal para 
este curso, devido à sua popularidade, facilidade de uso e rica oferta de recursos. 
Aprofundamos na arquitetura do Docker, explicando os componentes principais, como Docker Daemon, 
Docker Client e Docker Registries, e como eles interagem para criar e gerenciar contêineres. 
Diferenciamos claramente entre imagens e contêineres, destacando a importância de ambos e como eles 
são utilizados no ciclo de vida dos contêineres. 
Docker e contêineres revolucionaram a forma como desenvolvemos, testamos e implantamos software. A 
partir desta unidade, você adquiriu o conhecimento básico necessário para começar a usar Docker e explorar 
suas capacidades. O mundo dos contêineres é vasto e cheio de oportunidades para aprendizado e inovação. 
Continue experimentando, aprendendo e aplicando esses conceitos para aproveitar ao máximo esta 
poderosa tecnologia. 
 
4. Gerência de Contêineres 
Na unidade passada, você teve contato com o conceito de contêineres, aprendeu a diferenciar um container 
de uma imagem. Além de explorar os aspectos técnicos e conhecer a arquitetura do Docker, a ferramenta 
de gestão de container que utilizaremos no curso. 
Nessa unidade iremos explorar os principais comandos de gestão de contêineres utilizadas pelo docker, 
além disso vamos aprender a criar uma imagem própria utilizando a tecnologia. Então, caso ainda não tenha 
instalado o docker em sua máquina, lembre-se de rever o material complementar disponibilizado na unidade 
3. Seja bem vindo a unidade 4, e mãos na massa! 
 
4.1. Manipulação de estados de Containers 
Apresentamos para vocês quatro comandos básicos que gerenciam o estado de um container. São os 
comandos: run, start, stop e rm. Inicialmente vamos discutir a diferença entre "rodar" um container e 
"iniciar" um container, questão que costuma con 
Diferença entre run e start 
O ciclo de vida de um container, tem início a partir de um arquivo que descreve uma imagem no docker, 
chamada Dockerfile, a imagem é construída e logo em seguida é utilizada para criar um container, no 
docker através do comando run, comportamento ilustrado pela imagem abaixo. 
 
Para criar um container a partir de uma imagem, o comando abaixo: 
docker run hello-world 
Cria um novo container a partir da imagem hello-world. O container hello-world executa apenas um print na 
tela do terminal, e logo retorna no estado Exited (0), conforme imagem abaixo, ou seja, cumpriu o seu papel. 
Além disso perceba que o container tem um "CONTAINER ID" que o identifica de forma única. 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTSNAMES 
aea85e506ef5 | hello-world | "/hello" | 3 minutes ago | Exited (0) 3 minutes ago | agitated_keldysh 
Perceba que se rodássemos novamente o mesmo comando, um novo container seria construído. 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
5e1f6e684f96 hello-world "/hello" 3 seconds ago Exited (0) 2 seconds ago cool_ramanujan 
aea85e506ef5 hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago agitated_keldysh 
Nesse caso duas execuções do comando run criaram dois contêineres com 
Id 5e1f6e684f96 e aea85e506ef5. Ambos os contêineres podem ser agora, iniciados, parados ou 
removidos. É aí que entra a diferença básica entre run e start. É comum falarem que o "docker run" inicia 
um container, mas na verdade é cria um container e o inicia. Se você quiser simplesmente iniciar um 
container, o correto é utilizar o comando: 
docker start 5e1f6e684f96 
 Perceba que para utilizar o start, o container já tem que ter sido criado previamente, no comando acima 
estamos iniciando o contêiner com ID 5e1f6e684f96 
Comando para parar e remover um container 
Para descrever o os comandos utilizados para parar e remover um container, vamos pegar o exemplo de 
um container que execute o redis, um banco de dados não relacional de memória. 
docker run -d redis 
No comando acima vamos utilizar o -d de detached ou desacoplado, para rodar o redis deixar o terminal 
livre para utilizar outros comandos. Um container construído com uma imagem do redis roda um processo 
que perdura até o administrador parar o container ou até que mesmo retorne uma saída diferente de zero, 
devido a algum problema na maquina que está rodando o docker ou erro durante a execução do container. 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
95bf0cfb3e1b redis "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 6379/tcp sad_vaughan 
O meu container do redis já está rodando a 5 minutos, se quisermos para-lo basta utilizar o comando: 
docker stop 95bf0cfb3e1b 
 
 
Uma vez parado, veja o status do container 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
95bf0cfb3e1b redis "docker-entrypoint.s…" 12 minutes ago Exited (0) About a minute ago sad_vaughan 
Uma vez que o container está parado, só então é possível remove-lo. Quando falamos em remover um 
container, falamos em destrui-lo, ou seja, uma vez realizada a operação não é mais possível iniciar ou parar 
o container pois o mesmo é apagado. Então muito cuidado ao remover contêineres. 
OBS.:É interessante que para os comandos stop, run, start e rm podemos usar o ID do container 
95bf0cfb3e1b, mas também o nome do container, que pode ser definido pelo administrador ou criado 
aleatoriamente pelo docker, no meu caso o container do redis foi nomeado como "sad_vaughan" pelo 
Docker. 
 
4.2. Listando contêineres e executando comandos internamente 
Listando Contêineres 
Na subcapítulo 1.1, mostramos os estados dos contêineres criados. Para tal utiliza-se o comando: 
docker container ps 
 O comando lista apenas os containers que estão em execução pelo docker na máquina. 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2699d1bc1f02 redis "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 6379/tcp cranky_diffie 
Ao utilizar o parâmetro -a, como no comando abaixo: 
docker container ps -a 
Conseguimos ver todos os contêineres criados no momento, independente do estado. 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2699d1bc1f02 redis "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp cranky_diffie 
4a4374611a8e redis "docker-entrypoint.s…" 12 seconds ago Exited (1) 11 seconds ago ecstatic_sanderson 
95bf0cfb3e1b redis "docker-entrypoint.s…" 6 hours ago Exited (0) 6 hours ago sad_vaughan 
61e229b34451 redis "docker-entrypoint.s…" 6 hours ago Exited (1) 6 hours ago angry_wozniak 
6a66fabf568d redis "docker-entrypoint.s…" 6 hours ago Exited (0) 6 hours ago busy_noyce 
5e1f6e684f96 hello-world "/hello" 7 hours ago Exited (0) 7 hours ago cool_ramanujan 
aea85e506ef5 hello-world "/hello" 7 hours ago Exited (0) 7 hours ago agitated_keldysh 
Executando comandos em contêineres 
Uma vez que um contêiner está em execução é possível executar comandos no shell do respectivo 
contêiner. 
Por exemplo, no contêiner exemplo do redis, o comando abaixo: 
docker container exec 2699d1bc1f02 pwd 
#Saida: 
/data 
Está executando o comando do shell 'pwd' dentro do contêiner com ID 2699d1bc1f02. 
Também existe a possibilidade de acessar o modo interativo do shell do contêiner, utilizando o comando: 
docker container -it 2699d1bc1f02 sh 
Nesse caso o docker vai acessar via terminal remoto o modo iterativo do shell 'sh', de maneira que o usuário 
possa inserir os comandos que quiser diretamente no contêiner. Uma vez dentro do terminal, se quiser sair 
basta utilizar o comando exit. 
 
4.3. Gerenciando Imagens 
Além da manipulação de contêineres, existe a possibilidade de gerenciar imagens, utilizadas como base 
para a construção dos mesmos. Nesse subcapítulo veremos alguns dos comandos utilizados para listas as 
imagens instaladas em nossa máquina, como baixar novas imagens além de como inspecionar uma imagem 
disponível. 
Se eu preciso listar as imagens instaladas em minha máquina, basta utilizar o comando: 
docker image list 
Registry Local e Remoto 
Antes de prosseguir é interessante diferenciarmos os tipos existentes de Registry. 
• Registry Local: Contém a lista de imagens baixadas de um Registry remoto, ou que foram 
construídas no mesmo local que docker 
• Registry Remoto: Repositório público ou privado, que armazena imagens criadas de repositórios 
locais, ou lançadas oficialmente nas plataformas, pelos desenvolvedores da imagem. 
Já para baixar uma imagem localmente, de um registry remoto (o padrão do docker é o dockerhub) o 
comando abaixo: 
docker image pull nginx 
Faz o docker baixar a imagem mais atualizada do nginx, servidor web e balanceador de carga. Se de repente 
fosse necessário baixar uma versão específica bastaria utilizar o comando, por exemplo: 
docker image pull nginx:1.27-alpine 
O comando baixa a versão 1.27-apline do nginx para registro local da máquina. 
Também é possível chegar informações da imagem, utilizando o comando inspect, como no exemplo abaixo: 
docker image inspect redis 
A saída é um json, com os dados da imagem do redis, que podem ser uteis durante a criação de contêineres. 
Abaixo alguns dos campos exibidos, são o Id com o hash code único que identifica a imagem, o Sistema 
operacional e arquitetura em que a imagem foi construída, entre outros. 
"Id": "sha256:6cc22e7beb32ecf3f7c8ac5391388fa23a994508fb096dc52f437e40a904b17a", 
"RepoTags": [ 
 "redis:latest" 
 ], 
"Architecture": "amd64", 
 "Os": "linux", 
"Cmd": [ 
 "redis-server" 
 ] 
"Created": "2024-08-14T19:16:46.7937602Z",

Mais conteúdos dessa disciplina