Ở phần này chúng ta sẽ tìm hiểu về Docker volume, docker compose, docker network và docker swarm.
Docker Volume
Volumes là một cơ chế yêu thích dùng để tạo ra và sử dụng bới Docker containers. Trong khi bind mounts bị phụ thuộc vào cấu trúc thư mục của máy host, volumes hoàn toàn được quản lý bới Docker.
Một số lợi ích khi sử dụng volumes:
- Dễ dàng back up hoặc migrate hơn khi sử dụng bind mounts.
- Dễ dàng quản lý volumes với Docker CLI hoặc Docker API.
- Volumes hoạt động với cả Linux và Windows containers.
- Sử dụng volumes an toàn hơn khi chia sẻ dữ liệu giữa các containers
- Dữ liệu của volumes có thể được điền trước bởi container.
Ta sử dụng Docker volume khi:
- Chia sẻ dữ liệu giữa các containers và giữa container và host.
- Dùng để backup dữ liệu vì thông thường các dữ liệu tạo ra bởi container sẽ biến mất khi ta tắt container.
- Gắn thư mục của host với container.
- Tăng hiệu năng của container.
Docker compose
Compose là một công cụ để định nghĩa và chạy multi-container Docker applications. Với compose, ta có thể sử dụng YAML file để cấu hình services của application. Với một câu lệnh, ta có thể dễ dàng create và start tất cả các services để chạy ứng dụng.
Compose hoạt động ở tất cả môi trường: production
, staging
, development
, testing
, cũng như CI workflows
.
Ta có thể sử dụng Compose đơn giản với 3 bước như sau:
- Định nghĩa môi trường của ứng dụng với Dockerfile.
- Định nghĩa các services cho ứng dụng trong file
docker-compose.yml
để ta có thể chạy các sercive cùng nhau. - Chạy
docker-compose up
.
Một file docker-compose.yml
sẽ trông như thế này:
version: "3.9" # optional since v1.27.0
services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis
volumes: logvolume01: {}
Giải thích về file .yml
một chút:
Thuật ngữ | Ý nghĩa |
---|---|
version |
Phiên bản của docker-compose |
services |
Nơi liệt kê các services |
build |
Sử dụng xây dựng container từ image do mình tự tạo bởi Dockerfile (ở đây Dockerfile sẽ nằm cùng thư mục với file .yml ) |
ports |
Cấu hình cổng kết nối (host:container) |
volumes |
Gắn đường dẫn trên host để sử dụng trên container |
links |
Liên kết các services với nhau |
image |
Chỉ ra image được sử dụng cho container |
Docker network
Docker network dùng để gắn địa chỉ ip cho các container thông qua một virtual bridge.
Một số kiểu docker network mặc định:
- Bridge: network driver mặc định. Nếu không xác định một driver. thì Docker tự hiểu là driver này. Thường sử dụng khi ứng dụng chạy trên container riêng lẻ.
- Hosr: Cho một container độc lập, xóa bỏ sự cô lập giữa docker host và container và dùng chính network của host đó một cách trực tiếp.
- None: Cho loại container này, ngắt kết nối với tất cả networking. Thường dùng kết hợp với một network driver tùy chỉnh.
Docker swarm
Docker swarm là một nhóm các máy vật lý hoặc máy ảo chạy trên Docker và cùng tham gia một cluster. Bạn có thể chạy các lệnh của Docker thông qua cluster trên swarm manager.
Một số lệnh cơ bản của swarm:
Câu lệnh | Ý nghĩa |
---|---|
docker swarm init |
Khởi tạo một swarm |
docker swarm join |
Thực hiện một máy khác để đưa máy đó vào swarm. Nếu pass token máy đó sẽ đóng vai trò là worker |
docker node ls |
Liệt kê các node trong swarm |
docker swarm leave |
Đưa node ra khỏi swarm |
Tổng kết
Như vậy qua bài này ta đã tìm hiểu được:
- Thế nào là Docker Volume? Tại sao ta lại cần Docker Volume? Ta dùng Docker Volume khi nào?
- Docker Compose là gì? Cấu trúc của một file
.yml
- Docker Network là gì? Có những kiểu Docker Network mặc định nào?
- Docker Swam là gì? Một vài câu lệnh cơ bản của Docker Swarm
Tài liệu tham khảo
https://docs.docker.com/compose/