Bagaimana Saya bisa menjalankan OS penuh dalam wadah Docker, tanpa menentukan perintah?

Saya mengikuti Dokumentasi Docker CoreOS dan itu menyebutkan memulai wadah dengan perintah seperti:

docker run someImageName /bin/somebinary

Dimana someImageName adalah gambar. Ketika / bin / somebinary keluar, gambar tidak akan lagi berjalan.

Saya hanya ingin menjalankan gambar, tanpa menentukan binari apa pun untuk dijalankan. Sebaliknya, Saya hanya ingin menjalankan layanan (misalnya, systemd / sysvinit) yang biasanya dijalankan di dalam os images.

Ini sepertinya hal paling umum yang ingin dilakukan siapa pun dengan Docker, tetapi mencoba menjalankan gambar tanpa perintah akan kembali:

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

Bagaimana Saya bisa memulai wadah Docker dan menjalankan OS penuh, daripada menentukan perintah?

Seperti yang didokumentasikan di sini, Anda cukup menjalankan /sbin/init sebagai perintah sama seperti booting unix lainnya dari single user ke mode multi-user.

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

Kontainer dapat menjadi OS penuh, mereka tidak harus (begitu juga vm dalam hal ini, itu hanya lebih rumit untuk dikonfigurasi dan dikelola).

Saya akan mengatakan inti dari Docker adalah membuat wadah aplikasi menjadi mudah, sehingga Anda hanya perlu mengonfigurasi aplikasi, bukan seluruh OS.

Docker adalah sistem untuk manajemen dan penyebaran aplikasi kontainer, tidak sistem operasi wadah. Sepertinya Anda menggabungkan menjalankan wadah buruh pelabuhan dengan mem-boot sistem operasi.

Kontainer Docker Anda harus berupa aplikasi tujuan tunggal dengan cakupan sangat sempit yang dapat dimulai dengan satu perintah. Jika Anda mencari sesuatu yang lebih kompleks dari itu, maka Docker bukanlah solusi yang anda cari. Dalam hal ini, Periksa KVM, ESXi, OpenVZ, LXD dll.

Jika Anda hanya mencari bagaimana Anda dapat menentukan default CMD dan ENTRYPOINT untuk wadah Anda, Anda dapat melakukannya di membangun-waktu menggunakan Dockerfile.

Untuk menjalankan sistem operasi penuh dalam wadah membuat Dockerfile berikut:

FROM fedora:25CMD /sbin/init

Kemudian bangun dan mulai wadah dan masukkan shell di dalamnya untuk menjelajahi layanan yang berjalan di dalamnya:

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

Layanan systemd penuh di dalam wadah. Indah.

docker pull ubuntu

Jalankan saja dari gambar yang sama sebanyak yang diperlukan. Kontainer baru akan dibuat dan mereka kemudian dapat dimulai dan berhenti masing-masing menyimpan konfigurasinya sendiri. Untuk kenyamanan Anda akan lebih baik untuk memberikan masing-masing wadah Anda nama dengan "--name".

F. i:

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

Itu saja.

$ 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

Setelah itu Anda memiliki wadah Anda dibuat selamanya dan Anda dapat memulai dan menghentikan mereka seperti VMs.

docker start MyContainer1

Untuk mendapatkan dalam wadah dan melakukan apa yang ingin Anda lakukan:

docker exec -it MyContainer1 bash

Ini adalah duplikat dari pertanyaan ini lxc - Start full container in Docker? - Stack Overflow

@ FredtheMagicWonderDog tidak cukup, meskipun jawabannya sama.