‫Được rồi. Khối lượng có vẻ khá đơn giản, nhưng thực sự có rất nhiều thứ.
‫Cách đầu tiên bạn có thể nói với một vùng chứa rằng nó cần phải lo lắng về một khối lượng là trong Dockerfile.
‫Hãy đi kiểm tra một số trong số đó.
‫Tôi chỉ sẽ làm những gì tôi làm rất nhiều.
‫Tôi sẽ tìm kiếm MySQL.
‫Đây là cách tôi đã học được rất nhiều về Dockerfiles và cách sử dụng chúng một cách chính xác, là các kho lưu trữ chính thức có
‫cài đặt mặc định thực sự tốt và các phương pháp hay nhất được tích hợp sẵn.
‫Khi tôi truy cập vào MySQL ở đây, tôi sẽ nhấp vào Dockerfile mới nhất ở đây. Tôi cá với bạn vì nó là một
‫cơ sở dữ liệu, nó có thể có một lệnh âm lượng trong đó.
‫Chúng ta bắt đầu.
‫Đây là vị trí mặc định của cơ sở dữ liệu MySQL. Hình ảnh này được lập trình theo cách để nói với
‫Docker rằng khi chúng ta bắt đầu một vùng chứa mới từ nó, để thực sự tạo một vị trí ổ
‫đĩa mới và gán nó vào thư mục này trong vùng chứa. Điều đó có nghĩa là bất kỳ tệp nào chúng tôi đưa vào đó, trong vùng chứa, sẽ tồn
‫tại lâu hơn vùng chứa cho đến khi chúng ta xóa ổ đĩa theo cách thủ công.
‫Và đó là điều chúng ta nên chỉ ra ở đây là các tập cần xóa thủ công.
‫Bạn không thể làm sạch chúng chỉ bằng cách tháo một hộp đựng.
‫Chúng là một bước bổ sung. Điều đó thực sự chỉ dành cho bảo hiểm, bởi vì toàn bộ
‫điểm của lệnh khối lượng là muốn nói rằng dữ liệu này đặc biệt quan trọng, ít nhất là quan trọng hơn nhiều so với bản thân vùng chứa.
‫Nếu chúng tôi thực hiện kéo docker trên MySQL và sau
‫đó tôi thực hiện kiểm tra hình ảnh docker trên MySQL, chúng tôi sẽ không thấy Dockerfile vì tệp Docker thực sự không phải là một
‫phần của siêu dữ liệu hình ảnh, bạn sẽ nhận thấy trong phần này khu vực cấu hình, mà nó chỉ định khối
‫lượng đó ở đó.
‫Tôi luôn có thể nói rằng cấu hình, đến từ Dockerfile khi nó được tạo, đã gán một khối lượng cho
‫đường dẫn đó.
‫Hãy chạy một vùng chứa từ nó.
‫Vì vậy, docker container chạy -d --name mysql.
‫Nếu bạn nhớ trước đó, MySQL hơi đặc biệt.
‫Bây giờ nó yêu cầu một biến môi
‫trường trước khi nó hoạt động.
‫Đó là MYSQL_ALLOW_EMPTY_PASSWORD.
‫ĐƯỢC RỒI.
‫Những gì bạn thấy là MySQL đang chạy. Nếu chúng ta kiểm tra một bộ chứa
‫docker mysql, chúng ta sẽ thấy điều tương tự khi nó cho chúng ta biết trong cấu hình rằng có một khối lượng.
‫Nơi đây.
‫Chúng tôi cũng có thể nhìn thấy nó ở đây dưới các giá đỡ. Đây là gì, đây thực sự là vùng chứa đang chạy nhận vị trí duy
‫nhất của riêng nó trên máy chủ, để lưu trữ dữ liệu đó và sau đó nó ở trong nền, được ánh xạ hoặc gắn kết, đến vị trí đó trong vùng
‫chứa, để vị trí trong vùng chứa thực ra chỉ nghĩ rằng nó đang
‫ghi vào / var / lib / mysql.
‫Trong trường hợp này, chúng ta có thể thấy rằng dữ liệu đang thực sự sống ở vị trí đó trên máy chủ. Vì vậy, chúng ta hãy tạo ls âm lượng
‫của docker, và chúng ta có
‫thể thấy chúng ta hiện có một tập. Bây giờ chúng tôi nhận thấy điều này có ID duy nhất mà chúng tôi sẽ không bao
‫giờ biết cái quái gì sẽ xảy ra,
‫Phải không?
‫Vì vậy, chúng ta hãy kiểm tra điều đó.
‫Bạn không cần phải gõ toàn bộ.
‫Bạn chỉ cần nhập một vài ký tự đầu tiên và nhấn Tab để hoàn thành. Bạn sẽ nhận được thông
‫tin tương tự về chính tập.
‫Nếu bạn thực sự đang thực hiện việc này trên máy Linux, bạn có thể điều hướng đến vị trí đó trên ổ
‫cứng của mình và xem dữ liệu.
‫Thực tế sẽ có một số cơ sở dữ liệu ở đó.
‫Nếu bạn đang sử dụng máy Mac hoặc Windows, hãy nhớ rằng Docker cho Windows và Docker cho Mac thực
‫sự đang thực hiện một chút trong nền mà chúng tôi ẩn, nơi nó thực sự tạo ra một máy ảo Linux.
‫Vì vậy, dữ liệu này về mặt kỹ thuật nằm bên trong máy ảo Linux đó. Bạn sẽ không thể đi đến đường dẫn đó trên máy
‫Windows hoặc Mac và xem dữ liệu. Nó thực sự bên trong máy ảo đó.
‫Chúng ta sẽ tìm hiểu một chút, với các ổ đĩa được gắn kết, chúng ta cũng có thể khắc phục hạn chế đó như thế nào.
‫Bằng cách nhìn vào điều này, bạn nhận thấy rằng nó không thân thiện với người dùng về mặt cho chúng tôi biết những
‫gì trong đó hoặc tập này được gán cho cái gì.
‫Từ góc nhìn của thùng chứa, chúng ta có thể thấy khối lượng mà nó đang sử dụng, nhưng chúng tôi không thể thấy từ góc độ khối lượng
‫mà nó được kết nối với cái gì.
‫Đúng?
‫Nếu tôi chỉ muốn nhấn Mũi tên Lên và, hãy xem, hãy tạo một mysql2.
‫Đó là bây giờ đã tạo một máy chủ MySQL khác chạy trong nền.
‫Nếu tôi thực hiện một âm lượng docker khác, bạn sẽ thấy hai trong số chúng.
‫Bạn bắt đầu thấy vấn đề, phải không?
‫Không có cách nào thực sự dễ dàng ở đây để phân biệt người này với người kia.
‫Nếu chúng ta chỉ, để chứng minh một luận điểm, hãy thực hiện một bộ chứa docker dừng mysql, và một docker một container
‫dừng mysql2.
‫Chúng tôi thực hiện một ls container docker, chúng tôi sẽ không thấy bất kỳ container nào đang chạy. Nếu chúng ta làm một ls -a, chúng ta
‫sẽ thấy tất cả chúng. Và lưu ý rằng chúng đã dừng lại. Và sau đó chúng tôi thực hiện ls khối lượng docker,
‫bạn nhận thấy chúng tôi vẫn còn hai tập.
‫Nếu tôi thực hiện một vùng chứa docker rm mysql và sau đó là mysql2, bởi vì tôi thực sự có thể thực hiện cả hai điều đó
‫trong một lệnh, nó sẽ xóa cả hai vùng chứa của tôi. Nếu bây giờ tôi thực hiện ls âm lượng docker, thì các tập
‫của tôi vẫn ở đó. Dữ liệu của tôi vẫn an toàn.
‫Vì vậy, chúng tôi đã giải quyết một vấn đề.
‫Cơ sở dữ liệu tồn tại lâu hơn tệp thực thi.
‫Làm thế nào để chúng tôi làm cho điều này trở nên thân thiện hơn với người dùng?
‫Đó là nơi các ổ đĩa được đặt tên xuất hiện và khả năng để chúng ta chỉ định những thứ trên lệnh
‫chạy của docker.
‫Nếu tôi nhấn Mũi tên lên một vài lần cho đến khi tôi đến chỗ chạy của docker container, thì việc bạn sẽ chạy lại cái
‫nào không thực sự quan trọng.
‫Trong trường hợp này, chúng ta sẽ thực sự đưa vào lệnh -v. A -v cho phép chúng tôi chỉ định một ổ đĩa
‫mới mà chúng tôi muốn tạo cho vùng chứa sắp chạy này hoặc nó cho phép chúng tôi hai tùy
‫chọn khác.
‫Một trong số chúng ở đây là tạo một tập đã đặt tên.
‫Nếu tôi chỉ làm -v, và sau đó là var lib mysql, điều đó sẽ làm tương tự như những gì lệnh volume
‫của chúng tôi trong Dockerfile đã làm.
‫Chúng tôi không thực sự cần thiết phải làm điều đó ở đây. Nhưng những gì chúng ta có thể làm là tôi có thể đặt một cái tên
‫trước nó bằng dấu hai chấm. Đó được gọi là "tập được đặt tên. "Khi tôi làm
‫điều đó và sau đó thực hiện ls âm lượng docker, bạn sẽ thấy rằng vùng chứa mới của tôi đang sử dụng một ổ đĩa mới và nó đang sử dụng
‫một cái tên thân thiện.
‫Nếu chúng tôi kiểm tra khối lượng docker trên mysql đó, bạn sẽ thấy rằng điều này dễ sử dụng hơn ở đây.
‫Nếu tôi xóa vùng chứa của mình một lần nữa và chúng ta phải đặt -f
‫vì nó vẫn đang chạy, và sau đó tôi chạy một vùng chứa khác. Và lần này, tôi sẽ đặt cho
‫nó một cái tên khác. Và sau đó chúng tôi thực hiện một âm lượng docker khác, bạn sẽ
‫thấy rằng có vẻ như chúng tôi chưa tạo một tập mới. Nó vẫn sử dụng cùng một khối lượng.
‫Hãy thực hiện kiểm tra vùng chứa docker trên mysql3. Sau đó, những gì chúng ta sẽ thấy ở đây là, vâng, đây là
‫những gì đã được cấu hình nhưng chúng ta đang chạy những gì?
‫Đây là thú cưỡi của chúng ta ở trên này.
‫Ở đây chúng ta sẽ thấy rằng không chỉ tên thân thiện hơn, mà nó còn thực sự thay đổi vị trí nguồn trở
‫nên thân thiện hơn một chút.
‫Đối với tôi, một mẹo nhỏ ở đây là khi tôi đang chạy trong nhiều ngày hoặc nhiều tuần tại một thời điểm, một cơ sở dữ liệu cụ thể, trong
‫một vùng chứa cụ thể mà tôi cần tiếp tục sử dụng nhiều lần và tôi không muốn có một máy
‫chủ cơ sở dữ liệu trống, tôi Tôi sẽ kết thúc việc tạo các vùng chứa của tôi theo cách này và đặt tên chúng cho dự án để tôi biết khối lượng
‫đó dùng để làm gì
‫và nó cần gắn bó với nhau.
‫Một điều cuối cùng ở đây.
‫Tại sao bạn muốn tạo khối lượng docker?
‫Nếu chúng ta có thể tạo chúng từ lệnh chạy vùng chứa docker trong thời gian chạy và chúng ta có thể tạo chúng bằng cách chỉ định chúng trong Dockerfile, thì chỉ
‫có một số trường hợp bạn muốn tạo nó trước. Và bạn thực sự có thể tìm ra điều
‫đó khá nhanh chóng bằng cách sử dụng lệnh trợ giúp.
‫Bởi vì đây là cách duy nhất mà chúng tôi thực sự có thể chỉ định một trình điều khiển khác.
‫Hãy nhớ rằng nội dung plug-in mà tôi sẽ nói sau?
‫Sau đó, bất kỳ tùy chọn trình điều khiển nào mà chúng tôi muốn sử dụng -o trên.
‫Sau đó, nếu chúng ta muốn dán nhãn lên nó, điều này chúng ta sẽ nói đến ở phần sau trong phần sản xuất.
‫Đôi khi, trong những trường hợp đặc biệt, bạn cần tạo khối lượng Docker trước thời hạn, nhưng thông thường cho mục đích phát
‫triển cục bộ của bạn, chỉ cần chỉ định nó trong Dockerfile hoặc lệnh chạy là được.