Usando Docker no ambiente de desenvolvimento

nugce.org

Necessidades antigas

Isolar

Limitar acesso

Exemplos de isolamento

Isolamento por Usuário/Grupo 

Limitar o que um usuários/grupos podem fazer/executar

setuid

setgid

Sinalizadores de acesso Unix

Permite que o usuário rode um executável com as permissões do dono do executável

Permite que o usuário rode um executável com as permissões do grupo ao qual o executável pertence

sg [group]  ./excutavel.sh

su [user] ./excutavel.sh

Os sinalizadores apenas limitam o que usuários e grupos podem fazer/executar

O server ainda pode ter acesso a todos os arquivos que um executável sendo rodado em nome de um usuário/grupo 

Exemplos de isolamento

Filesystem Isolation(chroot jail)

Altera o "root directory" do filesystem para um processo e todos os seus filhos, mantendo-os confinados em uma "jaula"

Os processos que estão presos dentro da "jaula" continuam usando de forma não controlada, todos os recursos do host(máquina principal)

Exemplos de isolamento

Control Group Resource(cgroups)

Permite o controle e distribuição dos recursos(CPU, Memória, etc) do host entre os processos

Processos isolados em uma "jaula" e com recursos controlados ainda podem ser visualizados. ps -aux

Exemplos de isolamento

Linux Namespaces

Isola por completo toda a árvore de processos, possibilitando assim a execução de vários serviços  de forma segura e em paralelo no mesmo host.

Todas árvores de processos existentes podem conviver em armonia cada uma dentro de sua "jaula", com suas próprias configurações(PIDs, users, IPC, networking, etc)  e compartilhando o mesmo host.

Linux Containers LxC

Permite a virtualização de inúmeros sistemas operacionais dentro de um mesmo host.

cgroups + namespaces

Virtual Machine(VM)

Emula(simula) um sistema operacional completo dentro de um host.

Virtual Machines(VM)

vs

Linux Containers

Hypervisor

Virtual Machine Manager (VMM)

Controla a alocação de recursos paras as virtual machines

Tool para a criação de ambientes de desenvolvimento portáteis 

Ferramenta para deployment de aplicações dentro de containers 

Docker usa  Linux containers(LxC)

Docker container

Encapsulamento de todo o ambiente no qual as aplicações são executadas

Docker image

Arquivo imutável, estático e que é essencialmente uma "foto" de um container.

Dockerfile

Arquivo de configuração que contém as instruções para a criação do container.

FROM node:boron

# Create app directory

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies

COPY package.json /usr/src/app/
RUN npm install

# Bundle app source

COPY . /usr/src/app

EXPOSE 8080
CMD [ "gulp", "develop" ]

Docker Hub

Repositório online para publicação e compartilhamento de Docker images

Gerenciando Docker images

//Criando uma Docker image a partir de um Dockerfile 
docker build 
--tag nodejs-app-image 
--file Dockerfile .

//Fazendo download de uma Docker image do Docker Hub
docker pull mongo:3.0.14 

//Listando as Docker images criadas
docker images

// Removendo uma Docker image
docker rmi nodejs-app-image

Gerenciando Docker containers

//Inciando um container a partir de uma Docker image
docker run 
--publish 8080:8080
--detach nodejs-app-image
--name nodejs-app-container

// Listando apenas containers ativos
docker ps

// Listando todos os containers
docker ps -a
Made with Slides.com