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

Estou seguindo o Documentação Do CoreOS Docker e menciona o início de contêineres com comandos como:

docker run someImageName /bin/somebinary

Onde someImageName é uma imagem. Quando/bin / somebinary sair, a imagem não estará mais em execução.

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

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

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

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

Conforme documentado aqui, você simplesmente corre /sbin/init como o comando, assim como qualquer outra inicialização unix de um único usuário para o modo multiusuário.

https://stackoverflow.com/questions/19332662/start-full-container-in-docker

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

Eu diria que o ponto principal do Docker é tornar os contêineres de aplicativos fáceis, para que você só precise configurar um aplicativo, não todo o sistema operacional.

Docker é um sistema para gerenciamento e implantação de aplicacao contentores, não sistema cisterna. Parece que você está confundindo a execução de um contêiner docker com a inicialização de um sistema operacional.

Seus contêineres do Docker devem ser aplicativos de propósito único, com escopo muito 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 tempo de construção usando um Dockerfile.

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

FROM fedora:25CMD /sbin/init

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

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

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

docker pull ubuntu

Basta executar a partir da mesma imagem quantas vezes forem necessárias. Novos contêineres serão criados e eles podem então ser iniciados e stoped cada um salvando sua própria configuração. Para sua conveniência, seria melhor dar a cada um de seus contêineres um nome Com "-- name".

F. i:

docker run --name MyContainer1 <ubuntu image>docker run --name MyContainer2 <ubuntu image>docker run --name MyContainer3 <ubuntu image>

É isso.

$ docker psCONTAINER ID        IMAGE            CREATED          STATUS               NAMESa7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer187ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2c1524520d864        67759a80360c   12 hours ago     Up About a minute    MyContainer3

Depois disso, você tem seus contêineres criados para sempre e pode iniciá-los e pará-los como VMs.

docker start MyContainer1

Para entrar no recipiente e fazer o que você quer fazer:

docker exec -it MyContainer1 bash

Esta é uma duplicata desta questão lxc - Start full container in Docker? - Stack Overflow

@ FredtheMagicWonderDog não é bem assim, embora a resposta seja a mesma.