Pesquisar aqui

Mostrar mensagens com a etiqueta shell. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta shell. Mostrar todas as mensagens

segunda-feira, 16 de novembro de 2020

[IDS] Docker: Dockerfile, imagem, distribuição, container e registry

Dockerfile reference

Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.

USAGE

The docker build command builds an image from a Dockerfile and a context. The build’s context is the set of files at a specified location PATH or URL. The PATH is a directory on your local filesystem. The URL is a Git repository location.

A context is processed recursively. So, a PATH includes any subdirectories and the URL includes the repository and its submodules. This example shows a build command that uses the current directory as context:

docker build --tag nomedaimagem:tag .

No directório com o trabalho apresentado em "[IDS] Estrutura do ambiente de desenvolvimento: rplotter", é criado o Dockerfile com o editor VIM:

vim Dockerfile

FROM alpine:3.7
MAINTAINER Guilherme Marcello
LABEL description="Imagem com os exemplos dos artigos do Blogger"
WORKDIR aib/
WORKDIR blogger/
COPY . . 

Para gravar o ficheiro :x

home@marcello:~$ ls
development Dockerfile

Fazemos a build da imagem com o nome aib2021marcello/blogger e a tag rplotter:

home@marcello:~$ docker build --tag aib2021marcello/blogger:rplotter .
...
...
Successfully built 80d3e5712bee
Successfully tagged aib2021marcello/blogger:rplotter

Perfeito! A nossa imagem foi criada e tem o id 80d3e5712bee! Para verificar as imagens que existem localmente usamos o seguinte comando:
 
home@marcello:~$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
aib2021marcello/blogger   rplotter            80d3e5712bee        0 minutes ago      4.21MB
alpine                    3.7                 6d1ef012b567        20 months ago       4.21MB

Sim, criamos uma "distribuição" do alpine linux personalizada com um tamanho de 4.21MB para os projectos no blogger de AIB!
Para corrermos a "distribuição" em container com o nome primeirocontainer e de forma interativa (iniciamos uma sessão em shell do container) usamos o comando:
 
home@marcello:~$ docker run --name primeirocontainer -it aib2021marcello/blogger:rplotter
/aib/blogger$ ls
Dockerfile   development
/aib/blogger$ exit
home@marcello:~$

 O que isso significa? QUALQUER pessoa com a imagem que fizemos vai ter o mesmo sistema a correr!
 E então...? QUALQUER pessoa com a imagem vai ter o mesmo ambiente, com as mesmas definições!
 Sim...e? QUALQUER pessoa com a imagem vai correr os projectos da MESMA forma!

 Problemas do tipo "preciso da versão X do java para compilar e fazer a build do projecto da empresa YYY...que chatice!" deixam de existir e assim temos maior agilidade no desenvolvimento, debug e deploy! 

 Mas tenho a minha imagem gravada localmente, como alguém pode descarregar a minha imagem e correr um container? Fazemos um push para um registry no Docker Hub, por exemplo. No Docker Hub criei uma conta com o username aib2021marcello e criei um repositório público (qualquer pessoa com docker pode fazer pull da minha imagem) com o nome blogger (sim, o mesmo nome da imagem que fizemos, aib2021marcello/blogger). Assim, podemos fazer o push da nossa imagem para o Docker Hub! 
    1. Primeiro é preciso fazer o login (autenticação) com a nossa conta do Docker Hub (com as mesmas credenciais):

home@marcello:~$ docker login
...
...
Login Succeeded

    2. Depois fazemos o push da nossa imagem:

home@marcello:~$ docker push aib2021marcello/blogger:rplotter

    3. Verificar se a imagem está no Docker Hub:

    4. Fazer pull da imagem no registry (poderia ser feito em qualquer computador com docker, sem precisar da autenticação, uma vez que o repositório é público):

home@marcello:~$ docker pull aib2021marcello/blogger:rplotter

    5. Começar a dockerizar o que quiser!

domingo, 1 de novembro de 2020

[IDS] Side projects: Cariogamia

    Nunca gostei de "não" fazer nada quando não estava a estudar, então sempre "inventava" um trabalho ou projecto para desenvolver relacionado ou não com a escola. Uma vez, para estudar os processos e conceitos que conduzem à formação de organismos embrionários humanos (replicação semi-conservativa, cilco de vida diplonte, cariogamia, reprodução sexuada, fecundação, meiose reducional e equacional) desenvolvi um programa simples que gerava, de forma aleatória, os cromossomas parentais e atribuía o valor -1,0 ou 1 para constituinte do par, de modo a criar os oitos gâmetas, escolher dois, criar o cariótipo do organismo resultante e exportar o ficheiro .CSV com as características. O importante era estudar a formação de gâmetas e estudar estruturas de dados que podiam solucionar os problemas que encontrava.
    Uma vez, alguém que respeito muito, perguntou qual tinha sido o meu melhor e mais desafiante projecto e eu, incapaz de escolher, enumerei os meus "side projects" por ordem cronológica. Ainda que não soubesse responder, tinha alguma coisa para responder! Provavelmente se não tivesse alguma resposta não teriam feito a pergunta! :)

"I don't care that they stole my idea... I care that they don't have any of their own" - Nikola Tesla

Para alguém que está perdido, pode ser útil pesquisar ideias de projectos... (ver https://www.codementor.io/@npostolovski/40-side-project-ideas-for-software-engineers-g8xckyxef)  ainda que para mim todo bom projecto inicia com uma abstração motivada pela mente, sem razões ou obrigatoriedades externas. 

Um exemplo do ficheiro .CSV exportado:

,Número do par de cromossomas,Características,Atributos
0,1,Alzheimer,"[[1], [0]]"
1,2,Cancro Colorretal,"[[1], [0]]"
2,5,Asma,"[[1], [-1]]"
3,11,Albinismo,"[[0], [1]]"
4,13,Cancro de Mama,"[[0], [0]]"
5,14,Alzheimer,"[[0], [-1]]"
6,15,Albinismo e Olhos Castanhos/Azuis,"[[-1, 1], [0, 1]]"
7,16,Cancro Colorretal e Cerrume e Pigmentação da pele,"[[1, 0, -1], [-1, 0, 0]]"
8,19,Alzheimer e Olhos Verdes,"[[1, 0], [1, -1]]"
9,20,Altura,"[[0], [1]]"
10,21,Alzheimer,"[[0], [1]]"
11,22,Transtorno Bipolar,"[[1], [1]]"
12,23,Cromossomas Sexuais,"['Y', 'X']"