Apple abre código da Linguagem Swift

Num movimento que representa uma mudança significativa para a Apple e para a indústria de TI ela abriu o código de sua linguagem de programação Swift em dezembro ultimo.

A Apple lançou o Swift inicialmente apenas para iOS/watchOS/tvOS (iPod, Apple Watch, iPhone, iPad, Apple TV) e para OSX (linha Mac). Ao abrir o código da linguagem a Apple está preparando o caminho para Swift ser executado em todos os tipos de máquinas, incluindo servidores com Linux, smartphones baseados no sistema operacional Android e tablets baseado no sistema operacional Windows Phone, da Microsoft.

A Apple criou um site http://Swift.org e vai compartilhar o código fonte através do repositório no GitHub. Ela também criou um ecosistema com uma ampla gama de ferramentas. a) Compilador Swift que poderá ser executado no Linux, além do Mac OSX; b) Gerenciador de pacotes para Swift;

A Apple não portou o Swift para Android ou Windows Phone, porém o código que lançou deve permitir que a comunidade open source construa software que rode potencialmente, em qualquer outro sistema operacional. Codificadores serão motivados a fazê-lo porque Swift já provou ser muito eficaz, segura e produtiva. Swift é significativamente mais fácil de aprender e usar do que Objective-C, e fornece a mesma eficiência. Empresas de grande porte como Twitter, Yahoo e LinkedIn já estão usando a nova linguagem em aparelhos da Apple e várias startups, já estão de olho nas formas de executar a linguagem em outras máquinas.

As máquinas Linux são usadas tanto nos grandes servidores e Farms das maiores empresas de tecnologia (Google, Facebook, Uber, Airbnb, etc.) como nos smartphones Android. Desta forma é muito bem vinda esta noticia de abertura da Linguagem Swift.

Em breve veremos Aplicações Swift rodando nos maiores Data Centers do planeta.

Para comemorar este fato eu criei uma imagem Docker que pode ser obtida em hub.docker.com/r/dockerbrasil/swift-2_2

Swift open source

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

Java 9 no Docker – Java Playground com REPL

A abordagem adotada aqui, com uso de contêiner Docker, foi motivada pela preservação do ambiente Java existente no computador Host já que instalar uma versão Java 9 onde já existe outra versão do Java, tal como o Java8, pode deixar o ambiente instável, criando problemas para o Desenvolvedor ou SysAdmin.

Criando ou Obtendo a imagem Docker

Criando

cd ~/Desktop/Development
git clone git@github.com:joao-parana/java-jdk9.git
cd java-jdk9
docker build -t parana/java-jdk9 .

Obtendo

Senão NÃO desejar fazer o build você poderá baixar direto a imagem do Docker Hub

docker pull parana/java-jdk9

Sessão do JShell

Para termos a disposição uma sessão do JShell, basta executar o Contêiner e invocar a JShell

docker run -i -t --rm parana/java-jdk9
jshell

Você verá uma mensagem parecida com esta abaixo

Jan 01, 2016 12:28:09 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 9-internal
|  Type /help for help

E um prompt assim:

-> 

Agora podemos digitar código Java diretamente na console. Não exibirei o prompt abaixo para simplificar o uso dos comandos. Em vez disso colocarei o código Java e os comandos JShell em fonte de tamanho fixo.

import java.util.stream.*
IntStream.range(0, 10).map(x->x*x).forEach(System.out::println)
/save script-01.repl 
/exit

Voltamos a Bash e podemos listar os arquivos e exibir o conteudo de script-01.repl

ls
script-01.repl
cat script-01.repl 
import java.util.stream.*;
IntStream.range(0, 10).map(x->x*x).forEach(System.out::println)

Voltamos a invocar a JShell e digitar comandos Java ou comandos JShell (estes que são precedidos pelo caracter / )

Experimentemos os comandos /?, /vars e /methods

jshell
System.out.println("Agora interativamente")
/open script-01.repl 
/?
/methods

O método printf já vem definido para facilitar o uso da console REPL

printf("Oi %s", "Mundo")
int pi = 3.1416
float pi = 3.1416
float pi = 3.1416f
/vars

Experimentando os comandos /imports, /vars e /reset

/imports
/vars
/reset

Usando o comando /list para listar o código Java no contexto atual

/list

Obtendo o Histórico de comandos digitados até o momento

/history

É possível modificar o nível de LOG na console REPL do JShell com o comando /feedback

-> /feedback ?
|  Follow /feedback with of the following:
|    off       (errors and critical output only)
|    concise
|    normal
|    verbose
|    default
|  You may also use just the first letter, for example: /f c
|  In interactive mode 'default' is the same as 'normal', from a file it is the same as 'off'

O conteúdo mostrado pelo comando /? lista todas as possibilidaes de uso do JShell. Veja abaixo

Type a Java language expression, statement, or declaration.
Or type one of the following commands:

/list [all]                      -- list the source you have typed
/seteditor           -- set the external editor command to use
/edit                -- edit a source entry referenced by name or id
/drop                -- delete a source entry referenced by name or id
/save [all|history|start]  -- save:  - current source;
                                          all - source including overwritten, failed, and start-up code;
                                          history - editing history;
                                          start - default start-up definitions
