Aprendendo básico de docker
Tags: docker, devops, webdev, devsbrasileiros
Published: 2020-05-29 19:29:47

Sumário:

 - [Docker: O que é isso?](#docker-o-que-%C3%A9-isso)
 - [Mas por que usar Docker?](#mas-por-que-usar-docker)
 - [O que são containeres](#o-que-s%C3%A3o-containeres)
 - [O que são imagens](#o-que-s%C3%A3o-imagens)

## Docker: O que é isso?

Segundo nosso amigo [Wikipedia](https://pt.wikipedia.org/wiki/Docker_(software))..

> Docker é um software contêiner da empresa Docker, Inc, que fornece uma camada de abstração e automação para virtualização de sistema operacional no Windows e no Linux, usando isolamento de recurso do núcleo do Linux como cgroups e espaços de nomes do núcleo, e um sistema de arquivos com recursos de união, como OverlayFS criando contêineres independentes para executar dentro de uma única instância do sistema operacional, evitando a sobrecarga de manter máquinas virtuais (VM).

Bom, entendeu? Se sim, prossiga para outro [tópico](#mas-por-que-usasr-Docker), caso não continue conosco. :D

Vamos imaginar aqueles navios gigantes que transportam containeirs, então esse navio é o Docker, e se você prestar atenção no logo do Docker é um baleia que está carregando uns containers. Basicamente é isso, vamos ver por que usar que ficará mais claro o que é.

## Mas por que usar Docker?

Imagino que você tem seus projetos, na empresa que trabalhe ou projetos pessoais ou até como freelancer. 

Se você usa um mesmo SGBD(sistema de gerenciamento de banco de dados) para todos esses projetos, por exemplo o MySQL, imagino que ele deve ter muitos banco de dados e estes muitas tabelas, e podendo te confundir as vezes. Agora imagine você ter 10 projetos e 5 SGBD diferentes, ou instalados em sua máquina, não seria muito legal.

Nessa posição ou você remove a inicialização automatica, quando o PC liga, ou vai desligando-os ao ligar a máquina. Mas se você usa o SGBD em um docker, não precisa se preocupar em ficar ligando e desligando os SGBD.

Basta criarmos um container com um SGBD de preferência e usarmos quando precisar ou melhor ainda, criar um container com SGBD para cada projeto que tiver.

Ou, até mesmo na linguagem que queria, ou um sistema operacional para testes, para ficar "dando" comandos aleatórios para aprender, e não acabar fazendo besteira em sua própria máquina.

Ah, Lukas é só eu usar uma Máquina Virtual(VM), e está tudo certo.

Será?? Vamos ver o que é um container.

## O que são containeres

Bom agora nossa missão é entender o por que um container não é uma VM, e é mais vantagoso.

Como disse antes, podemos usar linguagens e SGBD diferentes em containers, imagine isso em duas máquinas virtuais, uma a linguagem de programação e outra SGBD?

Bem provável que haveria uma sobrecarga muito alta no seu pc, a não ser que tenha uma máquina `top`, mas vamos combinar, nem todos tem uma dessas máquinas. Então ai entra o Docker e seus containers para facilitar nossas vidas.

O container compartilha do seu próprio Sistema Operacional, se tem um Linux ou outro SO, os containers usaram o seu SO, logo menos sobrecarga em sua pobre máquina.

![Docker vs VM](https://www.weave.works/assets/images/bltb6200bc085503718/containers-vs-virtual-machines.jpg)

Mas como montar esses containeres, então entram as imagens?

## O que são imagens

Imagens é o que irá formar um containeres, como estamos mais acostumado com VM, vamos imagina que queremos uma máquina ubuntu, para digitar alguns comandos no terminal. Vamos ver o quanto rápido é.

#### 1º Realizar cadastro no [DockerHub](https://hub.docker.com/)

#### 2º Instalar na máquina

Não entrarei nesse tópico, mas posso fazer um. Mas só pesquisar na internet, é bem fácil a instalação. Continue aqui e depois instale.

#### 3º Baixando a imagem ubuntu

```
docker pull ubuntu
```

`output`
```
Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete 
fc878cd0a91c: Pull complete 
6154df8ff988: Pull complete 
fee5db0ff82f: Pull complete 
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
```

#### 4º Executando o ubuntu

```
docker run -it ubuntu
```

-i e -t é a combinação para ter acesso ao shell do container

```
root@f287473a2f95:/# 
```

Pronto! Temos um máquina ubuntu. Caso queira ter um SGBD, ou uma liguangem de programação, basta entrar no [DockerHub](https://hub.docker.com/) e pesquisar a image que desejar. 

Para sair do container digite: `exit`

Este [repositorio](https://github.com/docker/awesome-compose) tem alguns projetos começados com docker. Caso não tenha sua Stack, só enviar um PR. :)