เวิร์กโฟลว์ webdev ของนักเทียบท่าที่ดีจะเป็นอย่างไร


121

ฉันมีลางสังหรณ์ว่านักเทียบท่าสามารถปรับปรุงเวิร์กโฟลว์ webdev ของฉันได้อย่างมาก แต่ฉันไม่ค่อยสามารถจัดการกับวิธีการเข้าใกล้โครงการที่เพิ่มนักเทียบท่าลงในสแต็กได้

สแต็กซอฟต์แวร์พื้นฐานจะมีลักษณะดังนี้:

ซอฟต์แวร์

  • อิมเมจ Docker ที่มี LAMP stack แบบกำหนดเอง

    • Apache ที่มีหลายโมดูล
    • ข้อมูล MySQL
    • PHP
    • CMS บางตัวเช่นSilverstripe
  • GIT

ขั้นตอนการทำงาน

ฉันสามารถจินตนาการได้ว่าขั้นตอนการทำงานจะมีลักษณะดังนี้:

พัฒนาการ

  1. เขียนDockerfileที่กำหนด LAMP-container ที่ตรงตามข้อกำหนดที่ระบุไว้ข้างต้น
    • REQ: เครื่องควรเริ่ม apache / mysql ทันทีหลังจากบูตเครื่อง
  2. สร้างอิมเมจนักเทียบท่า
  3. คัดลอกไฟล์ที่จำเป็นในการเรียกใช้ CMS เข้าไปเช่น ~/dev/cmsdir
    • ใส่~/dev/cmsdir/ภายใต้การควบคุมรุ่น
  4. เรียกใช้คอนเทนเนอร์นักเทียบท่าและ~/dev/cmsdirต่อเข้า/var/www/กับคอนเทนเนอร์
  5. เติมฐานข้อมูล
  6. ทำงานใน /dev/cmsdir/
  7. ยอมรับและปิดคอนเทนเนอร์นักเทียบท่า

การปรับใช้

  1. ตั้งค่าโฮสต์ระยะไกล (เช่น ansible)
  2. พุชอิมเมจคอนเทนเนอร์ไปยังโฮสต์ระยะไกล
  3. ดึงข้อมูล - โปรcmsdirเจ็กต์ผ่านคอมไพล์
  4. เรียกใช้ docker container ดึงฐานข้อมูลและต่อcmsdirเข้า/var/www

ตอนนี้มันดูดีมากบนกระดาษ แต่ฉันไม่ค่อยแน่ใจว่านี่จะเป็นแนวทางที่ถูกต้องหรือไม่

คำถาม:

  1. ในขณะที่พัฒนาในเครื่องฉันจะทำให้ฐานข้อมูลคงอยู่ได้อย่างไรระหว่างการรีบูตอินสแตนซ์คอนเทนเนอร์ หรือฉันจะต้องเรียกใช้ sql-dump ทุกครั้งก่อนที่จะหมุนคอนเทนเนอร์?

  2. ฉันควรมีอินสแตนซ์คอนเทนเนอร์แยกกันสำหรับ db และเซิร์ฟเวอร์ apache หรือไม่ หรือจะเพียงพอที่จะมีภาชนะเดียวสำหรับกรณีการใช้งานข้างต้น?

  3. หากใช้คอนเทนเนอร์แยกกันสำหรับฐานข้อมูลและเซิร์ฟเวอร์ฉันจะหมุนขึ้นและลงโดยอัตโนมัติในเวลาเดียวกันได้อย่างไร

  4. ฉันจะเมานต์ไดเร็กทอรี/dev/cmsdir/คอนเทนเนอร์ได้/var/www/อย่างไร ฉันควรใช้ไดรฟ์ข้อมูลสำหรับสิ่งนี้หรือไม่?

  5. ฉันพลาดข้อผิดพลาดหรือไม่? อะไรที่สามารถทำให้ง่ายขึ้น?


1
คำถามนี้ดูเหมือนจะน่าสนใจสำหรับคนจำนวนไม่น้อย ดูเหมือนว่าจะมีคนเขียนบล็อกโพสต์ในหัวข้อนี้เมื่อเร็ว ๆ นี้ เพราะมันยังไม่เสร็จสิ้น ณ ตอนนี้ฉันจะโพสต์ลิงค์ในความคิดเห็นนี้: project-webdev.blogspot.de/2015/05/...
jottr

คำตอบ:


