# 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.