Estou seguindo a documentação do CoreOS Docker e menciona o início de contêineres com comandos como:
docker run someImageName /bin/somebinary
Onde someImageName
está uma imagem. Quando / bin / somebinary sair, a imagem não estará mais sendo executada.
Eu simplesmente gostaria de executar uma imagem, sem especificar binários para executar. Em vez disso, eu simplesmente quero executar os serviços (por exemplo, systemd / sysvinit) que normalmente são executados no sistema operacional das imagens .
Parece a coisa mais comum que alguém poderia querer 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 do Docker e executar um sistema operacional completo, em vez de especificar um comando ?
Respostas:
Conforme documentado aqui, você simplesmente executa
/sbin/init
como o comando, como qualquer outro inicializador unix, do modo de usuário único para o modo multiusuário./programming/19332662/start-full-container-in-docker
Os contêineres podem ser SOs completos, eles simplesmente não precisam ser (nem as VMs, é apenas mais complicado de configurar e gerenciar).
Eu diria que o objetivo principal do Docker é facilitar os contêineres de aplicativos, para que você só precise configurar um aplicativo, não todo o sistema operacional.
fonte
docker ps -notrunc
para obter o ID do contêiner e depoissudo /usr/sbin/lxc-attach -n containerID
entrar na imagem em execução. Como o outro cartaz menciona, eu realmente não precisa de um segundo de inicialização, então eu vou verificar recipientes de comando único próxima ...O Docker é um sistema para gerenciamento e implantação de contêineres de aplicativos , não de contêineres do sistema operacional . Parece que você está confundindo a execução de um contêiner de docker com a inicialização de um sistema operacional.
Seus contêineres do Docker devem ser aplicativos de finalidade única e de escopo muito restrito que podem ser iniciados com um único comando. Se você está procurando algo mais complexo que isso, o Docker não é a solução que você está procurando. Nesse caso, confira KVM, ESXi, OpenVZ, LXD etc.
Se você estiver apenas procurando como especificar um padrão
CMD
eENTRYPOINT
seus contêineres, poderá fazê-lo no momento da construção usando um Dockerfile.fonte
/sbin/init
, mas não precisa . Você provavelmente usou um contêiner ubuntu padrão ou algo assim. Existem muitos bits nesses contêineres que podem ser removidos se você desejar.Para executar um sistema operacional completo em um contêiner, crie o seguinte Dockerfile:
Em seguida, crie e inicie o contêiner e insira um shell dentro dele para explorar os serviços em execução dentro dele:
Serviços completos do sistema dentro do contêiner. Lindo.
fonte
Basta executar a partir da mesma imagem quantas vezes for necessário. Novos contêineres serão criados e poderão ser iniciados e parados, cada um salvando sua própria configuração. Para sua conveniência, seria melhor atribuir um nome a cada um de seus contêineres com "--name".
Fi:
É isso aí.
Depois disso, você cria seus contêineres para sempre e pode iniciá-los e pará-los como VMs.
Para entrar no contêiner e fazer o que você deseja:
fonte