Thứ tư, 11/07/2018 | 00:00 GMT+7

Cách chia sẻ dữ liệu giữa Docker Container và Host

Nói chung, containers Docker là tạm thời, chỉ chạy miễn là lệnh được đưa ra trong containers hoàn tất. Theo mặc định, mọi dữ liệu được tạo bên trong containers chỉ có sẵn từ bên trong containers và chỉ khi containers đang chạy.

Dung lượng Docker được dùng để chia sẻ file giữa hệ thống server và containers Docker. Ví dụ: giả sử bạn muốn sử dụng Docker image Nginx chính thức và giữ một bản sao vĩnh viễn của các file log của Nginx để phân tích sau này. Theo mặc định, Docker image nginx sẽ đăng nhập vào folder /var/log/nginx bên trong containers Docker Nginx. Thông thường, nó không thể truy cập được từ hệ thống file server .

Trong hướng dẫn này, ta sẽ khám phá cách làm cho dữ liệu từ bên trong containers có thể truy cập được trên server .

Yêu cầu

Để theo dõi bài viết này, bạn cần một server Ubuntu 18.04 với những thứ sau:

Nếu bạn mới sử dụng Docker, loạt bài Hệ sinh thái Docker cung cấp tổng quan chi tiết về các khái niệm chính.

Lưu ý: Mặc dù các yêu cầu đưa ra hướng dẫn để cài đặt Docker trên Ubuntu 18,04, các docker lệnh cho data volumes Docker trong bài viết này sẽ làm việc trên các hệ điều hành khác miễn là Docker được cài đặt.

Bước 1 - Ràng buộc một dung lượng

Lệnh sau sẽ tạo một folder có tên nginxlogs trong folder chính của user hiện tại của bạn và mount nó vào /var/log/nginx trong containers :

  • docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

Hãy dành một chút thời gian để kiểm tra chi tiết lệnh này:

  • --name=nginx đặt tên cho containers để ta có thể tham khảo nó dễ dàng hơn.
  • -d tách quy trình và chạy nó trong nền. Nếu không, ta sẽ chỉ xem một dấu nhắc Nginx trống và sẽ không thể sử dụng terminal này cho đến khi ta giết Nginx.
  • -v ~/nginxlogs:/var/log/nginx cài đặt một dung lượng bindmount liên kết folder /var/log/nginx từ bên trong containers Nginx với folder ~/nginxlogs trên server . Docker sử dụng : để tách đường dẫn của server khỏi đường dẫn containers và đường dẫn server luôn đến trước.
  • -p 5000:80 cài đặt một cổng chuyển tiếp. Bộ chứa Nginx đang nghe trên cổng 80 theo mặc định. Cờ này ánh xạ cổng 80 đến cổng 5000 container trên hệ thống server .
  • nginx chỉ định rằng containers phải được xây dựng từ hình ảnh Nginx, lệnh này sẽ đưa ra lệnh nginx -g "daemon off" để khởi động Nginx.

Lưu ý: Cờ -v rất linh hoạt. Nó có thể liên kết số lượng hoặc đặt tên cho một tập chỉ với một chút điều chỉnh trong cú pháp. Nếu đối số đầu tiên bắt đầu bằng dấu / hoặc ~/ , bạn đang tạo số lượng ràng buộc. Loại bỏ điều đó và bạn đang đặt tên cho tập.

  • -v /path:/path/in/container mount folder server , /path tại /path/in/container
  • -v path:/path/in/container tạo ra một ổ đĩa có tên là path không có mối quan hệ với server .

Để biết thêm về các tập đã đặt tên, hãy xem Cách chia sẻ dữ liệu giữa các containers Docker

Bước 2 - Truy cập dữ liệu trên server lưu trữ

Như vậy, ta có một bản sao của Nginx đang chạy bên trong containers Docker trên máy của ta và cổng 5000 của server của ta ánh xạ trực tiếp đến bản sao của cổng 80 của Nginx.

Tải địa chỉ trong trình duyệt web, sử dụng địa chỉ IP hoặc tên server của server của bạn và số cổng: http:// your_server_ip :5000 . Bạn nên thấy:

Trang bắt đầu Nginx

Thú vị hơn, nếu ta nhìn vào folder ~/nginxlogs trên server , ta sẽ thấy access.log được tạo bởi nginx của containers , nó sẽ hiển thị yêu cầu của ta :

  • cat ~/nginxlogs/access.log

Điều này sẽ hiển thị thông tin như :

Output
203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

Nếu bạn thực hiện bất kỳ thay đổi nào đối với folder ~/nginxlogs , bạn cũng có thể nhìn thấy chúng từ bên trong containers Docker trong thời gian thực.

Kết luận

Trong hướng dẫn này, ta đã trình bày cách tạo data volumes Docker để chia sẻ thông tin giữa containers và hệ thống file server . Điều này hữu ích trong môi trường phát triển, nơi cần có quyền truy cập vào log để gỡ lỗi. Để tìm hiểu thêm về cách chia sẻ dữ liệu liên tục giữa các containers , hãy xem Cách chia sẻ dữ liệu giữa các Vùng chứa Docker .


Tags:

Các tin liên quan

Cách cài đặt Docker Compose trên Ubuntu 18.04
2018-07-09
Cách cài đặt và sử dụng Docker trên Ubuntu 18.04
2018-07-05
Cách kiểm tra bảo mật server Docker với Docker Bench cho bảo mật trên Ubuntu 16.04
2018-06-14
Cách cung cấp và quản lý server Docker từ xa bằng Máy Docker trên Ubuntu 16.04
2018-05-21
Cách cung cấp và quản lý server Docker từ xa bằng Máy Docker trên CentOS 7
2018-05-21
Cách quản lý và giám sát các container Docker có khô trên Ubuntu 16.04
2018-04-25
Cách tạo image Docker và lưu trữ kho lưu trữ image Docker với GitLab
2018-02-12
3 Mẹo để Đặt tên container Docker
2018-01-04
3 Mẹo để Đặt tên container Docker
2018-01-04
Cách cài đặt Docker Compose trên Ubuntu 16.04
2017-12-21