/open                      -- open a file as source input
/vars                            -- list the declared variables and their values
/methods                         -- list the declared methods and their signatures
/classes                         -- list the declared classes
/imports                         -- list the imported items
/exit                            -- exit the REPL
/reset                           -- reset everything in the REPL
/feedback                 -- feedback information: off, concise, normal, verbose, default, or ?
/prompt                          -- toggle display of a prompt
/classpath                 -- add a path to the classpath
/history                         -- history of what you have typed
/setstart                  -- read file and set as the new start-up definitions
/help                            -- this help message
/?                               -- this help message
/!                               -- re-run last snippet
/                            -- re-run snippet by id
/-                            -- re-run n-th previous snippet

Supported shortcuts include:
       -- show possible completions for the current text
Shift- -- for current method or constructor invocation, show a synopsis of the method/constructor

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

Apresentação sobre Docker na Semana do linux

Recentemente preparei uma apresentação para a Semana do Linux.

Veja o video e deixe seu comentário.

 

Matricule-se no curso online Introdução ao Docker para saber mais sobre esta tecnologia revolucionária

.

Se desejar um cupom de desconto entre em contato via formulário abaixo.

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

Você pode também curtir a página do facebook no link abaixo :

https://www.facebook.com/joaoparanaweb

Linha Shebang pra GoLang

Shebang GOLANG GO

Qual a forma mais apropriada para definir uma linha shebang para Script escrito em Linguagem GO ?

Existem algumas alternativas e vou descrever aqui.

A mais simples é essa abaixo:

Coloque na primeira linha do programa principal

//usr/local/go/bin/go run $0 $@ ; exit

No caso de você não saber onde está instalado o GO use o comando `which go` para verificar.

Exemplo:

