Nhiều ngôn ngữ, khung, kiến trúc và giao diện rời rạc giữa các công cụ cho từng giai đoạn vòng đời của sản phẩm tạo ra sự phức tạp lớn.
Docker đã cách mạng hóa ngành phát triển phần mềm, đồng thời đơn giản hóa và tăng tốc quy trình làm việc của nhà phát triển, đồng thời cho phép họ tự do lựa chọn công cụ, ngăn xếp ứng dụng và môi trường triển khai cho từng dự án.
Bằng cách sử dụng bộ chứa docker, các nhà phát triển có thể đóng gói tất cả mã cho một ứng dụng và tất cả các phần phụ thuộc của nó vào một gói chạy trơn tru và đáng tin cậy, bất kể môi trường máy tính.
Vì vậy, do bộ chứa docker cách ly phần mềm khỏi môi trường phần cứng của nó và đảm bảo rằng phần mềm đó hoạt động đồng nhất, nên phần mềm được chứa trong bộ chứa luôn chạy giống nhau, bất kể cơ sở hạ tầng.
Do đó, câu hỏi thường được đặt ra là có nên sao lưu các vùng chứa docker hay không.
Thoạt nhìn và vì một vùng chứa đang chạy chỉ là tạm thời nên có vẻ như chúng không hoạt động. Tuy nhiên, khi kiểm tra kỹ hơn, việc sao lưu các container docker để bảo vệ khỏi thảm họa là điều hợp lý.
Với bài đăng này, chúng ta sẽ xem xét một số trường hợp nên sao lưu các vùng chứa, những gì cần được sao lưu và cách thực hiện sao lưu.
Chúng ta cũng sẽ xem cách khôi phục hình ảnh đã sao lưu. Tuy nhiên, trước khi xem xét điều này, chúng tôi sẽ tóm tắt ngắn gọn về một số điều cơ bản về bộ chứa docker.
Khái niệm cơ bản về bộ chứa Docker
Bộ chứa là một loại ảo hóa và Docker là nền tảng bộ chứa phổ biến nhất mà các nhà phát triển sử dụng để chạy các ứng dụng của họ.
Đó là một nền tảng mở để phát triển, vận chuyển và chạy các ứng dụng cho phép các nhà phát triển tách ứng dụng của họ khỏi cơ sở hạ tầng để họ có thể phân phối phần mềm một cách nhanh chóng.
Nói cách khác, bằng cách sử dụng các phương pháp của docker để vận chuyển, thử nghiệm và triển khai mã một cách nhanh chóng, các nhà phát triển có thể giảm độ trễ giữa việc viết mã và chạy mã trong sản xuất.
Tại sao Docker cần sao lưu?
Trước đây, các bản sao lưu bao gồm một tác nhân được đặt trong một máy chủ cần được sao lưu. Tuy nhiên, quá trình ảo hóa đã phá vỡ mô hình đó, do đó, một mô hình mới đã được tạo trong đó tác nhân chạy ở cấp trình ảo hóa và sao lưu các máy ảo dưới dạng hình ảnh.
Thật không may, vùng chứa không cung cấp bất kỳ tùy chọn nào trong số này. Mặc dù vậy, trong một số trường hợp, các vùng chứa cần phải được sao lưu, vì vậy, hãy xem khi nào các nhà phát triển nên xem xét việc sao lưu các vùng chứa của họ.
Bởi vì tính sẵn sàng cao được tích hợp vào mọi phần của cơ sở hạ tầng vùng chứa, nhiều người ủng hộ vùng chứa thường chỉ ra rằng không cần thiết phải sao lưu.
Ngoài ra, họ nói, Kubernetes luôn được chạy trong một cụm và các thùng chứa được sinh ra và tiêu diệt khi cần thiết. Thật không may, khi nghĩ theo cách này, nhiều người nhầm lẫn giữa tính sẵn sàng cao được tích hợp trong các thùng chứa với khả năng phục hồi sau thảm họa, nếu nó xảy ra.
Chắc chắn, một vùng chứa thông thường không cần phải sao lưu trạng thái đang chạy của nó và hầu hết các vùng chứa đều không có trạng thái. Nói cách khác, không có dữ liệu nào được lưu trữ trong vùng chứa và nó chỉ là một phiên bản đang chạy khác của một hình ảnh vùng chứa nhất định đã được lưu ở một nơi khác.
Nhưng điều gì sẽ xảy ra nếu một lỗi loại bỏ toàn bộ cụm, nút bộ chứa và bộ lưu trữ liên tục được liên kết. Điều này có nghĩa là nhà phát triển sẽ phải sao chép toàn bộ môi trường Kubernetes và Docker của họ, một điều không thể xảy ra nếu không có bản sao lưu.
Nói một cách đơn giản hơn, tùy thuộc vào cách ứng dụng và dữ liệu của nó được triển khai, có thể cần sao lưu.
Những gì cần được sao lưu cho Docker?
Gặp một trong các trường hợp cần sao lưu thì sao lưu những gì? Hãy xem qua.
Sao lưu hình ảnh vùng chứa
Hình ảnh vùng chứa là gói phần mềm nhẹ, độc lập, có thể thực thi được bao gồm mọi thứ cần thiết để chạy ứng dụng từ mã đến thời gian chạy, công cụ hệ thống, thư viện hệ thống và cài đặt.
Bởi vì docker container image trở thành container khi chúng chạy trên Docker Engine, chúng không thay đổi.
Vì vậy, nếu bất kỳ thư viện hoặc mã nào cho một vùng chứa nhất định thay đổi, một hình ảnh mới sẽ được tạo cho vùng chứa đó. Vì lý do này, hình ảnh thường được bảo vệ bằng cách sử dụng một kho lưu trữ và ngược lại, kho lưu trữ đó cũng phải được bảo vệ.
Lưu trữ đính kèm hoặc sao lưu cơ sở dữ liệu
Ví dụ, khi có nhu cầu làm cho các ứng dụng trong vùng chứa bền bỉ hơn, khi chạy cơ sở dữ liệu trong hệ sinh thái vùng chứa, về cơ bản, các nhà phát triển có hai lựa chọn.
Một là tạo vùng chứa không trạng thái nơi cơ sở dữ liệu được sao chép vào vùng chứa khi nó được tạo. Một cách khác là lưu trữ dữ liệu trên một hệ thống tệp hoặc ổ đĩa và đính kèm nó vào vùng chứa khi khởi động.
Điều này cần được sao lưu và khi được sao lưu, ổ đĩa sao lưu docker sẽ khôi phục dữ liệu khi ổ đĩa được khôi phục.
Sao lưu ổ đĩa liên tục
Kubernetes pods đang ngày càng sử dụng bộ nhớ liên tục. Điều này có nghĩa là có thể cần sao lưu để bảo vệ bộ lưu trữ liên tục và dữ liệu được tạo trên đó.
Sao lưu triển khai
Triển khai Kubernetes được sử dụng để cho Kubernetes biết cách tạo hoặc sửa đổi các phiên bản của nhóm chứa ứng dụng được chứa.
Họ cũng có thể thay đổi quy mô số lượng nhóm bản sao, cho phép triển khai mã được cập nhật theo cách được kiểm soát hoặc quay trở lại phiên bản Triển khai cũ hơn nếu cần. Việc triển khai được mô tả và lưu trữ trong các tệp YAML (hoặc JSON) và các tệp này cần được sao lưu.
Sao lưu Kubernetes vvd
Cơ sở dữ liệu trung tâm Kubernetes là etcd và nó cần được sao lưu. Đó là một tệp nhỏ và Kubernetes cung cấp các công cụ cần thiết để đưa nội dung của nó vào một tệp mà bạn có thể sao lưu.
Sao lưu tài nguyên Kubernetes
Vì các nhà phát triển tạo tài nguyên trong Kubernetes nên những tài nguyên đó cần được sao lưu với nhóm và phiên bản phù hợp.
Tuy nhiên, không phải mọi thứ đều cần được sao lưu. Ví dụ: một vùng chứa không trạng thái đang chạy chỉ là tạm thời và được tạo ra từ một hình ảnh vùng chứa, vì vậy không cần phải sao lưu vùng chứa này. Tuy nhiên, hãy nhớ rằng mọi dữ liệu mà nó tạo ra đều có thể được sao lưu.
Tương tự như vậy, vì các nhóm chỉ là nhóm các vùng chứa đang chạy nên chúng không cần phải sao lưu.
Đối với các yếu tố cần được sao lưu, mỗi yếu tố cung cấp một công cụ riêng có thể được sử dụng để sao lưu nó vào bộ nhớ cục bộ hoặc từ xa. Để giải quyết vấn đề này, chúng ta hãy xem quy trình sao lưu bộ chứa Docker.
Cách sao lưu Docker Container
Trước khi sao lưu một docker container, chúng ta cần container ID
của container cụ thể đó. Ở đây, sẽ sử dụng ps
để lấy ID của tất cả các vùng chứa đang chạy.
Từ đây, chúng ta có thể sao chép container ID
của vùng chứa mà chúng ta cần sao lưu.
Vì vậy, để liệt kê tất cả ID của tất cả các vùng chứa đang chạy, hãy sử dụng lệnh sau:
docker ps -a
Trong kết quả, chúng tôi sẽ tìm kiếm container ID
của bộ chứa docker mà chúng tôi muốn sao lưu, sao chép nó và sau đó sử dụng nó với Docker commit
yêu cầu. Định dạng cho lệnh này là:
docker commit −p <CONTAINER_ID> <BACKUP_NAME>
Vì vậy, ví dụ, nếu container ID
của container của chúng tôi là 5c7d78fcb634
, và tên của bản sao lưu của chúng tôi là our-docker-backup
, lệnh sẽ là:
docker commit −p 5c7d78fcb634 our-docker-backup
Với lệnh này, trước tiên chúng tôi đã tạm dừng một vùng chứa đang chạy với -p
tùy chọn và chúng tôi đã cam kết lưu toàn bộ ảnh chụp nhanh dưới dạng hình ảnh docker với tên our-docker-backup
.
Chúng ta cũng có thể lưu hình ảnh dưới dạng tar
tệp trên máy cục bộ của chúng tôi bằng cách sử dụng lệnh:
docker save −o ∽/our-docker-backup.tar our-docker-backup
Chúng ta có thể kiểm tra xem tệp đã được lưu hay chưa bằng cách sử dụng lệnh:
ls −l ∽/our-docker-backup.tar
Khi nó được lưu dưới dạng tar
tệp, chúng tôi có thể di chuyển nó đến bất kỳ hệ thống máy chủ docker mong muốn nào khác để triển khai.
Chúng tôi cũng có thể triển khai lại our-docker-backup
image trên hệ thống máy chủ docker khác bằng cách sử dụng lệnh đẩy để đẩy hình ảnh vào kho lưu trữ docker riêng.
Để làm điều này, sẽ sử dụng lệnh:
docker login
docker push our-docker-backup
Bây giờ chúng ta đã sao lưu bộ chứa Docker của mình, hãy xem quy trình khôi phục bộ chứa Docker, cục bộ hoặc trên một máy khác.
Cách khôi phục bản sao lưu Docker
Nếu chúng ta đã lưu tar
tập tin trên máy chủ của chúng tôi, chúng tôi có thể khôi phục nó bằng cách sử dụng docker load
yêu cầu. Để làm điều này, chúng tôi sẽ sử dụng lệnh:
docker load −i ∽/our-docker-backup.tar
Để đảm bảo rằng hình ảnh đã được khôi phục thành công, chúng ta có thể liệt kê tất cả các hình ảnh bằng lệnh sau:
docker images
Nếu chúng tôi đã đẩy hình ảnh sao lưu vào kho lưu trữ docker, chúng tôi có thể sử dụng pull
lệnh lấy dữ liệu từ kho lưu trữ.
Ở đây, chúng ta sẽ sử dụng lệnh:
docker pull our-docker-backup:tag
Khi chúng tôi đã khôi phục hình ảnh đã sao lưu trên máy cục bộ của mình, chúng tôi có thể sử dụng run
lệnh để chạy một phiên bản mới của hình ảnh docker khôi phục. để làm điều này, chúng tôi sử dụng lệnh:
docker run −ti our-docker-backup:tag
Suy nghĩ cuối cùng
Bây giờ chúng tôi đã trình bày cách sao lưu và khôi phục bộ chứa docker. Điều này hữu ích khi các nhà phát triển muốn di chuyển bộ chứa docker đang chạy trên máy chủ của họ sang máy khác và khi họ muốn sao lưu bộ chứa docker của mình vì những lý do đã đề cập ở trên.
Hy vọng rằng hướng dẫn này hữu ích trong việc chỉ ra khi nào cần sao lưu bộ chứa docker, những gì nên được sao lưu và cách thực hiện.