Geliştirme ortamımı bir Docker kapsayıcısında çalıştırmanın faydaları var mı?


12

Öncelikle Windows'ta Visual Studio kullanarak geliştiriyorum. Sorun, bir süre sonra Windows çöktü ve Windows'u yeniden yüklemeye ihtiyaç duyuyorum. Benzer şekilde yeni makinelere geçmek de bir sorundur.

Geliştirme ortamımın çok fazla bağımlılığı olduğu için Windows'u yeniden yüklemek acı verici (ekstra MSBuild yapılandırma dosyaları, VS uzantıları, npm, Java vb.). Karmaşık bir sisteme sahip olduğumda yalnız olduğumu düşünmüyorum ve yeniden kurmak muhtemelen en az bir gün sürecek.

Docker'ı gerçekten kullanmadım, ancak teorik olarak geliştirici ortamımı bir Windows Container'a kurabilir ve sonra sadece gönderebilirim (örneğin, dizüstü bilgisayarınıza kopyala, yeni bir Windows yüklemesi koy) ve ağrısız olmalı .

Tarif ettiğim şey mümkün mü? Performans, güvenilirlik gibi olumsuzluklar var mı? Başka yakaladınız mı?


Windows'un "çökmesine" neden olan bir geliştirme ortamıyla neler yapabileceğinizi merak ediyorum. Düğüm, VS ve bazı eklentilerin yüklenmesi herhangi bir soruna neden olmamalıdır.
neilsimp1

@ neilsimp1 haklısınız, ancak gerçek daha çok VS, editörler, boya araçları, Android Studio, Netbeans, Office, CrashPlan, Git, TortoiseSVN, Fiddler, uzak masaüstü, konferans, skype, wireshark, vmware ve durmadan.
Jim W yeniden aktifleştirme Monica diyor

Bir yan not olarak, disk klonlama yardımcı programlarına bakmalısınız. İşletim sisteminizi + gereken tüm yazılımı yükleyebilir ve her şeyi doğru şekilde yapılandırabilirsiniz. Sonra diskinizi bir klonlayın ve bir yere yedekleyin. Her şeyi "sıfırlamanız" gerektiğinde, sadece bu klondan geri yükleyin ve işiniz bitti. Bunu yapabilen birçok araç vardır ve durumunuzda onlarca saatten tasarruf edebilirsiniz :).
Radu Murzea

Yanıtlar:


13

Bu nadir bir sorun değil, ancak Docker bunu çözmek için gerçekten doğru araç değil. Kapsayıcıların genel olarak (Docker dahil), geliştirici ortamı gibi çok işlemli bir senaryo için değil, web sunucusu gibi tek bir işlem için bir uygulama çalışma zamanı sağlaması amaçlanmıştır . In olabilir yapılabilir, ama çok zarif bir çözüm değildir edilebilir.

Daha iyi (ve daha yaygın) bir yaklaşım, VM'leri VirtualBox veya Hyper-V gibi geleneksel bir hipervizör aracılığıyla oluşturmaktır (Windows'ta olduğunuzdan). Tipik bir iş akışı:

  • Tercih ettiğiniz işletim sistemi lezzetini temel alan bir temel VM görüntüsü bulun veya oluşturun. Bu doğrudan ISO yükleyicisi ile yapılabilir veya işyerinizdeki bir kişinin zaten bir tane olabilir.
  • Temel görüntü oluşturulduktan sonra, ihtiyacınız olan tüm geliştirme araçlarını ve ayarlarını ekleyin. Anlık görüntü veya bunu ayrı bir görüntü olarak kaydedin.
  • Artık bu görüntüyü, RDP'yi veya uzaktan kumandayı çalıştırabilir ve "bataklığa düştüğünüz" bir noktaya gelene kadar çalışabilir ve daha sonra ihtiyacınız olan dosyaları kaydedebilirsiniz (kaynak kontrolüne taahhüt edin, vb.) görüntüyü uzaklaştırın ve oluşturduğunuz iki anlık görüntüden / görüntünün herhangi birinden yeniden başlayın. Bu, eski moda şekilde bir güne kadar saniyeler içinde yapılabilir.
  • Çizgi boyunca herhangi bir noktada, bir sorunu yeniden oluşturmak için geri almak isteyebileceğiniz durumlarla karşılaştığınızda ek anlık görüntüler oluşturun.

Vagrant , yukarıdakilerin çoğunu daha yapılandırılmış bir şekilde yapmak için harika bir araçtır.

Tüm bunların bir avantajı, artık tüm ekibinizle paylaşılabilen ve herkese çaba göstermeyen standartlaştırılmış ortamlara sahip olmanızdır . Bu, özellikle hızlı bir şekilde yeni başlayan insanlar için harika.

Orijinal sorunuza geri dönersek, Docker bunun için tasarlanmamıştır, ancak yeterince küçük bir geliştirme ortamınız varsa (Linux'ta PHP diyelim), bunu bir kapta yapabilirsiniz ve fayda çok daha küçük bir görüntü olacaktır (potansiyel olarak sanal diskli bir Windows VM için 100 MB'den çok GB'ye kadar).


2

tek bir liman işçisi konteynırında değil, evet n liman işçisi konteynırında.

Teorik olarak, tüm geliştirme ortamınızı tek bir kapta toplayabilseniz de, liman işçisinin bunu yapması amaçlanmamıştı.

Bunun yerine, docker compose kullanarak , tüm altyapınızı tek bir dosyada yöneten, her hizmetin kendi günlük dosyasına, kullanıcı alanına, ağa vb. Sahip olacağı her hizmeti ayrı kaplara dağıtmanız gerekir .

Size bir örnek vereyim, bu bir taslağım 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

Bir nginx proxy (myproxy), iki benzer postgres veritabanı (mydb1 ve 2), eski bir java web uygulama sunucusu (www), bir dinlenme web hizmeti sağlayan bir java iskelesi kabı ve son olarak çok basit bir SMTP postfix kabı vardır.

Her şey başlar - genellikle :) - docker-compose updev makinemde veya üretimde; günlük dosyaları okunması kolay tek bir dosyada toplanır ve dizüstü bilgisayarımda çalışırsa çalışacağını garanti ederek hemen hemen her işlevselliği yerel olarak çoğaltmak mümkündür.


2

Bu tür şeyler için VirtualBox VM'lerini kullanıyorum.

Geliştirme ortamınızı bir kapta taşımanın taşınabilirliği kullanışlı, ancak gerçekten güzel olan şey, herhangi bir yükseltme denemesinden önce olayı anlık olarak görüntüleyebilmem ve eğer vidalarsam, geri çekilip tekrar başlamak sorun değil.

Ayrıca bunu yapmayı da yararlı buluyorum çünkü sık sık Qt gibi şeylerin birden fazla sürümüyle çalışıyorum ve iki sürümün birlikte var olmasını nasıl sağlayacağımı bulmak istemiyorum - bunun yerine, onları farklı VM'lere koydum ve Etkileşimler hakkında endişelenmem gerekmiyor çünkü yanlış bir şey yükledim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.