Quy trình làm việc webdev của docker tốt sẽ là gì?


121

Tôi có linh cảm rằng docker có thể cải thiện đáng kể quy trình làm việc webdev của tôi - nhưng tôi chưa xoay sở được cách tiếp cận một dự án thêm docker vào ngăn xếp.

Ngăn xếp phần mềm cơ bản sẽ giống như sau:

Phần mềm

  • (Các) hình ảnh Docker cung cấp ngăn xếp LAMP tùy chỉnh

    • Apache với một số mô-đun
    • MYSQL
    • PHP
    • Một số CMS, ví dụ như Silverstripe
  • GIT

Quy trình làm việc

Tôi có thể hình dung quy trình làm việc giống như sau:

Phát triển

  1. Viết một Dockerfileđịnh nghĩa một LAMP-container đáp ứng các yêu cầu nêu trên
    • REQ: Máy sẽ khởi động apache / mysql ngay sau khi khởi động
  2. Xây dựng hình ảnh docker
  3. Sao chép các tệp cần thiết để chạy CMS vào ví dụ: ~/dev/cmsdir
    • Đặt ~/dev/cmsdir/dưới sự kiểm soát phiên bản
  4. Chạy container Docker, và bằng cách nào đó gắn kết ~/dev/cmsdirđể /var/www/trên thùng sơn
  5. Điền vào cơ sở dữ liệu
  6. Làm việc ở /dev/cmsdir/
  7. Cam kết và đóng bộ chứa docker

Triển khai

  1. Thiết lập máy chủ lưu trữ từ xa (ví dụ với ansible)
  2. Đẩy hình ảnh vùng chứa đến máy chủ từ xa
  3. Tìm nạp- cmsdirdự án qua git
  4. Chạy bộ chứa docker, kéo vào cơ sở dữ liệu và gắn kết cmsdirvào/var/www

Bây giờ, điều này trông khá đẹp trên giấy tờ, NHƯNG tôi không chắc liệu đây có phải là cách tiếp cận đúng hay không.

Câu hỏi:

  1. Trong khi phát triển cục bộ, làm cách nào để cơ sở dữ liệu tồn tại giữa các lần khởi động lại đối tượng vùng chứa? Hay tôi sẽ cần chạy sql-dump mỗi lần trước khi quay xuống vùng chứa?

  2. Tôi có nên có các trường hợp vùng chứa riêng biệt cho db và máy chủ apache không? Hoặc nó sẽ là đủ để có một thùng chứa duy nhất cho trường hợp sử dụng trên?

  3. Nếu sử dụng các vùng chứa riêng biệt cho cơ sở dữ liệu và máy chủ, làm cách nào để tự động xoay chúng lên và xuống cùng một lúc?

  4. Làm thế nào tôi thực sự sẽ gắn kết /dev/cmsdir/vào thư /var/www/mục container ? Tôi có nên sử dụng khối lượng dữ liệu cho việc này không?

  5. Tôi có bỏ lỡ bất kỳ cạm bẫy nào không? Bất cứ điều gì có thể được đơn giản hóa?


1
Câu hỏi này dường như được khá nhiều người quan tâm. Có vẻ như ai đó đã viết một loạt bài đăng trên blog về chủ đề này gần đây. Vì nó vẫn chưa hoàn thành ngay bây giờ, tôi sẽ đăng liên kết trong nhận xét này: project-webdev.blogspot.de/2015/05/…
jottr

Câu trả lời:


