Apakah ada manfaat menjalankan lingkungan pengembangan saya di wadah Docker?

12

Saya mengembangkan terutama menggunakan Visual Studio pada Windows. Masalahnya adalah bahwa setelah beberapa saat Windows macet dan saya dihadapkan dengan kebutuhan untuk menginstal ulang Windows. Demikian pula beralih ke mesin baru adalah masalah.

Menginstal ulang Windows menyakitkan karena lingkungan pengembangan saya memiliki banyak dependensi (seperti file konfigurasi MSBuild tambahan, ekstensi VS, npm, Java dll). Saya tidak membayangkan saya sendirian dalam memiliki sistem yang kompleks, dan memasangnya kembali mungkin akan memakan waktu satu hari minimum.

Saya tidak benar-benar menggunakan Docker, tetapi secara teori sepertinya saya bisa mengatur lingkungan dev saya di Windows Container dan kemudian mengirimkannya (mis. Salin ke laptop saya, masukkan instalasi Windows baru) dan itu seharusnya tidak menyakitkan .

Apakah yang saya gambarkan mungkin? Apakah ada kelemahan, seperti kinerja, keandalan? Gotcha lainnya?

Jim W mengatakan mengembalikan Monica
sumber
Saya ingin tahu apa yang dapat Anda lakukan dengan lingkungan pengembangan yang menyebabkan Windows "macet." Menginstal Node, VS, dan beberapa plugin seharusnya tidak menyebabkan masalah.
neilsimp1
@ neilsimp1 Anda benar, tetapi kenyataannya lebih seperti 4 versi VS, editor, alat cat, Android Studio, Netbeans, Office, CrashPlan, Git, TortoiseSVN, Fiddler, desktop jarak jauh, konferensi, skype, wireshark, vmware dan terus menerus.
Jim W mengatakan mengembalikan Monica
Sebagai catatan tambahan, Anda harus melihat utilitas kloning disk. Anda dapat menginstal OS + semua perangkat lunak yang diperlukan dan mengkonfigurasi semuanya dengan benar. Kemudian buat tiruan dari disk Anda dan cadangkan di suatu tempat. Ketika Anda perlu "mengatur ulang" semuanya, pulihkan saja dari klon itu dan Anda selesai. Ada banyak alat yang dapat melakukan ini dan dalam situasi Anda dapat menghemat puluhan jam :).
Radu Murzea

Jawaban:

13

Ini bukan masalah yang tidak biasa, tetapi Docker bukan alat yang tepat untuk menyelesaikannya. Kontainer secara umum (termasuk Docker) dimaksudkan untuk menyediakan runtime aplikasi untuk satu proses , seperti server web, bukan untuk skenario multi-proses seperti lingkungan dev. Di dapat dilakukan, tetapi bukan solusi yang sangat elegan.

Pendekatan yang lebih baik (dan lebih umum) adalah membuat VMs baik melalui hypervisor tradisional seperti VirtualBox atau Hyper-V (karena Anda menggunakan Windows). Alur kerja yang khas adalah:

  • Temukan atau buat gambar VM dasar berdasarkan rasa OS pilihan Anda. Ini dapat dilakukan secara langsung dengan ISO penginstal, atau seseorang di tempat kerja Anda mungkin sudah memilikinya.
  • Setelah gambar dasar dibuat, tambahkan semua alat dev dan pengaturan yang Anda butuhkan. Potret atau simpan ini sebagai gambar terpisah.
  • Sekarang Anda dapat menjalankan gambar ini, RDP atau jauh ke dalamnya, dan bekerja sampai Anda sampai pada titik di mana Anda "macet", dan kemudian simpan saja file yang Anda butuhkan (komit ke kontrol sumber, dll.), Lalu hancurkan pergi gambar dan mulai lagi dari salah satu dari dua foto / gambar yang Anda buat. Ini bisa dilakukan dalam hitungan detik, vs. hingga sehari dengan cara kuno.
  • Pada titik mana pun di sepanjang garis, buat snapshot tambahan ketika Anda menghadapi situasi yang Anda mungkin ingin kembalikan ke dalam untuk mereproduksi masalah, dll.

Vagrant juga merupakan alat yang fantastis untuk melakukan banyak hal di atas dengan cara yang lebih terstruktur.

