Code Monkey home page Code Monkey logo

docker's Introduction

Docker

Aprendendo Docker

Máquina utilizada uname -a: Linux Ubuntu 16.04 X86_64

Atualizando o sistema

apt -y update
apt list --upgradable
apt list upgrade

Instalando o Docker

Ubuntu

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
apt -y update
apt-cache policy docker-engine
apt install -y docker-engine

Mint

apt remove docker docker-engine docker.io containerd run
apt-get update
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt-get update
apt-get -y  install docker-ce docker-ce-cli containerd.io

Verificando se está inicializado

/etc/init.d/docker status

Caso não esteja

/etc/init.d/docker start
/etc/init.d/docker status

Executando o Comando Docker sem Sudo

sudo usermod -aG docker $(whoami)

Verificando informações da versão do Docker docker info

Trabalhando com Imagens do Docker

docker run hello-world
docker search ubuntu
docker pull ubuntu
docker run ubuntu
docker run --ti --name teste debian
docker images

Executando um Contêiner Docker

docker run -it ubuntu

Dentro do Container: apt-get update

Comandos Docker

Segue a lista de comandos docker e sua utilidade:

CTRL + P + Q – Sai do container sem finalizar ele.

docker attach – Acessar dentro do container e trabalhar a partir dele.

docker build – A partir de instruções de um arquivo Dockerfile eu possa criar uma imagem.

docker commit – Cria uma imagem a partir de um container.

docker cp – Copia arquivos ou diretórios do container para o host.

docker create – Cria um novo container.

docker diff – Exibe as alterações feitas no filesystem do container.

docker events – Exibe os eventos do container em tempo real.

docker exec – Executa uma instrução dentro do container que está rodando sem precisar atachar nele.

docker export – Exporta um container para um arquivo .tar.

docker history– Exibe o histórico de comandos que foram executados dentro do container.

docker images – Lista as imagens disponíveis no host.

docker import – Importa uma imagem .tar para o host.

docker info – Exibe as informações sobre o host.

docker inspect– Exibe r o json com todas as configurações do container.

docker kill – Da Poweroff no container.

docker load – Carrega a imagem de um arquivo .tar.

docker login – Registra ou faz o login em um servidor de registry.

docker logout – Faz o logout de um servidor de registry.

docker logs – Exibe os logs de um container.

docker port – Abre uma porta do host e do container.

docker network– Gerenciamento das redes do Docker.

docker node – Gerenciamento dos nodes do Docker Swarm.

docker pause – Pausa o container.

docker port – Lista as portas mapeadas de um container.

docker ps – Lista todos os containers.

docker pull – Faz o pull de uma imagem a partir de um servidor de registry.

docker push – Faz o push de uma imagem a partir de um servidor de registry.

docker rename – Renomeia um container existente.

docker restart– Restarta um container que está rodando ou parado.

docker rm – Remove um ou mais containeres.

docker rmi – Remove uma ou mais imagens.

docker run – Executa um comando em um novo container.

docker save – Salva a imagem em um arquivo .tar.

docker search – Procura por uma imagem no Docker Hub.

docker service– Gernciamento dos serviços do Docker.

docker start – Inicia um container que esteja parado.

docker stats – Exibe informações de uso de CPU, memória e rede.

docker stop – Para um container que esteja rodando.

docker swarm – Clusterização das aplicações em uma orquestração de várias containers, aplicações junto.

docker tag – Coloca tag em uma imagem para o repositorio.

docker top – Exibe os processos rodando em um container.

docker unpause– Inicia um container que está em pause.

docker update – Atualiza a configuração de um ou mais containers.

docker version– Exibe as versões de API, Client e Server do host.

docker volume – Gerenciamento dos volumes no Docker.

docker wait – Aguarda o retorno da execução de um container para iniciar esse container.

docker ps -a – Mostra todos os containers.

docker ps -q – Mostra todos os ids dos containers em execução.

docker ps -aq – Mostra todos os ids dos containers.

docker stop $(docker ps -a -q)– Para todas os containers rodando.

docker rm $(docker ps -a -q)– Remove todas as instâncias.

docker image rm $(docker image ls -a -q)– Para todas as imagens.

Exportando Imagens Docker

docker commit -m "What did you do to the image" -a "Author Name" id-do-contêiner repositório/nome_da_nova_imagem

