- vừa được xem lúc

[Thực hành Docker] Docker compose

0 0 54

Người đăng: Nguyễn Văn Thịnh

Theo Viblo Asia

Khi sử dụng docker nếu chúng ta cần tạo và quản lý các container, network hay ổ đĩa sẽ phải chạy các lệnh để tạo thủ công, nhưng khi cần tạo nhiều container hoặc nhiều network thì việc tạo thủ công này rất mất thời gian và việc quản lý Docker trên một hệ thống lớn với rất nhiều các containers khác nhau sẽ rất phức tạp và khả năng sinh ra nhiều lỗi, thật may là có docker compose giải quyết vấn đề này.

Khái niệm docker compose

Docker compose

Là công cụ giúp ta thiết lập và quản lý nhiều container, network, volume (gọi chung là các service) và thiết lập cấu hình cho các service một cách nhanh chóng và đơn giản bằng việc chạy theo các chỉ định trong file docker-compose.yml

Những tính năng chính của Compose bao gồm:

  • Tạo và quản lý nhiều môi trường độc lập trong một máy host đảm bảo độc lập các phân vùng ổ nhớ tránh say ra xung đột
  • Chỉ tạo lại container thay đổi, nhận biết các container không thay đổi và sử dụng lại
  • Định nghĩa và sử dụng biến môi trường trong file YAML

Docker-compose.yml

Là một file lưu dạng yaml, file này lưu các chỉ thị để docker compose đọc file này và thực thi các chỉ thị đó, các chỉ thị như tạo container từ image, tạo network, cấu hình cho các dịch vụ.

ví dụ: file mysql.yml như sau

version: "2.2" services: mysql: image: mysql:8 command: --default-authentication-plugin=mysql_native_password restart: always mem_limit: ${MYSQL_MEMORY_LIMIT:-1G} volumes: - ${PATH_DATA:-./data}/mysql:/var/lib/mysql environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}

Thực hành docker compose

Nhiệm vụ thực hành của chúng ta là định nghĩa docker file để tạo ra các thành phần sau

  • Container MySQL
  • Container HTTP APACHE
  • Container PHP-FPM
  • Network (bridge) để các service trên kết nối vào mạng này
  • Ánh xạ cổng 9999 của máy host vào cổng 80 của máy chủ HTTP

Tạo docker-compose.yml

Tạo thư mục mycode bên trong ta tạo file docker-compose.yml với nội dung như sau (mình có comment giải thích trong phần nội dung file)

version: "3" #là phiên bản docker composer #Tạo mạng tên là my-network
networks: my-network: driver: bridge # Tạo các dịch vụ (container)
services: #Tạo container my-php từ imgae php:latest có kết nối với mạng my-network my-php: container_name: php-product image: 'php:latest' hostname: php restart: always networks: - my-network #Tạo container my-httpd từ imgae httpd:latest có kết nối với mạng my-network, ánh xạ cổng 9999 của máy host vào cổng 80 my-httpd: container_name: c-httpd01 image: 'httpd:latest' hostname: httpd restart: always networks: - my-network ports: - "9999:80" - "443:443" #Tạo container my-mysql từ imgae mysql:latest có kết nối với mạng my-network,config các biến môi trường my-mysql: container_name: myql-product image: "mysql:latest" hostname: mysql restart: always networks: - my-network environment: - MYSQL_ROOT_PASSWORD=123abc - MYSQL_DATABASE=db_site - MYSQL_USER=sites - MYSQL_PASSWORD=123abc

File trên được chia làm 3 phần

  • phần đầu là khai báo phiên bản docker composer, ở đây mình dùng phiên bản 3

  • Phần tiếp theo là khai báo tạo các mạng, ở đây mình tạo một mạng tên là my-network kiểu mạng là bridge ( về phần Network bài trước mình có viết các bạn tìm hiểu thêm tại đây )

  • Phần tiếp theo là tạo các services, ở đây là tạo 3 services là 3 container (php, httpd, mysql), các service này đều kết nối đến mạng my-network đã tạo trên phần 2

    • Container my-php tạo từ imgae php:latest có kết nối với mạng my-network
    • Container my-httpd tạo từ imgae httpd:latest có kết nối với mạng my-network, ánh xạ cổng 9999 của máy host vào cổng 80 và cổng 443 với 443 máy host
    • Container my-mysql tạo từ imgae mysql:latest có kết nối với mạng my-network,config các biến môi trường như MYSQL_ROOT_PASSWORD, MYSQL_DATABASE,MYSQL_USER, MYSQL_PASSWORD

Run file docker-compose.yml tạo các service

Tạo xong file docker compose, giờ chúng ta sẽ run file này để tạo ra các service đã định nghĩa.

Ta vào thư mục chứa file docker-compose.yml và chạy lệnh

docker-compose up

Vậy là xong rồi, giờ ta bật một terminal khác để kiểm tra xem đã có các container và network theo như mục tiêu đề ra hay chưa

Chạy lệnh docker psdocker network ls để xem danh sách container đang chạy và network

Muốn dừng các services đang chạy thì ta dùng lệnh

docker-compose stop

Để kết thúc các services đang chạy và xóa hoàn toàn container ta dùng lệnh

docker-compose down

Theo dõi Logs các services

docker-compose logs [SERVICES]

Kết bài

Sau bài viết này chúng ta cũng đã tìm hiểu những kiến thức và thực hành cơ bản về docker-compose. Cảm ơn mọi người.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121

- vừa được xem lúc

Set up private docker registry

Bài toán: Mình cần 1 repository để lưu trữ Docker Images của mỗi lần build. -> Docker hub chỉ cho duy nhất 1 private repos, còn lại sẽ mất phí hoặc phải để public. tham khảo ở đây ([Docker Hub])(https://www.docker.

0 0 65

- vừa được xem lúc

Spring boot Kotlin Auto Build on Docker Compose Runtime

Trong khi phát triển một ứng dụng Spring boot sử dụng ngôn ngữ Kotlin với docker phải thông qua quá trình build mới có thể start được server cho nên khi phát triển sẽ sửa code liên tục cần nó tự động nhận code mới. Vậy trong bài viết này sẽ giới thiệu qua về giải pháp tận dụng một công cụ entr để lắ

0 0 31

- vừa được xem lúc

Tìm hiểu về Docker Compose CLI

Ở bài trước, chúng ta đã cùng nhau tìm hiểu về Docker Compose và cách config 1 docker compose file. . . Docker Compose là một công cụ giúp định nghĩa và run mutil-docker-container.

0 0 37