# Básico de Docker
## Instalação em Linux (Distros baseadas em Ubuntu/Debian)
```
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh
```
Para testar se a instalação deu certo, digite o seguinte comando:
```
docker run hello-world
```
Se tudo estver ok, é para aparecer o seguinte no seu terminal:
> Hello from Docker!
This message shows that your installation appears to be working correctly.
## Comandos docker
1. run
2. ps/ps -a
3. start/stop/pause/unpause
4. exec
5. build
6. push/pull
### run
O comando `docker run` é utilizado para criar e executar um container a partir de uma imagem. Por exemplo:
```
docker run -it ubuntu
```
Esse comando irá criar um container a partir de uma imagem do Ubuntu e executará um shell interativo (devido à flag "-it"). Se quisermos sair do shell interativo sem finalizar o container, digitamos: `CTRL+P+Q`
### ps/ps -a
Quando executamos o comando `docker ps` conseguimos ter uma lista dos containers ativos. Já `docker ps -a` nos dá a lista de todos os containers.
Por exemplo, após executar o comando mostrado na parte do *run*, se executarmos `docker ps`, teremos a seguinte lista:
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f63da183dab ubuntu "/bin/bash" 28 seconds ago Up 2 seconds upbeat_lalande
### start/stop/pause/unpause
Se quisermos pausar a execução desse container, utilizamos o comando `docker pause <id do container>`, no caso `docker pause 4f63da183dab`.
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f63da183dab ubuntu "/bin/bash" 5 minutes ago Up 5 minutes (Paused) upbeat_lalande
Para despausar, é só utilizar `docker unpause <id do container>`.
Agora, se quisermos desativar esse container, utilizamos o comando `docker stop <id do container>`.
Executando `docker ps`, vemos que agora o container com a imagem do Ubuntu não está mais ativo. Para vermos esse container, digitamos `docker ps -a`.
Após verificar esse container na lista do `docker ps -a`, podemos ativá-lo novamente com o comando `docker start <id do container>`.
A diferença dos comandos `docker run` e `docker start` é que o *run* cria e executa um novo container a partir de uma imagem e o *start* apenas executa um container já existente.
### exec
Se quisermos executar algum comando shell (por exemplo, `ls`) de fora do container com o Ubuntu, podemos digitar o seguinte:
```
docker exec 4f63da183dab ls
```
### build
O comando `docker build` é usado para criar uma imagem Docker a partir de um conjunto de instruções contidas em um arquivo chamado Dockerfile.
Por exemplo, se quisermos fazer o build de uma aplicação básica em Angular e tivermos o Dockerfile abaixo, digitaremos o seguinte comando: `docker build -t nome_da_imagem:tag_exemplo .`
<figure>
<img src="https://hackmd.io/_uploads/ryXdCBGU6.png" alt="Conteúdo do Dockerfile">
<figcaption>Conteúdo do Dockerfile</figcaption>
</figure>
<figure>
<img src="https://hackmd.io/_uploads/BkXdASGUp.png" alt="Conteúdo do arquivo nginx.conf">
<figcaption>Conteúdo do arquivo nginx.conf</figcaption>
</figure>
### push/pull
Primeiramente, criaremos realizaremos o login no docker por meio do comando `docker login`. Depois disso, se quisermos fazer o push da nossa imagem que foi criada pelo comando `docker build`, utilizamos o seguinte comando:
```
docker push nome_do_registro/nome_da_imagem:tag
```
Nome do registro seria o *username_dockerhub*, por exemplo, *devmatsouza*.
Já o `docker pull` tem o intuito de baixar essa imagem que está armazenada no Docker Hub. Para baixar alguma imagem do Docker Hub, utilizamos o seguinte comando:
```
docker pull nome_do_registro/nome_da_imagem:tag
```
Considerando que eu tenho uma imagem *calculator-app:v1.0*, eu poderia baixar essa imagem atráves do seguinte comando:
```
docker pull devmatsouza/calculator-app:v1.0
```
### Observações
Para rodar um container, por exemplo um servidor Nginx, em segundo plano (modo *daemon*), podemos utilzar o seguinte comando:
```
docker run -d nginx
```
Se quisermos executar um shell interativo para esse container em segundo plano, utilizamos o seguinte comando:
```
docker exec -it <id do container> bash
```
Para sair desse container sem desativá-lo, utilizamos o comando `CTRL+P+Q`.
Além disso, podemos rodar o nginx realizando um *port binding*, de modo que o que estiver nesse container será exposto para um determinada porta que setarmos. Por exemplo:
```
docker run -d -p 9500:80 nginx
```
Ao colocarmos localhost:9500 no navegador da nossa máquina, veremos a mensagem padrão do nginx.