Verificando Imagens e Containers:

docker images
docker ps

Verificando apenas containers ativos e os ultimos containers utilizados:

docker ps -a #active
docker ps -l #last

Limitando Memória e CPU do Container

free -m – Verificando memória do host.

Limitando mem. 512, compartilhando CPU total (1024)

docker run -ti --memoryy 512m --name NameContainer debian
docker run -ti --cpu-shares 1024 --name NameContainer debian

Mesmo permitindo a utilização de X% da CPU, o container apenas utiliza conforme a demanda.

Inspecionando container | inspecionando apenas memória do container.

docker inspect ID | grep -i mem
docker inspection NameContainer

Alterando containers já existente (Durante execução)

docker update --help 
docker update --cpu-shares 502 NameContainer
docker update -m 256m ID or NameContainer

Compartilhando Volume e Container data-only (Somente dados)

docker run -ti -v /volume ubuntu /bin/bash
df -h
cd volume/
docker inspect -f {{.Mounts}} ubuntu

Um exemplo de um container rodando um banco de dados postgre docker run -d -p 5433:5432 --name pgsql2 --volumes-from dbdados -e POSTGRESQL_USER=docker -e POSTGRESQL_PASS=docker -e POSTGRESQL_DB=docker kamui/postgresql

-p – Porta do host. --volumes-from – Importar volume de outro container. -e – Variável de ambiente.

Dockerfile

Criando e entendendo arquivos Dockerfile

vim dockerfile

FROM debian
RUN /bin/echo "Teste gooo"

vim dockerfile

FROM debian
MAINTAINER Eduardo Henrique [email protected]

RUN apt-get -y update && apt-get -y install apache2 && apt-get clean
ADD opa.txt /diretorio/
CMD ["sh","-c", "echo", "$HOME"]
LABEL Description="bla bla bla bla bla"
COPY opa.txt /diretorio/
ENTRYPOINT ["/usr/bin/apache2ctl", "-D", "FOREGROUND"]
ENV meunome="Eduardo Henrique"
EXPOSE 80
USER henrique
WORKDIR /dir_trabalho

vim dockerfile

FROM debian

RUN apt-get update && apt-get -y install apache2 && apt -y install net-tools && apt -y install wget && apt-get clean
ENV APACHE_LOCK_DIR="/var/lock"
ENV APACHE_PID_FILE="/var/run/apache2.pid"
ENV APACHE_RUN_USER="www-data"
ENV APACHE_RUN_GROUP="www-data"
ENV APACHE_LOG_DIR="/var/log/apache2"

CMD /etc/init.d/apache2 start && /bin/bash

LABEL Description="Webserver"

VOLUME /var/www/html

EXPOSE 80

Executando dockerfile docker run -ti --name testwebserver webserver:3.0

Construindo image para containers, com um container existente

docker build -t nome:versao . Exemplo: docker build -t primeira_imagem:0.1 .

Docker Hub

O repositorio para do Docker é o Docker Hub, o processo de Export Image é semelhante ao do GitHub: Docker login: docker login ou docker login --username=UsernameHub [email protected]

Image no Docker Hub

docker images
docker tag ID_IMAGE USER/name_image:version
docker push USER/name_image:version
docker search USER
docker pull USER/name_image:version

Salvar imagem do Docker após ter sido puxada, confirmada ou construída: docker save nome-da-imagem-docker > nome-da-imagem-docker.tar

Carregar contêiner do Docker a partir do arquivo tar arquivado: docker load --input nome-da-imagem-docker.tar

Remover todos containers docker rm $(docker ps -qa)

Docker registry (docker hub localhost)

-d – Demon -p – Linkar porta host com container

Exemplo docker run -d -p 5000:5000 --restart=always --name registry registry:2.0

Tag para localhost:

docker tag 7bd4cbca1518 localhost:5000/webserver:3.0
docker push localhost:5000/webserver:3.0

Verificando:

curl localhost:5000/webserver:3.0
curl localhost:5000/v2/\_catalog

Configuração de rede dos containers

docker run -ti --dns 8.8.8.8 debian 
docker run -ti --hostname henrique debian
docker run -ti --name NameContainer debian
docker run -ti --name containerX debian
docker inspect henriqelol/webserver:3.0

