docker ps
docker ps -a
docker run hello-world
- -it: são parâmetros que poderiam ser passados separadamente. (-i -t), sendo eles:
- -i: modo interativo, ou seja, irá manter o stdin ativo em seu terminal. Basicamente mantém seu terminal local conectado com o bash do cotainer.
- -t: significa TTY, o que permite executar comandos no terminal.
- ubuntu: nome da imagem que será baixada do Image Registry.
- bash: é o comando que será executado dentro do container, que neste caso serve para abrir iniciar o bash.
docker run -it ubuntu bash
- --rm: remove o container quando o processo Ă© encerrado.
docker run -it --rm ubuntu bash
docker start [container_id ou container_name]
docker stop [container_id ou container_name]
Suponha que você queira subir um container com NGINX, que por default expõe a porta 80. Para acessar a porta 80 do NGINX, é necessário fazer um redirecionamento da porta do Docker Host (no caso pode ser sua máquina) para a porta do container.
- -p: indica que será realizado um redirecionamento de portas.
- 8080: indica qual porta do Docker Host será redirecionada.
- 80: indica para qual porta será feito o redirecionamento, quando for realizado um acesso na porta do Docker Host (8080).
- nginx: nome da imagem.
docker run -p 8080:80 nginx
- -d: executar o container em modo Detached, para não prender o terminal e manter a execução do container em background.
docker run -d -p 8080:80 nginx
docker rm [container_id ou container_name]
docker rm [container_id ou container_name] -f
- -a lista todos os containers ativos e inativos
- -q retorna os IDs dos containers selecionados
- -f força a remoção caso algum dos containers estejam ativos
docker rm $(docker ps -a -q) -f
No exemplo abaixo, acessamos o container chamado "nginx" e executamos o comando "ls".
docker exec nginx ls
Para executar o bash e manter o terminal "alive", Ă© preciso adicionar as flags abaixo:
docker exec -it nginx bash
- Criará um container Nginx, mapeando a porta 8080 do Docker Host para a porta 80 do Nginx.
- Irá realizar um bind mount da pasta "[diretorio-local]/html" para o diretório /usr/share/nginx/html dentro do container Nginx. Todos os arquivos criados localmente serão refletidos para dentro do container.
- $(pwd) - é o path que o usuário está localizado.
docker run -d --name nginx -p 8080:80 --mount type=bind,source="$(pwd)"/html,target=/usr/share/nginx/html nginx
TambĂ©m Ă© possĂvel utilizar uma sintaxe mais antiga, anterior ao --mount, que Ă© a flag -v. Veja o exemplo abaixo:
docker run -d --rm -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx
docker volume ls
docker volume create my-volume
Mountpoint: local onde ficam gravados os arquivos dentro de sua máquina (ex: /var/lib/docker/volumes/my-volume/_data).
docker volume inspect my-volume
Dessa maneira, será possĂvel criar diversos containers (nginx1, nginx2, nginx3) compartilhando um Ăşnico volume (source). Ou seja, arquivos criados em qualquer um dos containers estarĂŁo compartilhados entre eles. Os arquivos do volume serĂŁo criados dentro da pasta app no container.
docker run --name nginx -d --mount type=volume,source=my-volume,target=/app nginx
É possĂvel criar um container utilizando a flag -v ao invĂ©s de --mount. Veja abaixo:
docker run --name nginx3 -d -v my-volume:/app nginx
É possĂvel que sua máquina fique com o armazenamento cheio por conta de volumes do Docker. Para limpar estes arquivos, execute o comando abaixo:
docker volume prune
docker images
Baixará a imagem mais recente do Ubuntu.
docker pull ubuntu
Baixará a imagem do PHP com a tag rc-alpine
docker pull php:rc-alpine
docker rmi php:rc-alpine
- O parâmetro eduardo3g da flag -t (tag) é o usuário do Docker Hub (Registry). Esta é uma boa prática para criar imagems.
- O "." no final do comando é o diretório em que o Dockerfile está presente. Caso o comando seja executado no mesmo diretório, utiliza-se um ".".
docker build -t eduardo3/nginx-with-vim:latest .
Para acessar o container o qual o build foi feito a partir da imagem recém-criada, basta utilizar o comando:
docker run -it eduardo3/nginx-with-vim bash
O principal uso de network é permitir que um container se comunique com o outro. Imagine que você tenha dois containers, um executando Node.js e outro Laravel (PHP). Para que um comunique-se com o outro, é necessária uma network.
- Bridge (tipo de rede default): utulizada para um container comunicar-se com o outro.
-
- Host: mescla a rede do Dcker com a rede do Docker Host (sua máquina por exemplo). Imagine que você tenha uma aplicação PHP rodando no Docker Host através da porta 80.
Caso vocĂŞ suba um container Docker na mesma rede (tipo "host") do Docker Host, será possĂvel realizar a comunicação entre a aplicação PHP no Docker Host com a aplicação no container do Docker. Essa comunicação será feita diretamente, sem ser necessário realizar o mapeamento de portas (-p).
- Host: mescla a rede do Dcker com a rede do Docker Host (sua máquina por exemplo). Imagine que você tenha uma aplicação PHP rodando no Docker Host através da porta 80.
- Overlay: é utilizado para realizar comunicação de Docker Hosts diferentes.
- None: quando não há nenhuma rede e o container irá ser exetuado de forma isolada.
docker network ls
docker network prune
Neste exemplo, será possĂvel inspecionar dados da rede chamada "bridge".
docker network inspect bridge
Criará uma network do tipo "bridge" chamada "mynetwork".
docker network create --driver bridge mynetwork
No exemplo abaixo seĹ•a criado um container chamado "ubuntu1" na rede "mynetwork" do tipo bridge. Caso sejam criados mais containers na mesma rede (ex: ubuntu2, ubuntu3, etc.), seĹ•a possĂvel realizar um ping pelo nome dos containers. Por exemplo, dentro de ubuntu1 será possĂvel executar o comando "ping ubuntu2".
docker run -d -it --name ubuntu1 --network mynetwork bash
Neste exemplo, será possĂvel conectar o container chamado "ubuntu3" dentro da rede chamada "mynetwork".
docker network connect mynetwork ubuntu3
No exemplo abaixo, a rede do container será "mesclada" com a rede do Docker Host. Sendo assim, será possĂvel acessar o localhost (port 80 por default) e carregar o nginx.
IMPORTANTE: esta funcionalidade nĂŁo funciona no Mac OS. Caso esteja utilizando Windows, Ă© possĂvel via WSL2. Esta funcionalidade nĂŁo possui limitações no linux.
docker run --rm -d --name nginx --network host nginx
Instalar o PHP na versĂŁo 7.4 e executar o bash do container.
docker run -it --name php php:7.4-cli bash
Executar os seguintes comandos dentro do bash:
apt-get update
Será também necessário instalar o Composer, que é o gerenciador de pacotes (semelhante ao NPM) do PHP. Veja os passos aqui.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Instalar o libzip-dev para que não seja necessário obter um token no Git ao instalar o
apt-get install libzip-dev -y
Feito isso, instalar a extensĂŁo ZIP do PHP.
docker-php-ext-install zip
Finalmente conseguiremos criar um projeto Laravel (diretĂłrio /var/www) chamado "laravel-example".
php composer.phar create-project --prefer-dist laravel/laravel laravel-example