Docker compose file có gì ???
Mở đầu
Xin chào các bạn cũng đã lâu rồi mình chưa có bài viết nào mới, nhân dip Viblo đang có sự kiện Mayfest mình thấy các phần quà hấp dẫn quá nên lại tham gia . Không dài dòng nữa vào vấn đề chính luôn nhé )), nếu đã làm việc với docker
thì ít nhiều mọi người cũng nghe tới docker compose
rồi đúng không. Vậy thì trong bài viết này mình sẽ đi chi tiết xem docker-compose
là gì, các thành phần chính của nó bao gồm những gì. Nhưng trước khi tìm hiểu về nó chúng ta cũng cần biết qua một số khái niệm như là, docker
, traefik
là gì, cùng bắt đầu luôn nhé.
Docker là gì
Docker
là một nền tảng mở, nó cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất.
Docker bao gồm các thành phần chính:
- Docker Engine: dùng để tạo ra Docker image và chạy Docker container.
- Docker Hub: dịch vụ lưu trữ giúp chứa các Docker image.
Traefik là gì
Traefik là một Reverse-proxy đời mới, và cũng là load balancer để làm cho việc deploy hệ thống microservice được trở lên dễ dàng hơn. Nó giúp định tuyến các service qua subdomain
Traefik sử labels container để truy xuất cấu hình định tuyến của nó. Có thể ví dụ như trên Viblo chẳng hạn cùng domain là viblo.asia thì nó sẽ gọi đến container web còn viblo.asia/api thì nó sẽ gọi đến container api thì việc từ subdomain nào gọi đến container nào là công việc của thằng traefik, chúng ta có thể đăng kí nó ở trong labels
.
Docker compose
Docker compose là một công cụ giúp định nghĩa và chạy multi-container trong những ứng dụng sử dụng Docker. Với Compose, chúng ta có thể config các services để phục vụ cho ứng dụng, chỉ với một câu lệnh có thể tạo và start tất cả các Docker containers services mà chúng ta sử dụng.
Cách cài đặt docker compose:
Trên linux:
B1: Tải xuống phiên bản Docker composer mới nhất:
Mọi người có thể kiểm tra phiên bản mới nhất của docker compose tại đây
sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
B2: Phân quyền thực cho docker-compose:
sudo chmod +x /usr/local/bin/docker-compose
B3: cuối cùng kiểm tra xem đã cài đặt thành công hay chưa
docker-compose --version
Các bạn có thể xem hướng dẫn chi tiết cài đặt ở đây.
Lưu ý: Dockerfile (build các image). Docker compose dùng để build và run các container
Tiếp theo chúng ta sẽ đi vào chi tiết các thành phần của một file docker compose
- Version: Phiên bản của docker-compose
- Service: Đây là nơi khai báo tất cả các services được build trực tiếp từ images trên dockerhub hay build từ Dockerfile
Cài đặt cho từng service
-
Image: Chỉ định image để khởi động container
-
Restart:
- restart: no : default nó sẽ không khởi động lại container trong bất cứ trường hợp nào
- restart: always : Luôn khởi động lại khi xảy ra lỗi hoặc bị stop
- restart: on-failure: Khởi động lại nếu xảy ra lỗi
- restart: unless-stopped: Luôn khởi động lại container khi bị lỗi, ngoại trừ container bị stop
-
Working_dir : Set thư mục làm việc của container được tạo
-
environment: Khai báo các biến môi trường.
-
volumes: Chia sẻ dữ liệu giữa container và host hoặc giữa các container với nhau.
Container có 1 đặc điểm là khi stop thì những data sinh ra ở lần chạy trước sẽ bị mất đi. vì thế cần sử dụng volumes để sao lưu dữ liệu ra máy host và khi bật lại container, dữ liệu lại được mount từ máy host vào trong container để tiếp tục sử dụng nó bình thường.
-
Labels: là một cơ chế để thêm meta data cho các đối tượng Docker, bao gồm:
- Images
- Containers
- Local daemons
- Volumes
- Networks
- Swarm nodes
- Swarm services
Các bạn có thể tìm hiểu thêm trên doc của nó .
- Port: thiết lập port cho container, mapping port của container với port của máy local
- Network: Khai báo network cho ứng dụng. Define một network dùng chung cho các container. Network này có tên là my_network sử dụng driver bridge.
Kết Luận
Như vậy là mình đã giới thiệu cách cài đặt, cũng như các thành phần chính có trong một file docker compose hy vọng sau bài biết này mọi người sẽ hiểu hơn về nó là có thể tự xây dựng được một file docker compose cho dự án của riêng mình. Nếu có thắc mắc hay góp ý gì cho bài viết các bạn hãy comment xuống phía bên dưới nhé, còn nếu thấy bài viết hữu ích thì hãy cho mình một upvote nhé. Cảm ơn các bạn
All rights reserved