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

    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?
    1. Docker Compose là gì?
    1. Docker Network là gì? Có những kiểu Docker Network mặc định nào?
    1. 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 persistentshared data:

  • Docker Volume được khởi tạo khi container được tạo ra. Nếu image nền của container chứ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ên volume vừa được khởi tạo.
  • Dữ liệu volume được chia sẻ và sử dụng giữa nhiều container.
  • Các thay đổi trên volume sẽ được chia sẻ với file hệ thống của host.
  • Các thay đối trên volume sẽ xảy ra khi bạn cập nhật một image.
  • Dữ liệu cố định trên volumecontainer có 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ì?

alt

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 dbwordpress 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 driverbridgeoverlay. 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 trong container khi chúng cần phải communicate.
  • overlay: Overlay network kết nối nhiều Docker daemon với nhau và cho phép swarm service giao tiếp được với mỗi Docker daemon, Bạn có thể sử dụng network này để tạo điều kiện cho swarm servicecontainer độc lập có thể giao tiếp được với nhau, hay giữa 2 container độc lập ở trên Docker daemon khá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ật swarm mode và biết mechine hiện tại thành swarm manager.
  • docker swarm join: thực thi trên một máy khác để đưa mechine đó tham gia vào swarm với vai trò là worker.
  • docker node ls: Liệt kê các node trong swarm.
  • docker swarm leave: Đưa worker rời khỏi swarm.
  • docker swarm leave -f: Đưa worker rời khỏi swarm và ngừng hoạt động swarm đó.
  • 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.