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
- 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
- Xây dựng hình ảnh docker
- 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
- Đặt
- 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 - Điền vào cơ sở dữ liệu
- Làm việc ở
/dev/cmsdir/
- Cam kết và đóng bộ chứa docker
Triển khai
- Thiết lập máy chủ lưu trữ từ xa (ví dụ với ansible)
- Đẩy hình ảnh vùng chứa đến máy chủ từ xa
- Tìm nạp-
cmsdir
dự án qua git - Chạy bộ chứa docker, kéo vào cơ sở dữ liệu và gắn kết
cmsdir
và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:
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?
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?
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?
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?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?