https://github.com/erickweil/container-vm
Criar containers docker que funcionam quase idêntico à uma máquina virtual. Com capacidade de executar outros containers docker e programas, apenas dentro do container sem afetar o host.
Primeira vez:
docker network create net-vmPara cada container: Executar o script novo_container.sh recebendo o usuário, senha, porta do code server e porta do ssh.
Por exemplo:
bash ./novo_container.sh joao 12345678 8080 22
Recomendações:
too many open files Veja #1 #2 )Objetivos:
Todos esse objetivos serão atendidos com o uso de um container docker que se comporta como uma máquina virtual para cada aluno, contendo o Code-Server, o VSCode direto do navegador.
Existem imagens docker do code-server (codercom/code-server:latest ou linuxserver/code-server) porém estas imagens docker possuem pouco ou quase nenhum software pré-instalado, e considerando as necessidades específicas deste cenário foi preciso a criação de uma imagem Docker própria.
Pode-se perguntar: Mas e porquê utilizar containers docker e não criar logo uma Máquina virtual para cada um? A vantagem de containers docker é que os recursos de memória, cpu e armazenamento serão compartilhados quase como numa internet banda larga a banda é compartilhada, não é necessário possuir todos os recursos previstos pré-reservados, apenas os recursos que se tornarem realmente necessários pelo uso. Leitura relacionada: https://blog.nestybox.com/2020/09/23/perf-comparison.html
O arquivo Dockerfile e scripts necessários desta imagem Docker estão disponíveis no diretório docker-vm do repositório: https://github.com/erickweil/testedocker/tree/main/docker-vm
A imagem Docker Base, com usuário admin:admin está publicada no DockerHub container-vm
A imagem basicamente constrói um ambiente que imita uma máquina virtual, contendo vários utilitários de linha de comando (nano, ping, nslookup, curl, wget, etc...), systemd para gerenciar os serviços, um servidor ssh, instalação code-server via script, e programas que são comumentes utilizados no desenvolvimento (docker, git, node, python3).
Para subir um container docker dentro do docker, é necessário executá-lo com a flag --privileged, o que abre uma série de brechas de segurança, portanto seguindo algumas recomendações desta postagem de um blog que os próprios desenvolvedores do docker:dind sugerem ( https://github.com/jpetazzo/dind -> http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ ) chega-se à solução Sysbox
Veja uma explicação sobre docker-in-docker para entender melhor porque usar Sysbox.
O Sysbox é um container runtime open-source e gratuito que melhora containers por prover maior isolamento e permitindo executar softwares à nível de sistema (Como docker) sem a necessidade da flag --privileged, eliminando então parte dos problemas de segurança e garantindo maior simplicidade no processo como um todo.
Qualquer imagem docker pode ser executada neste container runtime, o que muda é apenas como o container se comporta. Não há nada de especial a não ser a necessidade de instalar o Sysbox na máquina host e passar a opção --runtime=sysbox-runc ao executar o container.
É importante notar que a instalação do Sysbox exige o Shiftfs instalado caso o kernel do linux seja menor que 5.19 (uname -a para ver a versão do kernel). Veja: https://github.com/nestybox/sysbox/blob/master/docs/distro-compat.md
A solução para isso é ou fazer upgrade do kernel (Veja https://github.com/pimlie/ubuntu-mainline-kernel.sh) ou utilizar uma distribuição mais recente (O Ubuntu Lunar Lobster já está no kernel 6.2)
Content type
Image
Digest
sha256:320162994…
Size
208.8 MB
Last updated
about 3 years ago
docker pull erickweil/container-vm