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:
- User không phải root có quyền sudo, làm theo hướng dẫn Cài đặt Server Ban đầu với Ubuntu 18.04 .
- Docker được cài đặt theo hướng dẫn từ Bước 1 và Bước 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 18.04 .
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ổng80
theo mặc định. Cờ này ánh xạ cổng80
đến cổng5000
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ệnhnginx -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:
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ư :
Output203.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 .
Các tin liên quan
Cách cài đặt Docker Compose trên Ubuntu 18.042018-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