docker run -ti --name tapoha henriqelol/webserver:3.0 
docker ps | grep -i tapo
docker run -ti --link tapoha --name tapoha2 henriqelol/webserver:3.0 
docker run -ti --expose 80 debian
docker run -ti --publish 8080:80 debian
docker run -ti -p 8080:80 --name webserver debian

docker attach webserver
ifconfig
sudo iptables -L -n
sudo iptables -L -n | grep 80
sudo iptables -t nat -L -n
#Mesmo confg host network
docker run -ti --net=host debian

https://www.youtube.com/watch?v=pKJgQmXXryg&list=PLf-O3X2-mxDkiUH0r_BadgtELJ_qyrFJ_&index=16

Docker Machine

Instalação e docker host

base=https://github.com/docker/machine/releases/download/v0.16.0 && 
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

base=https://github.com/docker/machine/releases/download/v0.16.0 &&  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine
docker-machine --version
docker-machine create --driver virtualbox testedockermachine
docker-machine ls

docker-machine env testedockermachine
eval $(docker-machine env testedockermachine)
docker ps 
docker-machine ls 

docker run busybox echo "Testando"
docker run -ti debian
docker ps

docker-machine ip testedockermachine
docker-machine ssh testedockermachine
docker-machine inspect testedockermachine
docker-machine stop testedockermachine
docker-machine ls 
docker-machine start testedockermachine
docker-machine rm testedockermachine

Docker Compose

sudo apt -y install docker-compose
docker-compose --version
docker-compose --help
vim docker-compose.yml

Comandos

Build – indica o caminho do seu Dockerfile build:

command – Executa um comando comando: bundle exec thin -p 3000

container_name – Nome para o container container_name: my-web-container

dns – Indica o dns server dns: 8.8.8.8

dns_search – Especifica um search domain dns_search: example.com

dockerfile – Especifica um Dockerfile alternativo dockerfile: Dockerfile-altenate

env_file – Especifica um arquivo com variáveis de ambiente env_file = .env

environment – Adiciona variáveis de ambiente

environment:
	RACK_ENV: development

expose – Expõe a porta do container

expose:
 - "3000"
 - "8000"

external_links – "Linka" containers que não estão especificando no docker-compose atual

external_links:
 - redis_1
 - project_db_1:mysql

extra_hosts – adiciona uma entrada no /etc/hosts do container

extra_hosts:
 - "somehost:123.456.478.15"
 - "otherhost:159.263.478.55"

image – Indica uma imagem

image: ubuntu:14.04

labels – Adiciona metadata ao container

labels:
  com.example.description:"XX"
  com.example.department: "Finance"

links – linka containers dentro do mesmo docker-compose

links:
  -db
  - db.database

log_driver – Indica o fomato do log a ser gerado, por ex: syslog, json-file, etc

log_driver: syslog

OU


logging:
  driver: syslog

log_opt – Indica onde mandar os logs, pode ser local ou em um syslog remoto

log_opt:
	syslog-address: "tcp://192.168.88.45:123"

OU

logging:
  driver: syslog
  options:
	syslog-address: "tcp://192.168.88.45:123"

net – Modo de uso da rede

net: "bridge"
net: "host"

ports – Expõe as portas do container e do host

ports
  - "3000"
  - "8000:8000"

volumes, volume_driver – Monta volumes no container volumes:

Just specify a path and let the Engine create a volume

  • /var/lib/mysql

Specify an absolute path mapping

  • /opt/data:var/lib/mysql

Path on the host, relative to the Compose file

  • ./cache:tmp/cache

volumes_from – Monta volumes através de outro container

volumes_from:
  - service_name
  - service_name: ro

Docker compose na pratica

docker-compose ps
docker-compose scale db=2
docker-compose stop
docker-compose ps 
docker-compose logs

Cluster e Orquestração

Certificação TLS - SEGURANÇA

Alta disponibilidade

cluster1: docker swarm join \
    --token SWMTKN-1-09s38y4killi0w33nitqc24des0xtunv1dnhnfbz4eikhqpxzg-7clppc0lbzbxz1faksw5a89jo \
    [2804:14d:8083:8b1c:a9d8:28ef:a30f:ad6]:2377

docker node ls

NODE1: NODE2:

docker's People

Contributors

henriqelol avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.