Tìm hiểu về Docker. (phần 3)
Bài đăng này đã không được cập nhật trong 3 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ếuimage
nền củacontainer
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ênvolume
vừ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
volume
sẽ được chia sẻ với file hệ thống củahost
. - Các thay đối trên
volume
sẽ xảy ra khi bạn cập nhật mộtimage
. - Dữ liệu cố định trên
volume
dùcontainer
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ì?
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 trongcontainer
khi chúng cần phảicommunicate
.overlay
: Overlay network kết nối nhiều Dockerdaemon
với nhau và cho phépswarm service
giao 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 service
vàcontainer
độc lập có thể giao tiếp được với nhau, hay giữa 2container
độc lập ở trên Dockerdaemon
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ậtswarm mode
và biếtmechine
hiện tại thànhswarm manager
.docker swarm join
: thực thi trên một máy khác để đưamechine
đó tham gia vàoswarm
với vai trò làworker
.docker node ls
: Liệt kê các node trongswarm
.docker swarm leave
: Đưaworker
rời khỏiswarm
.docker swarm leave -f
: Đưaworker
rời khỏiswarm
và 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