//usr/local/go/bin/go run $0 $@ ; exit
package main
import "fmt"
func main() {
  fmt.Println(“Oi SysAdmin. Este é um script escrito em GO")
}

A razão para isso funcionar é a seguinte: O compilador go trata as duas barras // como comentário e a shell, por outro lado ignora a barra extra existente. Desta forma tanto a sua Shell quanto o Builder do GO irao entender corretamente o que deve ser feito.

Não se esqueça de conceder acesso de execução no arquivo .go

Supondo que o arquivo se chame hello.go podemos executar

chmod a+rx hello.go

Existem argumentações para se usar algo um pouco mais rebuscado para evitar problema de compatibilidade entre ambientes.

///usr/bin/true; exec /usr/bin/env go run "$0" "$@"

Eu prefiro usar como mostrado abaixo em ambiente de desenvolvimento..

///usr/bin/true; echo •• Executando "$0"; exec /usr/bin/env go run "$0" "$@"

Exemplo:

///usr/bin/true; echo •• Executando "$0"; exec /usr/bin/env go run "$0" "$@"
package main 
import "fmt"
func main() {
  fmt.Println(“Oi SysAdmin. Este é um script escrito em GO")
}

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

O Manifesto da Revolução de TI

Este texto é uma tradução livre do IT Revolution Manifesto – http://itrevolution.com/manifesto

Traduzi o texto pois trata-se de iniciativa de líderes no mundo dos negócios e de TI que identificaram algumas das causas raiz das falhas dos projetos de TI e como Arquiteto de Sistemas tenho observado isto desde meu ingresso nesta área. Além de Identificar o Problema eles criaram esta iniciativa para liderar uma transformação cultural importantíssima para as empresas, que a maioria dos gestores estratégicos ainda não enxergaram sua importância. Segue abaixo a tradução.

 

Os custos econômicos

Hoje, a maioria das organizações dependem de TITecnologia da Informação – mais do que tem conhecimento. Quase todos os compromissos que uma empresa assume com o mundo exterior, sejam relacionados a projetos, operações, ou compliance ou relatórios financeiros, requerem Serviços de TI. Apesar disso, muitos líderes empresariais ainda dirão equivocadamente:

“Nós não somos o Google ou Microsoft. TI não é uma competência essencial. Podemos terceirizar todos esses serviços.”

 

As funções de TI são o sistema nervoso para a maioria das empresas e fornece uma quantidade crescente da “massa muscular organizacional”.  A maioria das funções críticas de negócios são totalmente automatizadas pelas equipes da TI, e 95% de todos os projetos essenciais dependem dela para ficarem prontos. Atualmente, praticamente todas as decisões de negócios irão resultar em pelo menos uma mudança envolvendo recursos da TI.

Além disso o Departamento de TI muitas vezes encontra-se  atolado em trabalho urgente e não planejado, sem recursos para sua execução. Gastando inúmeras horas lidando com quedas de sistema, emergências e falhas e trabalhando em projetos de conformidade muitas vezes desnecessários,  o Departamento de TI realiza apenas os controles dos danos em vez de implantar as mudanças que iriam ajudar o negócio a prosperar.

De acordo com pesquisas e analises, os gastos globais de TI em 2010 foi de aproximadamente US$ 10 trilhões. Mas cerca de 70% dos projetos de TI falharam, e quase 50% do trabalho realizado foi trabalho não planejado ou retrabalho. Se nós estimarmos, de uma forma conservadora,  que 20% do trabalho de TI é desperdiçado anualmente, concluímos que: estamos deixando escapar por entre nossos dedos US$ 2 trilhões a cada ano.

Os custos humanos

Infelizmente, não é apenas perdas em dinheiro.

Trabalhar em Departamentos de TI de muitas organizações pode ser frustrante e desagradável. As pessoas se sentem como se eles estivessem presas em um filme de terror repetindo pra sempre, impotente para mudar o resultado.  A organização abdica da sua responsabilidade de garantir uma boa gestão de TI, mergulhando o departamento em uma guerra intertribal implacável entre o Desenvolvimento e os setores de Segurança da Informação e Operações de TI. E, claro, os Auditores.

 

O que resulta, inevitavelmente em  ineficiência crônica. A vida de um profissional de TI é muitas vezes desmoralizante e frustrante, geralmente levando a sentimentos de impotência e repleto de stress, que se espalha para todos os aspectos da sua vida. De problemas de saúde relacionados com o stress, até questões sociais, passando por  tensões em casa, tornou-se claro que o estado atual do profissional de TI não é nada saudável e até insustentável.

 

Como pessoas, nós estamos impelidos a contribuir e sentir estamos fazendo a diferença ativamente. No entanto, muitas vezes, quando os profissionais de TI vai pedir apoio a sua organização, eles vem com “você não entende”, ou pior,  “você não importa.”

 

Como um ser humano, esta é a pior resposta que poderia receber. Porque o oposto do amor não é o ódio – é a apatia.

O que estamos fazendo sobre isso

 

Ao longo dos últimos dois anos, temos visto uma quantidade inigualável de paixão em torno da solução para este problema, especialmente em operações de TI, infraestrutura automatizada, e inúmeras propostas de novas formas de Dev (Desenvolvimento) e Ops (Operações) trabalharem juntos e colaborativamente.

 

Sabemos que o sistema atual não está funcionando. Sabemos que há uma maneira melhor. Sabemos que encontrar uma solução irá desbloquear o verdadeiro potencial da TI. Na IT Revolution Press, queremos liderar a maior mudança na forma como gerimos a TI. Daqui a cem anos, os historiadores olharão para esta década e dirão:

“esta foi a Explosão Cambriana (primeiro período da era Paleozoica) de TI, onde nós finalmente descobrimos como as organizações devem gerenciar TI para vencer.”

Ao longo dos últimos cinco anos, temos visto o crescimento sem precedentes e a convergência de idéias e tecnologias inovadoras. Algumas são positivas, como Metodologias Ágeis, computação em nuvem, Big Data, o movimento DevOps, e os padrões culturais Lean Startup. Algumas são negativas, tais como a globalização e a terceirização, o aumento das violações de dados e conformidade du jour, além da maior recessão econômica desde a Grande Depressão.

 

Nosso objetivo é influenciar positivamente as vidas de 1 milhão de pessoas de TI ao longo dos próximos 5 anos. Para que isso aconteça, nós estamos unindo líderes do pensamento em todos os domínios relevantes com um bom senso de propósito e paixão para nos ajudar a alcançar nosso objetivo e melhorar a TI para as gerações futuras.

 

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

 

A Caixa de Ferramentas Docker (Toolbox)

Recentemente a equipe do Docker lançou a sua Toolbox (Caixa de Ferramentas) para utilização do Ecosistema Docker. Esta Toolbox provê funcionalidades para gerenciamento facilitado para Contêineres no ambiente MAC OSX e Windows (No Linux não precisamos da Toolbox pois a instalação do Docker é direta).

 

 

Qual o objetivo a ser alcançado ?

Como o MAC OSX e Windows são Sistemas Operacionais diferentes do Linux e o Docker atualmente roda sob Kernel Linux, precisamos de um Ambiente Virtual para usar as facilidades do Docker nestes dois ambientes (que são largamente utilizados por Desenvolvedores e Administradores de Sistemas).

O que é o Docker Toolbox ?

O  Docker Toolbox é um instalador que permite fazer o setup do ambiente no Windows e no MAC OSX. Vale lembrar que podemos usar gerenciadores de pacote também quando pretendemos instalar e configurar o Docker e seus componentes. No OSX é possível usar o Homebrew para instalar o Docker facilmente. No Windows podemos usar o Chocolatey – https://chocolatey.org/packages/docker  – mas não trataremos aqui desta abordagem, pois preferimos o programa fornecido pela propria Docker inc.

O Docker Toolbox funciona como programa executável dependente de plataforma e tem a capacidade de acertar o ambiente pois detecta a existência de versão anterior fazendo automaticamente os upgrades e as migrações necessárias.

Como qualquer programa que envolva este tipo de complexidade, ele pode falhar em alguma situação específica e por isso ele pede que o usuário autorize o envio de dados anônimos relacionados ao processo de instalação (primeira vez) para a equipe do Docker  de forma que eles possam melhorar o programa. O usuário pode, no entanto, desmarcar esta opção.

O Docker Toolbox instala ou atualiza os seguintes softwares:

  • Docker Client
  • Docker Machine
  • Docker Compose (apenas na versão para MAC OSX)
  • Docker Kitematic
  • Docker Quickstart Terminal
  • VirtualBox

O Boot2Docker continua sendo suportado e também é atualizado.

É possível criar uma Docker Machine à partir de uma Maquina Virtual do Boot2Docker. Para isso devemos executar o comando:

docker-machine create -d virtualbox  \
--virtualbox-import-boot2docker-vm boot2docker-vm dev

Mas se optarmos por isso à partir desse momento devemos usar o comando docker-machine para interagir com a maquina virtual em vez do vínhamos utilizando que era o comando boot2docker
A comparação entre as duas abordagens pode ser vista em detalhes nesta tabela abaixo:

ou no link: http://docs.docker.com/installation/mac/#migrate-from-boot2docker onde vemos mais detalhes sobre migração.

Qualquer problema encontrado no processo de instalação pode ser reportado no endereço https://github.com/docker/toolbox/issues o que também ajuda na melhoria do programa.

Neste processo de instalação citado, o Docker Toolbox mantem a versão anterior do programa Boot2Docker (1) e instala Docker Quickstart Terminal e o Kitematic (Beta) (3) na pasta Docker (2)

As Imagens e Contêineres antigos ficam disponíveis via a Maquina Virtual Boot2Docker anterior e para usá-las basta executar:

boot2docker start

Se desejar migrar para a Máquina Virtual Docker Machine use o comando

“docker-machine create -d virtualbox …”  citado anteriormente.


Matricule-se no curso online Introdução ao Docker para saber mais sobre esta tecnologia revolucionária

.

Se desejar um cupom de desconto entre em contato via formulário abaixo.

Deixe seu nome e e-mail para que eu possa enviar cupons de desconto para o curso sobre Docker

Você pode também curtir a página do facebook no link abaixo :

https://www.facebook.com/joaoparanaweb

Docker e a o formato universal para Contêineres.

OCI – Open Container Initiative : Uma revolução no mundo da Virtualização

O Docker permite empacotar uma aplicação com todas as suas dependências em uma unidade padronizada de Software e assim roda sempre da mesma forma independente de em qual sistema está rodando. Isto reduz um muito das “dores de cabeça” comuns na gestão do Ciclo de Vida da Aplicação. Permite também automatizar o provisionamento de recursos necessários a aplicação. Isto é uma verdadeira revolução no mundo da Virtualização.

 

No final de junho ultimo o pessoal do Docker anunciou em seu Blog o projeto  Open Container.  Trata-se de um projeto sem fins lucrativos, de código aberto, agnóstico a fornecedor, gerenciado pela Linux Foundation com o propósito expresso de definir especificações abertas e padrão em torno de uma definição formal de um formato de Contêiner e do ambiente de Runtime desses Contêiners.

 

A Docker Inc doou o runC, que é uma ferramenta CLI – Command Line Interface para iniciar e rodar contêineres. Este projeto é aberto e servirá como ponto de partida rodando em Linux mas servirá de base para o desenvolvimento para Windows, FreeBSD e outros Sistemas Operacionais.

Os 5 princípios dos Padrões para Contêiners :

O padrão definirá

1) um formato de arquivo

2) um conjunto de operações