46
  1. Nếu bạn cần lưu trữ lâu dài cơ sở dữ liệu cho vùng chứa CMS của mình, bạn có thể sử dụng một vùng chứa cho MySQL và một vùng chứa cho CMS của bạn. Trong trường hợp đó, bạn có thể có vùng chứa MySQL của mình vẫn đang chạy và bạn có thể triển khai lại CMS của mình thường xuyên nếu bạn muốn một cách độc lập.

    Để phát triển - một tùy chọn khác là ánh xạ các thư mục dữ liệu mysql từ máy chủ / máy phát triển của bạn bằng cách sử dụng khối lượng dữ liệu. Bằng cách này, bạn có thể quản lý các tệp dữ liệu cho mysql (trong docker) bằng git (trên máy chủ) và "tải lại" trạng thái ban đầu bất cứ lúc nào bạn muốn (trước khi khởi động vùng chứa mysql).

  2. Có, tôi nghĩ bạn nên có một vùng chứa riêng cho db.

  3. Tôi chỉ đang sử dụng tập lệnh cơ bản:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. Có, bạn có thể sử dụng chuyển đổi data-volume -v. Tôi sẽ sử dụng cái này để phát triển. Bạn có thể sử dụng gắn kết chỉ đọc, vì vậy sẽ không có thay đổi nào được thực hiện đối với thư mục này nếu bạn muốn (dù sao thì ứng dụng của bạn cũng nên lưu trữ dữ liệu ở một nơi khác).

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

    Dù sao, để triển khai cuối cùng, tôi sẽ xây dựng và hình ảnh bằng cách sử dụng dockerfile với ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. Tôi không biết :-)


6
tôi đã viết một hướng dẫn về cách viết một container mysql mà cụ gì bạn đang nói về ở # 1 txt.fliglio.com/2013/11/creating-a-mysql-docker-container
ben Schwartz

48
Chắc chắn cần phải có nhiều hướng dẫn / phương pháp hay nhất về quy trình này. :(
Reza S

Hướng dẫn này có thể cung cấp cho bạn một số hướng ..
Pithikos

Nếu bạn muốn lấy mã từ Github trong Docker, liên kết này đề xuất các khóa SSH chỉ đọc (vì vậy hình ảnh Docker có thể được liệt kê công khai) slash-dev-blog.me/docker-git.html
jhtong

4
@RoyTruelove như năm 2015, vả bây giờ phản đối ủng hộ Docker-soạn
allan.simon


4

Tôi hiểu rằng bài đăng này đã được hơn một năm vào thời điểm này, nhưng gần đây tôi đã tự hỏi mình những câu hỏi tương tự và có một số câu trả lời tuyệt vời cho câu hỏi của bạn.

  1. Bạn có thể thiết lập một phiên bản MySQL docker và có dữ liệu vẫn tồn tại trên một vùng chứa dữ liệu không trạng thái, hay còn gọi là vùng chứa dữ liệu không cần phải hoạt động

  2. Có, tôi khuyên bạn nên có một phiên bản riêng cho máy chủ web và cơ sở dữ liệu của bạn. Đây là sức mạnh của Docker.

  3. Kiểm tra repo này tôi đã và đang xây dựng. Về cơ bản, nó đơn giản như make build& make runvà bạn có thể có một máy chủ web và bộ chứa cơ sở dữ liệu chạy cục bộ.

  4. Bạn sử dụng -vđối số khi chạy vùng chứa lần đầu tiên, điều này sẽ liên kết một thư mục cụ thể trên vùng chứa với máy chủ đang chạy vùng chứa.

  5. Tôi nghĩ ý tưởng của bạn thật tuyệt và hiện tại có thể đạt được tất cả những gì bạn đang yêu cầu.

Đây là một giải pháp quan trọng để đạt được tất cả các nhu cầu mà bạn đã liệt kê.


1

Tôi đã tổng hợp một thiết lập soạn thư docker dễ sử dụng phù hợp với yêu cầu quy trình phát triển của bạn.

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

Những đặc điểm chính

  • DB liên tục
  • Lựa chọn của bạn về HHVM+ NGINXhoặc Apache2+PHP5
  • Gỡ lỗi và đặt các điểm ngắt với xDebug

Các README.md nên đủ rõ ràng để giúp bạn bắt đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.