https://blog.geekhunter.com.br/docker-na-pratica-como-construir-uma-aplicacao/

Confinamento
Boas práticas criação de sua app para um container docker

Lembre-se que de incluir o systemd ou upstart, pois eles gerenciam os processos, então se um processo comer mais memória do que tem, o processo pode morrer. Exemplo em cgroup aulas William ;)

Migrando Container Docker para outra Máquina.

Na máquina fonte:

# docker commit <nome-ou-id-container> <nome-nova-imagem>
# docker save <nome-nova-imagem>> /tmp/nome-nova-imagem .tar

Na máquina destino:

# docker load </tmp/nome-nova-imagem .tar
# docker run <argumentos-para-container>

Verificar lista de camadas:

# docker history <nome-nova-imagem>

* Export e Import (congela todas a camadas)

Shared network of other container:

# docker run -itd --name debiantest --net=container:test-mediawiki debian

https://forums.docker.com/t/shared-network-namespaces-using-net-container/16697/4 https://stackoverflow.com/questions/55399695/attaching-a-docker-container-to-another-containers-network-with-net-container

$ docker run -it --name myTomcat --net=myNetwork tomcat
$ docker run -it --net container:myTomcat busybox

Docker compose (stack serviço) dentro mesmo container

#################################
#stack.yml
version: '3.1'
services:
   mongo:
      image: mongo
      restart: always
      environment:
         MONGO_INITDB_ROOT_USERNAME: root
         MONGO_INITDB_ROOT_PASSWORD: example
   mongo-express:
         image: mongo-express
         restart: always
         ports:
         - 8081:8081
         environment:
            ME_CONFIG_MONGODB_ADMINUSERNAME: root
            ME_CONFIG_MONGODB_ADMINPASSWORD: example
#################################
$ docker stack deploy -c stack.yml mongo / $ docker-compose -f stack.yml up

Referência: https://hub.docker.com/_/mongo/

Docker cluster (swarm).
Docker compose

Multiplos container started

Docker standalone

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-getting-started https://docs.docker.com/samples/

Instalação do Docker no Debian / Ubuntu

# apt install systemd-docker docker.io
# systemctl start docker
# docker info

Imagem

# docker search centos
# docker pull centos
# docker images

Create minha imagem sem base source https://docs.docker.com/engine/userguide/eng-image/baseimages/#create-a-full-image-using-tar https://rominirani.com/docker-tutorial-series-writing-a-dockerfile-ce5746617cd https://www.digitalocean.com/community/tutorials/docker-explained-using-dockerfiles-to-automate-building-of-images

root@note:~/onlybash# ls
bin  Dockerfile  lib  lib64
root@note:~/onlybash# cat Dockerfile
FROM scratch
ADD /bin /bin
ADD /lib /lib
ADD /lib64 /lib64
RUN /bin/bash
# docker build -t onlybash .

Executa o comando LS e quando termina ele finaliza o docker, mas arquivos continua, você consegue dar o docker start novamente no processo.

# docker run onlybash ls
** docker start 34de3d34d32
** docker start -i 34de3d34d32

root@note:/# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
b8b705b7543d        onlybash            "ls"                9 seconds ago       Exited (0) 7 seconds ago                        determined_euler
2c5c39f80933        onlybash            "/bin/bash"         2 minutes ago       Exited (0) 14 seconds ago                       evil_boyd
f20039ae5e10        onlybash            "/bin/bash"         4 minutes ago       Exited (0) 3 minutes ago                        dreamy_raman

root@note:/# docker start b8b705b7543d
b8b705b7543d

root@note:/# docker start -i b8b705b7543d
bin  dev  etc  lib  lib64  proc  sys

Executa o comando bash e só termina quando é fechado o bash

# docker run -it onlybash /bin/bash

Processos que foram executados

# docker ps -a

Processos que estão em execução

# docker ps

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-getting-started

* Executa em um container existente um comando

# docker exec -it f20039ae5e10 /bin/bash

root@note:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6516d128243e        onlybash            "/bin/bash"         6 seconds ago       Up 5 seconds                            peaceful_davinci

root@note:~# docker exec -it 6516d128243e /bin/bash
bash-4.3#
Ferramentas de gerenciamento:
Swarm Master
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 $(lsb_release -cs) stable" apt-get update apt-get -y install docker-ce docker ps iptables -L -n sudo ufw allow 2376/tcp && sudo ufw allow 7946/udp && sudo ufw allow 7946/tcp && sudo ufw allow 80/tcp && sudo ufw allow 2377/tcp && sudo ufw allow 4789/udp sudo ufw reload && sudo ufw systemctl restart docker docker swarm init --advertise-addr 172.20.0.32> /root/docker-swarm-join

Swarm Node

install docker and after execute: docker swarm join --token xxxxxxxxxxxxtokenxxxxxxxxxxxxxxxxx 172.20.0.32:2377

Alterando segmento de rede default do docker e de novas bridges