3) um ambiente de execução

O Contêiner deverá descrever suas dependências num formato auto-descritivo, portável, permitindo a execução em ambientes distintos em qualquer runtime compatível independente do conteúdod do Contêiner e do Sistema Operacional.

Esta é a razão pela qual foram definidos os cinco princípios que norteará o Padrão de Contêineres:

1. Operações Padrão

2. Independente de conteúdo

3. Independente de Infraestrutura

4. Projetado para Automação do Provisionamento

5. Entrega obedecendo Padrões da Indústria

 

Sobre a Open Container Initiative e seus patrocinadores

A OCI conta com patrocinadores incluindo : Apcera, AT&T, AWS, Cisco, ClusterHQ, CoreOS, Datera, Docker, EMC, Fujitsu, Google, Goldman Sachs, HP, Huawei, IBM, Intel, Joyent, Kismatic, Kyup, the Linux Foundation, Mesosphere, Microsoft, Midokura, Nutanix, Oracle, Pivotal, Polyverse, Rancher, Red Hat, Resin.io, Suse, Sysdig, Twitter, Verizon, VMWare.

 

A especificação está sendo desenvolvida no seguinte endereço github repository.  OCI é o elemento chave para acelerar o desenvolvimento de soluções para facilitar a implantação destas soluções nos provedores de Cloud (Públicas ou Privadas).

 

O Futuro chegou ! O melhor é que ela é Open Source.

 

O que é o Docker

Atualmente os sistemas de software afetam praticamente todos os aspectos de nossas vidas. No entanto  erros em sistemas de computação podem produzir prejuizos assustadores como explodir uma nave espacial, levar uma empresa multimilionária a falência ou expor a imagem de uma gigante e lider na área de video-games. Todos estes exemplos são reais e a todo momento vemos noticias de outras catástrofes ocorridas por erros de software.

 

Qual o motivo para ocorreram estas coisas ? No raiz do problema está a negligência com a complexidade envolvida nos processos de desenvolvimento e implantação de sistemas.

 

Um sistema de software bem escrito deve ser robusto, eficiente, confiável e flexível. Para conseguir isso devemos ter o controle de todo o Ciclo de Vida da Aplicação, desde a concepção, baseada nos requisitos do negócio, passando pelo desenvolvimento, testes, homologação, produção e gerenciamento de mudanças.

 

Ok, mas este é um artigo sobre Docker então por que falar disso tudo ?  Ora, por que o Docker vai facilitar nossa vida em várias etapas desse ciclo de vida da aplicação. Neste artigo vou descrever o que é o Docker pois este é o primeiro passo para poder usa-lo de forma eficiente para Gerenciar todos os Ciclos de Vida de nossas Aplicações.   

 

