Docker (2) - Chia sẻ dữ liệu giữa hệ điều hành chủ và container

 Bài trước: Docker (1) - Docker, image và container

-------

1.1       Chia sẻ dữ liệu giữa hệ điều hành chủ và container

Ý tưởng của chia sẻ dữ liệu giữa hệ điều hành chủ (host OS) và container là tạo một thư mục trong hệ điều hành chủ > chia sẻ thư mục đó > tạo một kết nối từ Docker tới thư mục chia sẻ > rồi từ container thực hiện tạo ánh xạ tới thư mục trong Docker.

Khi đã có thư mục chia sẻ, muốn chia sẻ thông tin giữa hệ điều hành chủ và container sẽ thực hiện chép thông tin vào thư mục chia sẻ.

Ví dụ:

– Trong ổ đĩa D:\ của hệ điều hành chủ, tạo thư mục dulieu, trong thư mục dulieu, tạo tập tin test.txt, trong tập tin test.txt nhập nội dung “Xin chao bac Teo”

– Chia sẻ thư mục dulieu cho everyone với quyền đầy đủ (full control)

– Bấm chuột trái vào biểu tượng docker (trên khay hệ thống – system tray) > chọn Settings > chọn Resources > chọn FILE SHARING > bấm dấu + ở khung bên phải trỏ tới D:\dulieu

– Mở PowerShell, tạo một container chứa hệ điều hành Ubuntu, có ánh xạ tới thư mục D:\dulieu

docker run –it –v <đường dẫn thư mục trên hệ điều hành chủ>:<đường dẫn thư mục ánh xạ trên container><một phần ID container>

Ví dụ:

docker run -it -v d:/dulieu:/home/dulieu 4e2

– Khi tạo được container, cửa sổ PowerShell sẽ chuyển sang dòng lệnh của container Ubuntu

– Dùng lệnh cd để chuyển qua thư mục home/dulieu, dùng lệnh ls để kiểm tra nội dung trong dulieu

– Tạo tập tin bên hệ điều hành Windows; dùng lệnh touch để tạo tập tin trong Ubuntu để kiểm tra dữ liệu xuất hiện trong thư mục chia sẻ.

1.2        Chia sẻ dữ liệu giữa các container

Ý tưởng để chia sẻ dữ liệu giữa các container, là cho các container cùng trỏ về một thư mục chia sẻ của docker.

Ví dụ:

– Tạo container đầu tiên trỏ tới thư mục chia sẻ của docker là dulieu

docker run -it -v d:/dulieu:/home/dulieu 4e2

– Tạo thêm container thứ hai trỏ tới ổ đĩa của container đầu tiên

docker run -it --name container2 --volumes-from 27d1 ubuntu:latest

– Chuyển dấu nhắc lệnh vào conatiner2 để kiểm tra thư mục dulieu

docker attach 48a

1.3       Tạo các volume cho docker

Trong docker bạn có thể tạo ra các ổ đĩa cứng logic, gọi là các volume. Các volume này có thể gắn vào các container bất kì. Khi xóa các container thì không các volume không bị ảnh hưởng (vẫn tồn tại).

Để kiểm tra các volume trên docker, sử dụng lệnh docker volume ls

Để tạo volume sử dụng lệnh: docker volume create <tên volume>

Ví dụ:

docker volume create data1

Để xem thông tin của một volume, sử dụng lệnh docker volume inspect <tên volume>

Ví dụ:

docker volume inspect data1

Kết quả là:

[

    {

        "CreatedAt": "2020-09-06T09:42:11Z",

        "Driver": "local",

        "Labels": {},

        "Mountpoint": "/var/lib/docker/volumes/data1/_data",

        "Name": "data1",

        "Options": {},

        "Scope": "local"

    }

]

Để xóa một volume, sử dụng lệnh docker volume rm <tên volume>

Ví dụ:

docker volume rm data1

1.4       Gắn volume vào container

Khi đã có các volume trên docker, để gắn volume vào container, sử dụng lệnh sau:

docker run –it --mount source=<tên volume>, target=<tên thư mục sẽ gắn tới volume> <ID của image>

Ví dụ:

docker run -it --name may3 --mount source=data1,target=/home/dulieu 4e2

1.5       Tạo volume và gắn vào thư mục của hệ điều hành chủ

Để tạo một volume và gắn vào thư mục của hệ điều hành chủ, sử dụng lệnh sau (lưu ý: thư mục trên hệ điều hành chủ phải được chia sẻ):

docker volume create --opt device=<thư mục trên hệ điều hành chủ> --opt type=none –opt o=bind <tên volume>

Ví dụ:

docker volume create --opt device=/localhost/dulieu --opt type=none --opt o=bind data2

Xem thông tin của data2:

docker volume inspect data2

Kết quả:

[

    {

        "CreatedAt": "2020-09-06T10:46:19Z",

        "Driver": "local",

        "Labels": {},

        "Mountpoint": "/var/lib/docker/volumes/data2/_data",

        "Name": "data2",

        "Options": {

            "device": "/localhost/dulieu",

            "o": "bind",

            "type": "none"

        },

        "Scope": "local"

    }

]

Để gắn volume vừa tạo vào một container, sử dụng lệnh sau:

docker run –it –v <tên volume>:<đường dẫn của thư mục đích><một phần ID của image>

Ví dụ:

docker run -it -v data3:/home/disk 4e2

docker: Error response from daemon: error while mounting volume '/var/lib/docker/volumes/data3/_data': failed to mount local volume: mount /localhost/dulieu:/var/lib/docker/volumes/data3/_data, flags: 0x1000: no such file or directory.

1.9       Luồng làm việc dựa trên Docker

Quan sát hình sau:




Khi làm việc với Docker thường gồm các công đoạn: Build, Ship và Run.
– Build: thiết lập, cài đặt môi trường phát triển
­– Ship: lưu các thiết lập ở bước Build thành image
– Run: chạy và quản lý các image ở bước Ship
Quá trình Build do các lập trình viên (developer) thực hiện. Quá trình Run do các quản trị viên tại bộ phận triển khai (IT Operation) thực hiện.

-----

Cập nhật: [1/10/2020]
-----
Xem thêm: Docker (3) -
Xem thêm: Danh sách bài học