Como posso executar um sistema operacional completo em um contêiner do Docker, sem especificar um comando?

24

Estou seguindo a Documentação do Docker CoreOS e menciona começar contêineres com comandos como:

docker run someImageName /bin/somebinary

Onde someImageName é uma imagem. Quando / bin / somebinary sai, a imagem não estará mais sendo executada.

Eu simplesmente gostaria de executar uma imagem, sem especificar nenhum binários para executar. Em vez disso, eu simplesmente quero executar os serviços (por exemplo, systemd / sysvinit) que normalmente são executados dentro do sistema operacional de imagens .

Esta parece ser a coisa mais comum que alguém desejaria fazer com o Docker, mas a tentativa de executar uma imagem sem um comando retorna:

2014/02/05 14:49:19 Error: create: No command specified

Como posso iniciar um contêiner do Docker e executar um sistema operacional completo, em vez de especificar um comando ?

    
por mikemaccana 05.02.2014 / 15:51

3 respostas

24

Como documentado aqui, você simplesmente executa /sbin/init como o comando, como qualquer outro UNIX que inicializa do modo de usuário único para o modo multiusuário.

link

Os contêineres podem ser sistemas operacionais completos, eles simplesmente não precisam ser (nem as VMs, é mais complicado configurar e gerenciar).

Eu diria que o objetivo do Docker é facilitar os contêineres de aplicativos, para que você tenha que configurar um aplicativo, não o sistema operacional inteiro.

    
por 05.02.2014 / 16:15
11

O Docker é um sistema para gerenciamento e implantação de contêineres de aplicativos , e não de de sistema operacional . Parece que você está combinando a execução de um contêiner docker com a inicialização de um sistema operacional.

Os contêineres do Docker devem ser de propósito único e com escopo restrito, que podem ser iniciados com um único comando. Se você está procurando algo mais complexo do que isso, o Docker não é a solução que você está procurando. Nesse caso, confira KVM, ESXi, OpenVZ, LXD etc.

Se você está apenas procurando como você pode especificar um padrão CMD e ENTRYPOINT para seus contêineres, você pode fazer isso em build-time usando um Dockerfile.

    
por 05.02.2014 / 15:53
4

Para executar um sistema operacional completo em um contêiner, crie o seguinte Dockerfile:

FROM fedora:25

CMD /sbin/init

Em seguida, crie e inicie o contêiner e insira um shell dentro dele para explorar os serviços em execução:

docker build -t os .
docker run -d --privileged --name os os
docker exec -it os bash

Serviços completos do systemd dentro do contêiner. Linda.

    
por 16.02.2017 / 22:58

Tags