Tìm hiểu về Docker. (phần 3)
Bài đăng này đã không được cập nhật trong 4 năm
Phần trước: Chúng ta đã tìm hiểu về Docker Hub cũng như biết thêm các lệnh thường dùng để thao tác Docker Image, Docker Container. .Ở phần này cùng tìm hiểu các khái niệm khá là quan trọng, và áp dụng rất nhiều vào các dự án thực tế của Docker.
Mục lụ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ì?
-
- Docker Network là gì? Có những kiểu Docker Network mặc định nào?
-
- Docker Swarm là gì? Một vài câu lệnh cơ bản của Docker Swarm.
1. Thế nào là Docker Volume? Tại sao ta lại cần Docker Volume? Ta dùng Docker Volume khi nào?
Volume là cơ chế ưa thích để tạo ra và sử dụng dữ liệu của Docker. Trong khi việc bind mounts bị phụ thuộc vào cấu trúc thư mục của host machine, thì Volume bị quản lý hoàn toàn bởi Docker.
Dữ liệu trong volume là một thư mục đặc biệt được chỉ định bên trong một hoặc nhiều container bằng việc bỏ ổ lưu trữ của Docker và tương tác trực tiếp với file hệ thống.
Docker Volume cung cấp một vài tính năng hữu ích cho persistent và shared data:
- Docker Volume được khởi tạo khi
containerđược tạo ra. Nếuimagenền củacontainerchứa dữ liệu ở một vị trí chỉ định, dữ liệu đã tồn tại đó sẽ được copy sang một vùng nhớ khác trênvolumevừa được khởi tạo. - Dữ liệu
volumeđược chia sẻ và sử dụng giữa nhiềucontainer. - Các thay đổi trên
volumesẽ được chia sẻ với file hệ thống củahost. - Các thay đối trên
volumesẽ xảy ra khi bạn cập nhật mộtimage. - Dữ liệu cố định trên
volumedùcontainercó tự xóa.
Dữ liệu trên volume được thiết kế cho persist data, không phụ thuộc vào lifecycle của container. Docker không bao giờ tự động xóa volume khi bạn xóa container đó, cũng như sẽ không garbage collect những volume không được dung bởi container.
2. Docker Compose là gì?

Compose là công cụ giúp định nghĩa và khởi chạy multi-container Docker applications. Trong Compose, chúng ta sử dụng Compose file để cấu hình application’s services. Chỉ với một câu lệnh, lập trình viên có thể dễ dàng create và start toàn bộ các services phục vụ cho việc chạy ứng dụng.
Compose là một công cụ tuyệt với không chỉ dùng cho development, testing, staging environments, mà còn ứng dụng trong CI workflows. Việc sử dụng Docker Compose được tóm lược trong 3 bước cơ bản sau:
- Khai báo app’s environment với Dockerfile.
- Khai báo các services cần thiết để chạy app trong docker-compose.yml.
- Run docker-compose up và Compose sẽ start và run app.
Ví dụ về một file Docker Compose:
docker-compose.yml
version: '1'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
Lưu các file và chạy Docker Compose trên cùng một thư mục: $ docker compose up -d . Lệnh này sẽ chạy db và wordpress container. Giống việc chạy từng container với docker run, cờ -d sẽ chạy các container ở detached mode.
Giải thích cú pháp sử dụng trong file config Docker Compose
File docker-compose.yml được tổ chức gồm 4 phần:
| Directive | Ý nghĩa |
|---|---|
| version | Chỉ ra version của file Compose |
| services | Với Docker, một service là tên của một container |
| networks | Phần này được sử dụng để cấu hình network cho ứng dụng. Bạn có thể cài đặt network mặc định hoặc định nghĩa network chỉ định cho ứng dụng |
| volumes | Gắn đường dẫn trên host machine được sử dụng trên container |
Với phần config services, có một vài directive thường được sử dụng:
| Directive | Ý nghĩa |
|---|---|
| image | Chỉ ra image được sử dụng để build container. Sử dụng directive với các image chỉ định trên host mechine hoặc trên Docker Hub. |
| build | Directive này có thể được sử dụng thay directive image. Chỉ ra vị trí của Dockerfile để build container |
| db | Ở file Dockercomposer trên ví dụ, db là một biến cho container mà bạn sắp định nghĩa. |
| restart | Yêu cầu container restart khi hệ thống restart |
| volumes | Gắn đường dẫn trên host machine được sử dụng trên container |
| environment | Định nghĩa các biến môi trường truyền vào Docker khi chạy command |
| depends_on | Chọn các service được dùng là dependency cho container được xác định trong service hiện tại. |
| port | Kết nối port từ container đến host theo cách thức host:container |
| links | Liên kết service này với bất kỳ service nào khác trong Docker Compose file bằng các chỉ rõ tên |
3. Docker Network là gì? Có những kiểu Docker Network mặc định nào?
Docker Network dùng để gắn địa chỉ ip cho các container thông qua một virtual bridge.
Khi ta run 01 container thì nó sẽ tự động gắn địa chỉ ip đc cấu hình sẵn trong bridge đó và sẽ tự động gắn ip theo range đã định sẵn trong bridge.
Mặc định Docker cung cấp 2 network driver là bridge và overlay. Ngoài ra bạn có thẻ tự tạo cho mình network driver riêng.
brigde: Bridge network thường được sử dụng trên các ứng dụng chạy độc lập trongcontainerkhi chúng cần phảicommunicate.overlay: Overlay network kết nối nhiều Dockerdaemonvới nhau và cho phépswarm servicegiao tiếp được với mỗi Dockerdaemon, Bạn có thể sử dụng network này để tạo điều kiện choswarm servicevàcontainerđộc lập có thể giao tiếp được với nhau, hay giữa 2containerđộc lập ở trên Dockerdaemonkhác nhau.
4. Docker Swarm là gì? Một vài câu lệnh cơ bản của Docker Swarm.
Docker Swarm là một nhóm các machines cùng chạy trên Docker và cùng tham gia chung một cluster. Với việc sử dụng Docker Swarm bạn có thẻ tiếp tục sử dụng Docker command thông qua cluster trên swarm manager. Các machine trong swarm có thể lại máy vật lý hoặc máy ảo. Sau khi tham gia vào swarm, chúng được gọi là node.
Một vài lệnh cơ bản của Docker Swarm.
docker swarm init: Cho phép bậtswarm modevà biếtmechinehiện tại thànhswarm manager.docker swarm join: thực thi trên một máy khác để đưamechineđó tham gia vàoswarmvới vai trò làworker.docker node ls: Liệt kê các node trongswarm.docker swarm leave: Đưaworkerrời khỏiswarm.docker swarm leave -f: Đưaworkerrời khỏiswarmvà ngừng hoạt độngswarmđó.docker swarm join-token -q worker: Xem join-token
Tổng kết
Trong phần này cơ bản chúng ta đã hiểu sơ qua về Docker Volume, Docker Compose, Docker Network và Docker Swarm...Tuy nhiên, việc áp dụng chúng vào các dự án là không hề đơn giản, cần nhiều thời gian tìm hiểu cũng như kinh nghiệm nữa. Rất mong được sự góp ý từ mọi người về bài viết.
All rights reserved