46
  1. หากคุณต้องการความคงอยู่ของฐานข้อมูลโดยไม่คำนึงถึงคอนเทนเนอร์ CMS ของคุณคุณสามารถใช้หนึ่งคอนเทนเนอร์สำหรับ MySQL และหนึ่งคอนเทนเนอร์สำหรับ CMS ของคุณ ในกรณีนี้คุณสามารถทำให้คอนเทนเนอร์ MySQL ของคุณยังคงทำงานอยู่และคุณสามารถปรับใช้ CMS ของคุณใหม่ได้บ่อยเท่าที่คุณต้องการโดยอิสระ

    สำหรับการพัฒนา - อีกทางเลือกหนึ่งคือการแมปไดเร็กทอรีข้อมูล mysql จากโฮสต์ / เครื่องพัฒนาของคุณโดยใช้ไดรฟ์ข้อมูล ด้วยวิธีนี้คุณสามารถจัดการไฟล์ข้อมูลสำหรับ mysql (ใน docker) โดยใช้ git (บนโฮสต์) และ "รีโหลด" สถานะเริ่มต้นได้ทุกเมื่อที่คุณต้องการ (ก่อนเริ่ม mysql container)

  2. ใช่ฉันคิดว่าคุณควรมีคอนเทนเนอร์แยกต่างหากสำหรับ db

  3. ฉันใช้สคริปต์พื้นฐาน:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. ได้คุณสามารถใช้สวิตช์ data-volume -v ฉันจะใช้สิ่งนี้เพื่อการพัฒนา คุณสามารถใช้การติดตั้งแบบอ่านอย่างเดียวได้ดังนั้นจะไม่มีการเปลี่ยนแปลงใด ๆ กับไดเร็กทอรีนี้หากคุณต้องการ (แอปของคุณควรเก็บข้อมูลไว้ที่อื่น)

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

    อย่างไรก็ตามสำหรับการปรับใช้ขั้นสุดท้ายฉันจะสร้างและอิมเมจโดยใช้ dockerfile ด้วย ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. ไม่รู้ :-)


6
ฉันเขียนบทช่วยสอนเกี่ยวกับการเขียน mysql container ซึ่งใช้สิ่งที่คุณกำลังพูดถึงใน # 1 txt.fliglio.com/2013/11/creating-a-mysql-docker-container
ben schwartz

48
จำเป็นต้องมีบทเรียนเพิ่มเติม / แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับกระบวนการนี้ :(
Reza S

บทช่วยสอนนี้อาจให้คำแนะนำแก่คุณได้ ..
Pithikos

หากคุณต้องการดึงโค้ดจาก Github ใน Docker ลิงก์นี้จะแนะนำคีย์ SSH แบบอ่านอย่างเดียว (ดังนั้นรูปภาพ Docker สามารถแสดงต่อสาธารณะได้) slash-dev-blog.me/docker-git.html
jhtong

4
@RoyTruelove ณ ปี 2015 มะเดื่อตอนนี้เลิกใช้แล้วเพื่อสนับสนุนนักแต่งเพลง
allan.simon


4

ฉันเข้าใจว่าโพสต์นี้มีอายุเกิน 1 ปีแล้ว แต่เมื่อเร็ว ๆ นี้ฉันได้ถามคำถามที่คล้ายกันกับตัวเองและมีคำตอบที่ดีมากมายสำหรับคำถามของคุณ

  1. คุณสามารถตั้งค่าอินสแตนซ์นักเทียบท่า MySQL และให้ข้อมูลยังคงอยู่ในที่เก็บข้อมูลที่ไม่มีสถานะหรือที่เรียกว่าที่เก็บข้อมูลไม่จำเป็นต้องทำงานอยู่

  2. ใช่ฉันขอแนะนำให้มีอินสแตนซ์แยกต่างหากสำหรับเว็บเซิร์ฟเวอร์และฐานข้อมูลของคุณ นี่คือพลังของ Docker

  3. ลองดูrepo นี้ที่ฉันสร้าง โดยทั่วไปแล้วจะง่ายเพียงmake build& make runและคุณสามารถมีเว็บเซิร์ฟเวอร์และคอนเทนเนอร์ฐานข้อมูลที่ทำงานในเครื่องได้

  4. คุณใช้-vอาร์กิวเมนต์เมื่อเรียกใช้คอนเทนเนอร์เป็นครั้งแรกซึ่งจะเชื่อมโยงโฟลเดอร์เฉพาะบนคอนเทนเนอร์กับโฮสต์ที่เรียกใช้คอนเทนเนอร์

  5. ฉันคิดว่าความคิดของคุณยอดเยี่ยมมากและในขณะนี้คุณสามารถบรรลุทุกสิ่งที่คุณต้องการได้

นี่คือโซลูชันแบบเทิร์นคีย์เพื่อตอบสนองความต้องการทั้งหมดที่คุณระบุไว้


1

ฉันได้รวบรวมการตั้งค่าการเขียนนักเทียบท่าที่ใช้งานง่ายซึ่งควรตรงกับความต้องการเวิร์กโฟลว์การพัฒนาของคุณ

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

คุณสมบัติหลัก

  • ฐานข้อมูลถาวร
  • ตัวเลือกHHVM+ NGINXหรือApache2+ ของคุณPHP5
  • ดีบักและตั้งค่าจุดพักด้วย xDebug

README.mdควรมีความชัดเจนเพียงพอที่จะให้คุณเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.