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-imageGerenciando 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 -aUsando Docker no Ambiente de Desenvolvimento
By Cicero Viana (cicerohen)
Usando Docker no Ambiente de Desenvolvimento
- 642