{"id":926,"date":"2020-09-22T21:13:02","date_gmt":"2020-09-22T21:13:02","guid":{"rendered":"https:\/\/4linux.com.br\/?page_id=926"},"modified":"2023-10-10T20:54:54","modified_gmt":"2023-10-10T20:54:54","slug":"primeiro-passos-container-docker","status":"publish","type":"page","link":"https:\/\/4linux.com.br\/primeiro-passos-container-docker\/","title":{"rendered":"Primeiros passos instalar container docker"},"content":{"rendered":"\n
Se voc\u00ea chegou at\u00e9 aqui, j\u00e1 deve ter lido o artigo \u2018O que \u00e9 docker\u2019<\/a> e se ainda n\u00e3o o fez, recomendamos a leitura antes de prosseguir.<\/p>\n\n\n\n Apesar do termo container ter se popularizado nos dias de hoje com a ferramenta Docker<\/a>, o conceito j\u00e1 era empregado com utiliza\u00e7\u00f5es de containers Linux e muitos casos de containers Java (JVM) principalmente para aplica\u00e7\u00f5es web, como utilizado nas plataformas JBoss e Wildfly<\/a>.<\/p>\n\n\n\n Originalmente o Docker surgiu em 2013 quando Solomon Hykes, fundador e CEO da dotCloud, realizou uma palestra na \u2018Python Developers Conference\u2019 em Santa Clara, Calif\u00f3rnia. Poucas semanas ap\u00f3s isso rapidamente o projeto se tornou open source e atrav\u00e9s do Github teve contribui\u00e7\u00f5es de centenas de desenvolvedores que ajudaram a melhorar e disseminar a tecnologia que foi disruptiva para o mercado de TI mudando a forma de como as aplica\u00e7\u00f5es s\u00e3o disponibilizadas, dando praticidade, portabilidade e agilidade.<\/p>\n\n\n\n Inicialmente \u00e9 muito comum que o conceito do Docker seja confundido com o de m\u00e1quinas virtuais devido \u00e0 cultura e metodologia de trabalho utilizada durante anos, por\u00e9m o Docker \u00e9 muito mais que um provisionamento virtual e com proposta bem diferente. Enquanto uma m\u00e1quina virtual \u00e9 feita para perdurar durante um bom tempo, mesmo que a fluidez de provisionamento seja r\u00e1pido e que se utilize de plataformas em cloud para criar e deletar m\u00e1quinas, o container Docker j\u00e1 nasce com o prop\u00f3sito de ser substitu\u00edvel em um certo momento, em um novo deploy ou at\u00e9 mesmo em minutos ap\u00f3s a execu\u00e7\u00e3o de uma \u00fanica tarefa.<\/p>\n\n\n\n Justamente essa volatilidade do container o faz eficaz, pois com o Docker voc\u00ea n\u00e3o precisa se preocupar com bibliotecas do sistema operacional, drivers, parti\u00e7\u00f5es e etc, o Docker possui um reposit\u00f3rio de imagens p\u00fablicas em cloud, o DockerHub, em que \u00e9 poss\u00edvel criar um container quase que instantaneamente atrav\u00e9s do comando \u201cdocker run\u201d e dizendo qual imagem Docker este container deve utilizar para realizar o setup.<\/p>\n\n\n\n Existem diversas imagens enxutas desde sistemas operacionais contento somente o m\u00ednimo necess\u00e1rio para uma aplica\u00e7\u00e3o ser executada, at\u00e9 imagens com servi\u00e7os j\u00e1 instalados para serem utilizados como o caso da imagem \u201chttpd:2.4\u201d que traz um sistema operacional Linux Alpine com o servi\u00e7o Apache HTTP instalado.<\/p>\n\n\n\n Este tipo de funcionalidade traz fluidez e agilidade para os processos de deploy, por\u00e9m deve ser levado em considera\u00e7\u00e3o que aplica\u00e7\u00f5es que ser\u00e3o aplicadas em containers j\u00e1 devem ser estruturadas com o conceito \u201cstateless\u201d, que n\u00e3o guarda o estado da aplica\u00e7\u00e3o e nem dados dentro do container, pois caso contr\u00e1rio inviabilizaria uma das principais vantagens da utiliza\u00e7\u00e3o do Docker que \u00e9 a versatilidade para de se encerrar o container em caso de problemas ou novas atualiza\u00e7\u00f5es na aplica\u00e7\u00e3o.<\/p>\n\n\n\n O primeiro passo para a utiliza\u00e7\u00e3o \u00e9 realizarmos a instala\u00e7\u00e3o do Docker, para a demonstra\u00e7\u00e3o ser\u00e3o utilizados exemplos para o sistema operacional Linux (Ubuntu\/Debian).<\/p>\n\n\n\n Antes de iniciar a instala\u00e7\u00e3o, certifique-se de ter permiss\u00e3o de super usu\u00e1rio, ser\u00e1 necess\u00e1rio adicionar o reposit\u00f3rio do Docker em seu sistema operacional para realizar o download do pacote, para isso execute a sequ\u00eancia de comandos a seguir:<\/p>\n\n\n\n Agora sim podemos iniciar a instala\u00e7\u00e3o do Docker, siga os passos:<\/p>\n\n\n\n Nesta etapa faremos o build de uma aplica\u00e7\u00e3o para gerar uma imagem de container que ser\u00e1 executada posteriormente para simularmos um deploy. Para isso utilizaremos um componente do Docker chamado Dockerfile, um arquivo de configura\u00e7\u00e3o que ir\u00e1 nos auxiliar no build, contendo informa\u00e7\u00f5es como: imagem de refer\u00eancia, arquivos e serem copiados e pacotes adicionais para depend\u00eancias da aplica\u00e7\u00e3o para a constru\u00e7\u00e3o da imagem do container.<\/p>\n\n\n\n Siga os passos abaixo:<\/p>\n\n\n\n 4. Criaremos agora o arquivo de nossa aplica\u00e7\u00e3o Python, assim continuando no mesmo diret\u00f3rio criaremos um arquivo com o nome de app.py e vamos inserir novamente ao mesmo tempo o seu conte\u00fado, assim digite na linha de comando o que est\u00e1 abaixo:<\/p>\n\n\n\n Aten\u00e7\u00e3o para a indenta\u00e7\u00e3o do c\u00f3digo!<\/p>\n<\/blockquote>\n\n\n\n Para verificar as imagens criadas no Docker voc\u00ea pode executar o comando:<\/p>\n\n\n\n Agora veremos como iniciar a aplica\u00e7\u00e3o constru\u00edda sendo executada dentro de um container Docker, atrav\u00e9s da imagem gerada no build:<\/p>\n\n\n\n Tente acessar no seu browser a url http:\/\/localhost\/<\/a> voc\u00ea dever\u00e1 visualizar algo parecido com a imagem abaixo:<\/p>\n\n\n\nAprenda a criar seu primeiro container Docker<\/strong><\/h2>\n\n\n\n
Surgimento do Docker<\/strong><\/h2>\n\n\n\n
Benef\u00edcios do Docker<\/strong><\/h2>\n\n\n\n
Exemplos de implanta\u00e7\u00e3o do Docker<\/strong><\/h2>\n\n\n\n
Pr\u00e9-Requisitos:<\/strong><\/h3>\n\n\n\n
\n
$ sudo apt-get update<\/code><\/pre>\n\n\n\n
\n
$ sudo apt-get install \\<\/code>\n
apt-transport-https \\<\/code>\n
ca-certificates \\<\/code>\n
curl \\<\/code>\n
gnupg-agent \\<\/code>\n
software-properties-common<\/code><\/pre>\n\n\n\n
\n
$ curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo apt-key add -<\/code><\/pre>\n\n\n\n
\n
sudo add-apt-repository \\<\/code>\n
\"deb [arch=amd64] https:\/\/download.docker.com\/linux\/ubuntu \\<\/code>\n
$(lsb_release -cs) \\<\/code>\n
stable\"<\/code><\/pre>\n\n\n\n
Instala\u00e7\u00e3o:<\/strong><\/h2>\n\n\n\n
\n
$ sudo apt-get update<\/code><\/pre>\n\n\n\n
\n
$ sudo apt-get install docker-ce docker-ce-cli containerd.io<\/code><\/pre>\n\n\n\n
Build da imagem:<\/strong><\/h2>\n\n\n\n
\n
mkdir docker-lab ; cd docker-lab<\/code><\/pre>\n\n\n\n
\n
cat << EOF > Dockerfile<\/code>\n
# Imagem de refer\u00eancia Python<\/code>\n
FROM python:3.7-slim<\/code>\n\n
# Selecionando o diret\u00f3rio do container para a execu\u00e7\u00e3o dos comandos a seguir<\/code>\n
WORKDIR \/app<\/code>\n\n
# Copiando o conte\u00fado do diret\u00f3rio que <\/code>
foi criado,<\/code>
para dentro do diret\u00f3rio do container<\/code>\n
COPY . \/app<\/code>\n\n
# Instalando pacotes adicionais informados no arquivo requisitos.txt<\/code>\n
RUN pip install --trusted-host pypi.python.org -r requisitos.txt<\/code>\n\n
# Habilitando a porta 80 do container para receber conex\u00f5es externas<\/code>\n
EXPOSE 80<\/code>\n\n
# Definindo vari\u00e1vel de ambiente<\/code>\n
ENV NAME World<\/code>\n\n
# Executando aplica\u00e7\u00e3o Python ap\u00f3s inicializa\u00e7\u00e3o do container<\/code>\n
CMD [\"python\", \"app.py\"]<\/code>\n
EOF<\/code><\/pre>\n\n\n\n
\n
echo Flask > requisitos.txt<\/code><\/pre>\n\n\n\n
cat << EOF > app.py<\/code>\n
from flask import Flask<\/code>\n
import os<\/code>\n
import socket<\/code>\n\n
app = Flask(__name__)<\/code>\n\n
@app.route(\"\/\")<\/code>\n
def hello():<\/code>\n
html = \"<h3>Hello {name}!<\/h3>\" \\<\/code>\n
\"<b>Hostname:<\/b> {hostname}<br\/>\"<\/code>\n
return html.format(name=os.getenv(\"NAME\", \"world\"), hostname=socket.gethostname())<\/code>\n\n
if __name__ == \"__main__\":<\/code>\n
app.run(host='0.0.0.0', port=80)<\/code>\n
EOF<\/code><\/pre>\n\n\n\n
\n
\n
sudo docker build --tag=testpy .<\/code><\/pre>\n\n\n\n
sudo docker image ls<\/code><\/pre>\n\n\n\n
Deploy do container:<\/strong><\/h2>\n\n\n\n
\n
docker run -d -p 80:80 testpy<\/code><\/pre>\n\n\n\n