Apa yang akan menjadi alur kerja webdev buruh pelabuhan yang baik?

121

Saya memiliki firasat bahwa buruh pelabuhan dapat sangat meningkatkan alur kerja webdev saya - tetapi saya belum cukup berhasil memahami cara mendekati proyek menambahkan buruh pelabuhan ke tumpukan.

Tumpukan perangkat lunak dasar akan terlihat seperti ini:

Perangkat lunak

  • Gambar Docker menyediakan tumpukan LAMP kustom

    • Apache dengan beberapa modul
    • MYSQL
    • PHP
    • Beberapa CMS, misalnya Silverstripe
  • GIT

Alur Kerja

Saya bisa membayangkan alur kerja terlihat seperti berikut ini:

Pengembangan

  1. Tulis a Dockerfileyang mendefinisikan wadah LAMP yang memenuhi persyaratan yang disebutkan di atas
    • REQ: Mesin harus memulai apache / mysql tepat setelah boot
  2. Bangun citra buruh pelabuhan
  3. Salin file yang diperlukan untuk menjalankan CMS ke mis ~/dev/cmsdir
    • Di ~/dev/cmsdir/bawah kendali versi
  4. Jalankan kontainer buruh pelabuhan, dan pasang ~/dev/cmsdirke/var/www/ container tersebut
  5. Isi database
  6. Lakukan pekerjaan di /dev/cmsdir/
  7. Komit & matikan kontainer buruh pelabuhan

Penyebaran

  1. Siapkan host jarak jauh (mis. Dengan yang memungkinkan)
  2. Dorong gambar container ke host jarak jauh
  3. Mengambil cmsdir -proyek melalui git
  4. Jalankan kontainer buruh pelabuhan, tarik database dan pasang cmsdirke/var/www

Sekarang, ini terlihat cukup bagus di atas kertas, TAPI saya tidak yakin apakah ini akan menjadi pendekatan yang tepat sama sekali.

Pertanyaan:

  1. Saat mengembangkan secara lokal, bagaimana cara membuat database tetap ada di antara boot ulang instance container? Atau apakah saya perlu menjalankan sql-dump setiap kali sebelum memutar container?

  2. Haruskah saya memiliki contoh kontainer terpisah untuk db dan server apache? Atau apakah cukup memiliki satu wadah untuk kasus penggunaan di atas?

  3. Jika menggunakan wadah terpisah untuk database dan server, bagaimana saya dapat secara otomatis memutarnya ke atas dan ke bawah pada saat yang bersamaan?

  4. Bagaimana sebenarnya saya memasang /dev/cmsdir/ke dalam container /var/www/-directory? Haruskah saya menggunakan volume data untuk ini?

  5. Apakah saya melewatkan jebakan? Apa saja yang bisa disederhanakan?

jottr
sumber
1
Pertanyaan ini sepertinya menarik bagi beberapa orang. Seseorang sepertinya baru-baru ini menulis serial posting blog tentang topik tersebut. Karena belum selesai sekarang, saya akan posting linknya di komentar ini: project-webdev.blogspot.de/2015/05/…
jottr

Jawaban:

46
  1. Jika Anda memerlukan indepent persistensi database dari container CMS, Anda dapat menggunakan satu container untuk MySQL dan satu container untuk CMS Anda. Jika demikian, Anda dapat menjalankan container MySQL Anda dan menerapkan ulang CMS Anda sesering yang Anda inginkan secara mandiri.

    Untuk pengembangan - opsi lainnya adalah memetakan direktori data mysql dari host / mesin pengembangan Anda menggunakan volume data. Dengan cara ini Anda dapat mengelola file data untuk mysql (di buruh pelabuhan) menggunakan git (di host) dan "reload" status awal kapan saja Anda mau (sebelum memulai kontainer mysql).

  2. Ya, saya pikir Anda harus memiliki wadah terpisah untuk db.

  3. Saya hanya menggunakan skrip dasar:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. Ya, Anda dapat menggunakan sakelar data-volume -v. Saya akan menggunakan ini untuk pengembangan. Anda dapat menggunakan pemasangan hanya-baca, jadi tidak ada perubahan yang akan dilakukan pada direktori ini jika Anda mau (aplikasi Anda harus menyimpan data di tempat lain).

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    Bagaimanapun, untuk penerapan akhir, saya akan membangun dan menggambar menggunakan dockerfile dengan ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. Saya tidak tahu :-)

Jiri
sumber
6
saya menulis tutorial tentang menulis wadah mysql yang mengimplementasikan apa yang Anda bicarakan di # 1 txt.fliglio.com/2013/11/creating-a-mysql-docker-container
ben schwartz
48
Tentunya perlu ada lebih banyak tutorial / praktik terbaik dalam proses ini. :(
Reza S
Tutorial ini mungkin memberi Anda beberapa arahan ..
Pithikos
Jika Anda tertarik untuk menarik kode dari Github di Docker, tautan ini menyarankan kunci SSH hanya baca (sehingga gambar Docker dapat dicantumkan secara publik) slash-dev-blog.me/docker-git.html
jhtong
4
@RoyTruelove mulai 2015, ara sekarang sudah tidak digunakan lagi karena mendukung docker-compose
allan.simon
9

Anda ingin menggunakan docker-compose. Ikuti tutorialnya di sini. Sangat sederhana. Tampaknya mencentang semua kotak Anda.

https://docs.docker.com/compose/

Kevin Suttle
sumber
4

Saya memahami posting ini sudah lebih dari satu tahun saat ini, tetapi saya baru-baru ini mengajukan pertanyaan yang sangat mirip pada diri saya sendiri dan memiliki beberapa jawaban bagus untuk pertanyaan Anda.

  1. Anda dapat menyiapkan instance buruh pelabuhan MySQL dan menyimpan data pada penampung data tanpa negara, alias penampung data tidak perlu dijalankan secara aktif

  2. Ya, saya akan merekomendasikan memiliki contoh terpisah untuk server web dan database Anda. Ini adalah kekuatan Docker.

  3. Lihat repo ini yang telah saya buat . Pada dasarnya ini sesederhana make build& make rundan Anda dapat menjalankan server web dan wadah basis data secara lokal.

  4. Anda menggunakan -vargumen saat menjalankan penampung untuk pertama kalinya, ini akan menautkan folder tertentu di penampung ke host yang menjalankan penampung.

  5. Saya pikir ide Anda sangat bagus dan saat ini mungkin untuk mencapai semua yang Anda minta.

Berikut ini adalah solusi kunci putar untuk mencapai semua kebutuhan yang telah Anda daftarkan.

gegere
sumber
1

Saya telah menyusun penyiapan penulisan buruh pelabuhan yang mudah digunakan yang harus sesuai dengan persyaratan alur kerja pengembangan Anda.

https://github.com/ehyland/docker-silverstripe-dev

Fitur utama

  • DB yang persisten
  • Pilihan Anda atas HHVM+ NGINXatau Apache2+PHP5
  • Debug dan setel breakpoint dengan xDebug

The README.md harus cukup jelas untuk Anda mulai.

eamon
sumber