Manfaat sampingan dari semua ini adalah bahwa Anda sekarang memiliki lingkungan terstandarisasi yang dapat dibagikan dengan seluruh tim Anda, menyelamatkan semua orang dari upaya tersebut. Ini sangat bagus untuk orang baru yang naik dengan cepat.

Kembali ke pertanyaan awal Anda, Docker tidak benar-benar dimaksudkan untuk ini, tetapi jika Anda memiliki lingkungan dev yang cukup kecil (katakanlah PHP di Linux), Anda bisa melakukannya dalam wadah, dan manfaatnya akan menjadi gambar yang jauh lebih kecil (berpotensi di bawah 100MB vs banyak GB untuk Windows VM dengan disk virtual).

Dan1701
sumber
2

tidak dalam satu wadah buruh pelabuhan tetapi ya dalam wadah buruh pelabuhan.

Meskipun Anda dapat - secara teoritis - merakit seluruh lingkungan dev Anda di dalam satu wadah tunggal, buruh pelabuhan tidak dimaksudkan untuk melakukan ini.

Alih-alih, Anda harus menggunakan setiap layanan ke dalam wadah terpisah, menggunakan komposisi buruh pelabuhan , mengelola seluruh infrastruktur Anda dalam satu file tunggal, di mana setiap layanan akan memiliki file log, ruang pengguna, jaringan, dll.

Biarkan saya memberi Anda sebuah contoh, ini adalah konsep saya docker-compose.yml

version: '2'
services:

  myproxy:
    build: myproxy
    container_name: ppproxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      default:
        aliases:
          - www.domain1.it
          - www.domain2.it
          - www.domain4.it

  mydb1:
    build: mydb
    environment:
      DB_USER: sdffdssdf
      DB_PASSWORD:  fdsfsdsdf
      DB_NAME: dbanme1
      DB_ENCODING: UTF-8    
      VIRTUAL_HOST: myhost1.net.lan
      VIRTUAL_PORT: 5432

  mydb2:
    build: mydb
    environment:
      DB_USER: ssdfsdfs
      DB_PASSWORD:  sffdssd
      DB_NAME: dbanme2
      DB_ENCODING: UTF-8    
      VIRTUAL_HOST: myhost2.net.lan
      VIRTUAL_PORT: 5432

  www:
    image: myimages/oldservice:v1.1
    container_name: www
    command: /bin/bash /root/launch
    environment:
        VIRTUAL_HOST: www.domain1.it
        VIRTUAL_PORT: 80
    ports:
      - 80
    depends_on:
      - mydb1
      - mydb1
      - myws

  myws:
    build: myjettycontainer
    environment:
        HTTPS_METHOD: noredirect
        VIRTUAL_HOST: www.domain2.it
        VIRTUAL_PORT: 8080
    ports:
      - 8080
    depends_on:
      - mydb1
      - mydb2
      - myproxy
      - mypostfix

  mypostfix:
    image: catatnight/postfix
    container_name: mailer
    environment:
      maildomain: domain1.it
      smtp_user: mymail:sfsfdfds
    ports:
      - 25

Ada proxy nginx (myproxy), dua database postgres serupa (mydb1 dan 2), server aplikasi web java lama (www), wadah java jetty yang menyediakan layanan web sisanya dan akhirnya wadah postfix SMTP yang sangat sederhana.

Semuanya dimulai - biasanya :) - dengan docker-compose up, baik pada mesin dev saya atau dalam produksi; file log dikumpulkan menjadi satu file yang mudah dibaca dan dimungkinkan untuk mereplikasi secara lokal hampir setiap fungsionalitas dengan jaminan bahwa, jika berfungsi pada laptop saya, itu akan berfungsi.

Edoardo
sumber
2

Saya menggunakan VM VirtualBox untuk hal semacam ini.

Portabilitas memiliki lingkungan dev Anda dalam sebuah wadah sangat mudah, tetapi hal yang sangat menyenangkan adalah bahwa saya dapat memotretnya sebelum ada upaya peningkatan, dan jika saya mengacaukannya, tidak ada masalah untuk mundur dan memulai lagi.

Saya juga merasa terbantu untuk melakukan ini karena saya sering bekerja dengan banyak versi hal-hal seperti Qt, dan saya tidak merasa ingin mencari tahu bagaimana membuat kedua versi itu hidup berdampingan - sebagai gantinya, saya hanya meletakkannya di berbagai VM dan Saya tidak perlu khawatir tentang interaksi karena saya menginstal sesuatu yang salah.

Michael Kohne
sumber