Gerenciamento do Ciclo de Vida da Aplicação

A manutenção de ambientes de Desenvolvimento, Homologação e Produção tem grande impacto no Gerenciamento do Ciclo de Vida da Aplicação (ALM – Application Lifecycle Management), devido a grande complexidade das aplicações atuais nas sua maioria rodando em ambiente distribuído. Para mitigar os riscos neste gerenciamento e manter os altos níveis de Qualidade desejados pelos usuários dos sistemas é necessário que usemos algumas das ferramentas disponíveis para os setores de Tecnologia da Informação que permitam alto nível de produtividade.

Considere como exemplo um sistema com com apenas 5 clientes. Como temos três ambientes diferentes para cada cliente devemos gerenciar 15 ambientes, cada um com seus ativos de software, banco de dados, scripts de teste, etc. Torna-se impossível usar maquinas reais nesta tarefa pois teríamos uma pilha de 15 máquinas que consumiria muitos recursos e muito espaço físico.  Para resolver este problema é necessário compartilhar os recursos de hardware usando algum tipo de virtualização.

 

Virtualização

Podemos optar por usar Maquinas Virtuais para facilitar o gerenciamento e provisionamento de serviços. Neste caso entra em cena a ferramenta Vagrant que facilita a criação dessas máquinas virtuais e o provisionamento de recursos de forma programática. Isto é possível usando ferramentas como Puppet, Salt, Chief ou Ansible.

A criação e manutenção de uma máquina virtual (Virtual Box, Hyper-V ou VMWare) demanda grande quantidade de tempo e, muitas vezes complexa. Além do fato dessas máquinas virtuais consumirem uma quantidade imensa de espaço em disco.  

 

Melhorando o modelo

 

Devido ao crescimento da demanda por Maquinas Virtuais e grande dificuldade na operação desse ambiente surgiu a necessidade de melhorar esse modelo. Os pesquisadores desta área perceberam que não havia a necessidade de recriar um SO completo e que bastava reusar os recursos de um mesmo SO num espaço de run-time independente chamado Virtual Environment. Lançando mão de uma funcionalidade nativa do Kernel Linux, para facilitar a criação e gestão destes ambientes virtuais leves, eles conseguiram ótimos resultados. Assim surgiu o LxC e mais recentemente o Software Docker que em pouco tempo roubou a cena quando se fala em automatizar a infraestrutura de software e hardware.

 

O Vagrant e o Docker se complementam num ambiente de Gerenciamento de infraestrutura de TI mais sofisticado.

 

Detalhando

 

A seguir vamos detalhar um pouco mais o Docker que é uma ferramenta extremamente útil na gestão de múltiplos ambientes para Gerenciamento do Ciclo de Vida do Software.

 

O Docker é uma plataforma aberta usada por desenvolvedores e administradores de sistemas para construir, entregar e rodar aplicações distribuídas. É composto pelo Docker Engine, que é uma ferramenta leve de execução e empacotamento, e pelo Docker Hub, um serviço em nuvem responsável pelo compartilhamento de aplicações e automação de fluxos de trabalho. Ele permite que aplicações sejam rapidamente montadas e elimina as diferenças entre os ambientes de desenvolvimento, testes e produção.

 

O Docker não é uma ferramenta de virtualização de máquinas, ele é um ambiente de virtualização de Linux, construído sobre os LinuX Contêineres (LxC), que utiliza as funcionalidades cgroups e namespacing do Kernel do Linux (e a linguagem Go) para criar e rodar ambientes Linux Virtuais isolados em um único host. Mais recentemente a equipe do Docker em parceria com 34 outras empresas (https://www.opencontainers.org/) fundaram a Open Container Initiative para padronizar conteineres e a forma de executá-los independente de sistema operacional.

 

O Virtual Environment – VE roda diretamente sobre o kernel já existente (do host) e apenas cria um contêiner  onde serão executados seus aplicativos, onde até é possível recriar outra configuração de SO, já que este será apenas outro aplicativo rodando sobre o kernel.

 

Vale observar que o Docker compartilha o kernel do Linux entre os ambientes e portanto seus contêineres não terão completo isolamento como acontece numa maquina real ou numa maquina virtual completa rodando sob Virtual Box, Hyper-V ou VMWare.

 

Acontece porém que o isolamento que ele proporciona atende plenamente as necessidades dos Sistemas de Informação em ambientes controlados, com a vantagem de executar extremamente rápido. Por exemplo, podemos rodar um comando num contêiner à partir do Host em alguns milisegundos.

O Docker usa AuFS (advanced multi layered unification filesystem) como sistema de arquivos, assim ele reutiliza a imagem do SO e as imagens relativas a cada um dos serviços instalados entre vários de seus contêineres em execução economizando recursos valiosos do computador host.

 

O Docker permite Implantação portátil através de máquinas, pois podemos usar o Docker para criar um objeto único que contém todas as suas aplicações empacotadas o qual chamamos Imagem Docker. Este objeto pode ser transferido e rapidamente instalado em qualquer outro host Linux com Docker habilitado, incluindo maquinas reais ou virtuais rodando Linux, Windows ou MAC OSX.

 

O Docker permite Reutilização de componentes pois podemos “empilhar” pacotes já criados cada um com sua funcionalidade específica. Por exemplo, se você precisa criar várias máquinas que todos necessitam de banco de dados Oracle e WebServer Apache, podemos criar uma imagem base contendo o Oracle e outra contendo o Apache, e na sequência, construir e criar novos contêineres que utilizam estas imagens base já criadas.

 

O Docker pode usar imagens disponíveis em bibliotecas compartilhadas. Existe um registro público onde podemos encontrar milhares de imagens já prontas (https://hub.docker.com/explore/)

 

Principais Funcionalidades do Docker

 

Contêineres facilmente portáveis: você pode criar uma imagem de toda a configuração e aplicativos instalados em seu contêiner, transferir e instalar em um outro host desde que tenha um Docker previamente instalado.

 

Versionamento: Docker permite que você versione as alterações de um contêiner de uma forma muito semelhante ao feito pelo GIT ou SVN. Isto permite portanto verificar as diferenças entre versões, fazer commit de novas versões e fazer rollback de uma dada versão.

 

Reutilização de componentes: as imagens criadas podem ser reutilizadas, como por exemplo, se diversas de suas aplicações utilizam um stack com Java 8, Tomcat 8 e Oracle 12 você poderá criar uma uma imagem base contendo estes itens com sua instalação e configuração. Desta maneira esta imagem poderá ser reutilizada em diversos Contêineres diferentes.  podemos construir imagens Docker usando um arquivo Dockerfile e o comando de montagem docker build. O Dockerfile usa uma DSL – Domain Specific Language –  simples com poucas instruções, porém sufucientes para construir imagens Docker. A abordagem de criação via Dockerfile pode ser repetida quantas vezes for necessário, em quantos ambientes seja desejado além de permitir gerenciamento de versão no GIT/SVN das definições da infraestrutura. Com esta DSL o Docker consegue levar a Metodologia de Orientação a Objetos para o provisionamento da Infraestrutura.

 

Compartilhamento: o Docker Hub já possui milhares de contêineres com as mais diversas aplicações instaladas e configuradas, desta maneira você pode rapidamente criar sua aplicação com uma base desenvolvida por outra pessoa, ou ainda criar sua base e compartilhá-la.

 

CLI – Command Line Interface e API – Application Program Interface: Permite criação de Programas e Scripts que interagem com o Docker para provisionar serviços nos Contêineres.

 

Automatização de Implantação dentro dos Contêineres: Usando os provisionadores que por sua vez usam a API do Docker, podemos automatizar a implantação dos ambientes de software.

 

Licença Open Source: Licenciado como Apache License, Version 2.0 mantem os códigos fonte em https://github.com/docker/docker para facilitar o desenvolvimento colaborativo.

 

Evita Dependency Hell: Um dos maiores problemas em múltiplos ambientes com os quais os desenvolvedores de software convivem diariamente é o gerenciamento de dependências. O Docker evita problemas neste gerenciamento.

 

Demanda Poucos Recursos de Hardware: Exige poucos recursos de processos, memória e espaço em disco.

 

Performance inigualável: é possivel baixar uma imagem Fedora do repositório público na Internet em menos de um minuto e executar um comando simples num contêiner criado com esta imagem, à partir do computador Host, em menos de um segundo.

  

Ligação entre Contêineres

Conectar contêineres via mapeamentos de porta TCP/IP não é a única forma de disponibilizar recursos entre eles. Um contêiner Docker pode se conectar a um outro via um sistema de ligação e enviar informações de um para o outro de forma eficiente e segura. Quando os contêineres estão ligados, a informação sobre o contêiner origem pode ser enviada para um contêiner destino. Isso permite que o contêiner destino possa acessar dados selecionados do contêiner origem. Como exemplo, podemos então criar um contêiner chamado web (destino) e ligá-lo a um contêiner chamado db (origem) usando um alias para o link chamado dblink, por exemplo. Para permitir a ligação o Docker cria um tunel seguro entre o contêiner origem e o contêiner destino, eliminando a necessidade de expor qualquer porta TCP/IP externamente a estes dois contêineres.

 

Orquestração com Docker Compose

 

Docker Compose é uma ferramenta para definir e rodar aplicações complexas via Docker. Com Compose, podemos definir uma aplicação multi-contêiner num único arquivo, e em seguida iniciar a aplicação e tudo da qual ela depende para sua executação. O Docker Compose é ótimo para usar em ambientes de desenvolvimento, homologação e Integração Contínua e permite implementar Arquitetura de Micro Serviço de forma simples.

 

Para saber mais sobre Docker Compose e Orquestração de Serviços e obter todas as vantagens desta plataforma faça o curso Introdução ao Docker compreendendo 16 horas. Link permanente : http://cursos.escolalinux.com.br/curso/introducao-ao-docker-16-horas

 

Virtualização Enxuta
Por tudo isso que foi exposto aqui podemos dizer que o Docker permite levar para a Infraestrutura de TI esta Técnica de Virtualização Enxuta que nos proporciona o benefício da eliminação de desperdício da mesma forma que é preconizada pelas Metodologias Ágeis para Desenvolvimento de Software (SCRUM/XP) e de Produtos e Negócios (Lean Startup).

 

O Docker no Comando

Aliando o Docker com uma ferramenta de Integração Contínua, tal como o Jenkins, podemos gerenciar automáticamente via Scripts todo o ciclo de vida da aplicação. Isto é possível devido a sua característica de permitir que instalemos e executemos uma instância de Docker de dentro de outro Contêiner Docker.

 

 

 

Posicionamento do Docker no mercado

Os profissionais de TI que estão escolhendo uma tecnologia para automatizar sua infraestrutura vão gostar de ver este gráfico abaixo que mostra como o mercado está vendo está revolução causada pelo Docker principalmente à partir de meados de 2014 para cá. O crescimento do Docker foi exponencial.

O Vagrant não compete diretamente com o Docker e também está crescendo, porém mais lentamente.

Este gráfico reflete aquilo que já sabíamos mesmo que intuitivamente: as funcionalidades implementadas pelo Docker para suporte ao que podemos chamar de Virtualização Enxuta está surpreendendo o mercado de TI devido ao uso super eficiente de recursos (Memória, Disco, CPU) e a facilidade com que permite tirar proveito desses recursos.

Por curiosidade podemos comparar as pesquisas feitas sobre Docker com aquelas feitas sobre Lean Startup e SCRUM que também estão relacionados a eliminação de desperdício, porém nas áreas de Gestão de Negócios e Gestão de Desenvolvimento de Software respectivamente. Veja o gráfico abaixo mostrando como a curva de interesse pelo Docker é muito mais ascendente. Isto reflete a Inovação que o Docker incorporou e o quanto o mercado está empolgado com esta descoberta.

Por isso é muito importante que nós profissionais de TI nos especializemos nesta tecnologia para tirar o máximo de proveito dela para diminuir o esforço de Gestão de Infraestrutura nos nossos Centros de Processamento de Dados.

Para quem desejar se aprofundar no Docker pode solicitar um cupom de desconto para o curso neste link

Este é um curso on-line que preparei para a Escola Linux empresa do grupo Linux Solutions.

Obs.: Uma das sessões do curso trata da utilização do Docker na plataforma Windows e na plataforma MAC OSX.

SCRUM, Métodos Ágeis e Docker

O evento anual de SCRUM e Metodologias Ágeis Regional Scrum Gathering® Rio 2015  aconteceu nos dias 13, 14, e 15 de agosto em Copacabana, coração do Rio de Janeiro. Este evento Scrum Gathering é marca registrada da Scrum Alliance que ocorre em todo o mundo e no Brasil é realizado pela K21  empresa certificada para treinamentos SCRUM com grande experiência nessas metodologias que estão revolucionando a forma de gerir projetos e negócios. O evento demonstrou o interesse cada vez maior dos participantes pela aplicação destas metodologias nos negócios. Antigamente este evento era mais focado na gestão ágil para Desenvolvimento de Software mas agora toma outra dimensão.

 

 

Um pouco de história

O embrião destas metodologias ágeis surgiram na industria automotiva Japonesa, ou mais específicamente na Toyota como descreve Jeff Sutherland em seu livro Scrum: A Arte de Fazer o Dobro do Trabalho na Metade do Tempo. Jeff e seus colaboradores trouxeram estas ideias da Industria Automobilistica consolidando como metodologia ágil para a área de desenvolvimento de software. Mais recentemente Eric Ries aplicou estes conceitos para negócios e produtos como descrito no seu livro A Startup Enxuta (The Lean Startup)

O segredo do sucesso

O que está por trás do sucesso dessas metodologias é a eliminação do desperdício, o foco no cliente, o uso de métricas e experimentação, a colaboração e comprometimento nas equipes altamente integradas, a simplificação dos processos de gestão e o uso de ferramentas adequadas de TI.

Onde entra o Docker nisso ?

É neste ultimo item que entra o  Docker e a tecnologia de Contêineres. Esta tecnologia que iniciou com o suporte a LXC – Linux Containers, agora ganhou uma especificação independente de Sistema Operacional o que permitirá que a Microsoft lance em breve sua versão nativa de Docker (hoje ela roda numa mini maquina virtual Linux chamada Boot2Docker). O mesmo poderá ser feito no BSD, no Solaris, no MAC OSX e em outros sistemas num futuro próximo.

Enquanto isso podemos usar o a versão atual sem nenhum prejuizo já que o Docker roda 100% na maioria dos provedores de Cloud Computing e nos nossos Centros de processamento de Dados locais.

O Docker já é um EcoSistema de automação de Infraestrutura totalmente alinhado com os objetivos dos Processos Enxutos. Com ele podemos implementar nossa infraestrutura para Testes Automatizados, Integração Contínua, Entrega Contínua com a Escalabilidade e Resiliência desejada e exigida pelos negócios modernos baseados na WEB, no Comércio Eletrônico nas Apps Móveis com geolocalização e integração com mídias sociais.

A eliminação do desperdício é uma das grandes vantagens do Docker devido a sua arquitetura de imagem em camadas reutilizáveis. Enquanto uma máquina virtual leva minutos para levantar um serviço, no Docker isso pode levar alguns poucos segundos, graças a reusabilidade extrema de recursos.

A nivel de Arquitetura o Docker valoriza Micro Serviços permitindo integração completa e segura entre Contêineres.

Com isso o Docker pode ajudar a implementar os métodos ágeis incluindo Startup enxuta, Integração Contínua,  Testes Automatizados e Entrega Contínua num indice de produtividade excelente melhorando o Time-to-Market e ao mesmo tempo alcançando um melhor Retorno de Investimento.

Parabéns a equipe da K21 pelo evento e esperamos ansiosamente o próximo em 2016.

Para quem desejar se aprofundar no Docker pode solicitar um cupom de desconto para o curso neste link

Este é um curso on-line que preparei para a Escola Linux

 

Como Instalar o Docker no Windows e no MAC OSX

Neste post vou mostrar como instalar o Docker no Windows 7 e no MAC OSX Yosemite.

Neste video começo com a Instalação no Windows.

Aos 10 minutos e 22 segundos do Video eu começo a instalação no MAC OSX que dura menos de 7 minutos, bem mais rápido que no Windows.

Qualquer dúvida deixe um comentário abaixo que responderei com o maior prazer.



Matricule-se no curso para saber mais sobre esta tecnologia revolucionária
.

Matricule-se no curso para saber mais sobre esta tecnologia revolucionária

Se desejar um cupom de desconto, deixe um comentário que enviarei o link direto por e-mail.

Você pode também acessar a página do facebook no link abaixo:

https://www.facebook.com/joaoparanaweb

Interface Bridge no Boot2Docker

Configurando o Virtual BOX

É bastante util configurar uma placa de rede adicional no Virtual Box com interface Bridge.

Isso permite que o Docker obtenha um endereço IP do servidor DHCP disponivel na rede do seu computador Host (Windows ou MAC)

O problema é que a faixa de IP padrão usada pelo Virtual Box é 10.0.2.* e no caso de sua rede usar esta mesma faixa você deverá informar ao Virtual Box que ele deve usar outra faixa.

Para isso você deve usar o comando abaixo:

VBoxManage modifyvm "boot2docker-vm" --natnet1 "192.168.197.0/24"

Usei aqui a faixa 192.168.197. pois usualmente as redes WiFi já usam 192.168.1.

Rede Boot2Docker

Veja na imagem:

  1. Adaptador de rede usando NAT (Adapter 1) que foi modificado via comando VBoxManage modifyvm
  2. Adaptador de rede usando Bridge (Adapter 3)

Você pode fazer a mesma coisa para outras maquinas virtuais. Por exemplo, suponha uma maquina virtual com Windows 7 chamada Win7-64bits, voce pode executar o comando abaixo

VBoxManage modifyvm "Win7-64bits" --natnet1 "192.168.199.0/24"

Listando as Interfaces de rede você verá algo parecido com isto abaixo:

C:\Users\admin>ipconfig

Configuração de IP do Windows


Adaptador Ethernet Conexão local 2:

   Sufixo DNS específico de conexão. . . . . . : exemplo.com.br
   Endereço IPv4. . . . . . . .  . . . . . . . : 192.168.2.15
   Máscara de Sub-rede . . . . . . . . . . . . : 255.255.255.0
   Gateway Padrão. . . . . . . . . . . . . . . : 192.168.2.1

Adaptador Ethernet Conexão local:

   Sufixo DNS específico de conexão. . . . . . : exemplo.com.br
   Endereço IPv6 de link local . . . . . . . . : fe80::4592:a448:1ac2:d90c%11
   Endereço IPv4. . . . . . . .  . . . . . . . : 192.168.199.15
   Máscara de Sub-rede . . . . . . . . . . . . : 255.255.255.0
   Gateway Padrão. . . . . . . . . . . . . . . : 192.168.199.2

Adaptador de túnel isatap.exemplo.com.br:

   Estado da mídia. . . . . . . . . . . . . .  : mídia desconectada
   Sufixo DNS específico de conexão. . . . . . : exemplo.com.br

O endereço 192.168.199.15 foi obtido para a interface usando o NAT e o endereço 192.168.2.15 foi obtido pelo DHCP server da rede local do Host MAC OSX.

Rede Boot2Docker

Veja na imagem:

  1. Adaptador de rede usando NAT (Adapter 1) que foi modificado.
  2. Adaptador de rede usando Bridge (Adapter 2)

Imagens Docker – copy-on-write

O Docker usa uma técnica conhecida como copy-on-write quando cria suas imagens.

 

Escolhi apresentar a explicação de como isso funciona via um video devido a complexidade de apresentar isso por escrito.

 

Este video faz parte do curso Introdução ao Docker que estou desenvolvendo para a Linux Solutions.

 

 

 

Esta  característica é é que faz do Docker um produto tão especial. Ela permite criar Imagens em camadas de forma muito rápida e eficiente reusando camadas existentes em outras imagens já disponíveis no seu computador host.

 

Nesta animação mostro como funciona esse mecanismo considerando um computador Host com Ubuntu Server 64 bits versão 14.04

 

Neste computador você pode instalar uma versão 1.7 (ou superior) do Docker.

 

Quando criamos uma imagem e executamos um contêiner à partir dela, usando o comando mostrado no vídeo, o ambiente virtual do Docker adiciona ao contêiner uma camada com bootfs e em cima dela uma camada com debian, depois outra com apache e ao final uma com php.

 

Todas estas camadas são ead-only. Ao final o docker adiciona uma ultima camada read-write para acomodar as alterações no ambiente em run-time. Esta camada será a única que aceitará modificações e cada recurso alterado será copiado deixando o anterior (da camada read-only) escondido.

 

Esta técnica permite uma reusabilidade sem precedentes.

 

 

Veja o video para entender melhor. Procure ver em HD para melhor qualidade de imagem.

 

Obrigado por visitar meu site.