No menu items!
No menu items!
More

    [Docker] Phần 7 – Docker Compose là gì? Tạo và chạy các dịch vụ Docker

    Mở Đầu

    Trong phần 7 của hành trình chúng ta trong Docker, chúng ta sẽ bắt đầu tìm hiểu về Docker Compose. Docker Compose là một công cụ mạnh mẽ cho phép bạn định nghĩa và quản lý nhiều dịch vụ Docker khác nhau trong một file cấu hình duy nhất. Với Docker Compose, bạn có thể dễ dàng triển khai và quản lý các ứng dụng đa-container một cách hiệu quả.

    Docker Compose là gì?

    Docker Compose là một công cụ giúp bạn định nghĩa và quản lý nhiều container trong một ứng dụng đa-container. Thay vì phải chạy từng lệnh Docker riêng lẻ để triển khai các dịch vụ khác nhau, bạn có thể sử dụng Docker Compose để định nghĩa toàn bộ môi trường của ứng dụng trong một file cấu hình duy nhất.

    Tạo và Chạy Các Dịch Vụ Docker Với Docker Compose

    Chúng ta sẽ tìm hiểu cách sử dụng Docker Compose để tạo và chạy các dịch vụ Docker một cách đồng thời. Với Docker Compose, bạn có thể xác định các dịch vụ, cài đặt các tham số và môi trường cho mỗi dịch vụ, và sau đó chỉ cần một lệnh duy nhất để khởi động toàn bộ ứng dụng.

    Chia nhỏ ứng dụng của bạn thành các Service Docker

    Khi phân phối các ứng hoàn thành, từng phần của ứng dụng đó ở dạng sản phẩm gọi nó là các service (dịch vụ). Những thành phần này khi phân phối ứng dụng chúng đều được gọi là các dịch vụ service. Như vậy các service thực chất là các container chạy đáp ứng chức năng thành phần tạo nên ứng dụng. Bạn cần hiểu sơ qua về khái niệm này vì ta sẽ sử dụng nó trong docker-compose giúp tạo ra các service trên một cách tự động.

    Docker Compose với file docker-compose.yml

    File docker-compose.yml gần giống ý nghĩa với file Dockerfile đã tìm hiểu trong Sử dụng Dockerfile, là một file text, viết với định dạng YAML  là cấu hình để tử đó lệnh docker compose sinh ra và quản lý các service (container), các network, các ổ đĩa … cho một ứng dụng hoàn chỉnh.

    Cài đặt Docker Compose.

    Tham khảo bài https://wiki.hoanghd.com/cai-dat-docker-compose/https://wiki.hoanghd.com/bash-script-tu-dong-cai-dat-docker-va-docker-compose-cho-he-dieu-hanh-ubuntu/

    Lệnh docker-compose

    Về nội dung bên trong file docker-compose.yml sẽ tìm hiểu phía sau, giờ giả sử đang có file này, từ thư mục chứa file này gõ lệnh docker-compose với tham số phù hợp để thi hành những tác vụ như:

    Tạo và chạy các thành phần định nghĩa trong docker-compose.yml (các dịch vụ, image, container, mạng, đĩa …).

    docker-compose up

    Dừng và xóa: image, container, mạng, đĩa tạo ra bởi docker-compose up

    docker-compose down

    Theo dõi Logs từ các dịch vụ

    docker-compose logs [SERVICES]

    Ngoài ra còn có các lệnh nhỏ khác như exec ps restart … sẽ tìm hiều dần khi cần dùng đến.

    Thực hành

    Phần thực hành mình sẽ sử dụng docker compose để dựng 1 website wordpress chỉ cần 1 cú enter, và bây giờ các bạn hãy thực hành theo mình để hiểu rõ hơn về docker compose.

    Hãy tạo 1 file docker.compose.yaml, đây chính là file dùng để run ứng dụng bằng docker compose.

    vi ./docker.compose.yaml

    Dán vào các nội dung bên dưới

    services:
      wordpress:
        image: wordpress
        container_name: wordpress
        restart: unless-stopped
        environment:
          WORDPRESS_DB_HOST: mariadb
          WORDPRESS_DB_USER: hoanghd
          WORDPRESS_DB_PASSWORD: hoanghd
          WORDPRESS_DB_NAME: wordpressdb
    
      mariadb:
        image: mariadb
        container_name: mariadb
        restart: unless-stopped
        environment:
          MYSQL_DATABASE: wordpressdb
          MYSQL_USER: hoanghd
          MYSQL_PASSWORD: hoanghd
          MYSQL_ROOT_PASSWORD: hoanghd
        ports:
          - 3306:3306
        volumes:
          - mariadb:/var/lib/mysql
        stdin_open: true
        tty: true
    
      nginx:
        image: nginx
        container_name: nginx
        restart: unless-stopped
        ports:
          - 443:443
          - 80:80
        volumes:
          - /home/nginx/nginx.conf:/etc/nginx/nginx.conf
          - /home/nginx/ssl:/etc/nginx/ssl
          - /home/nginx/conf.d:/etc/nginx/conf.d
        links:
          - wordpress
    volumes:
      mariadb:

    Tạo thư mục ssl để lưu ssl, thư mục nginx và nginx.d để lưu các config của Nginx

    mkdir -p /home/nginx/ssl
    mkdir -p /home/nginx/conf.d

    Copy file ssl của bạn vào thư mục /home/nginx/ssl, file ssl của mình là hoanghd.com.pem

    Tạo ra file /home/nginx/nginx.conf, file này là file config chính của Nginx, mình đã chỉnh sửa lại 1 chút để cho file gọn hơn.

    vi /home/nginx/nginx.conf

    Dán vào nội dung ở dưới

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
    }
    
    http {
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
            gzip on;
            include /etc/nginx/conf.d/*.conf;
    }

    Tạo file /home/nginx/conf.d/redirect_ssl.conf, file này giúp website của bạn tự động chuyển hướng từ http sang https tự động.

    vi /home/nginx/conf.d/redirect_ssl.conf

    Dán vào nội dung bên dưới

    server {
        listen 80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
    }

    Hãy tạo file /home/nginx/conf.d/wp_hoanghd.conf, đây là file config chính wordpress của bạn bao gồm trỏ ssl, khai báo domain, proxy_pass,…

    vi /home/nginx/conf.d/hoanghd.com.conf

    Hãy dán nội dung bên dưới vào file trên

    server {
        listen 443 ssl;
        server_name hoanghd.com;
        proxy_redirect off;
        ssl_certificate /etc/nginx/ssl/hoanghd.com.pem; #fullchain.pem
        ssl_certificate_key /etc/nginx/ssl/hoanghd.com.pem; #privkey.pem
        ssl_trusted_certificate /etc/nginx/ssl/hoanghd.com.pem; #chain.pem
    
        location / {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_buffering on;
            proxy_connect_timeout  3600s;
            proxy_read_timeout  3600s;
            proxy_send_timeout  3600s;
            send_timeout  3600s;
            client_max_body_size 10m;
            proxy_set_header X-Forwarded-Proto $scheme;
            add_header Content-Security-Policy upgrade-insecure-requests;
            proxy_pass http://wordpress;
            deny 172.16.0.0/24;
            allow all;
        }
    }

    Sau khi tạo các file xong, bạn sẽ có 1 cây thư mục như vậy

    ├── docker.compose.yaml
    └── nginx
        ├── conf.d
        │   ├── hoanghd.com.conf
        │   └── redirect_ssl.conf
        ├── nginx.conf
        └── ssl
            └── hoanghd.com.pem
    
    3 directories, 5 files

    Sử dụng lệnh docker-compose với cú pháp docker-compose -f <docker-compose-filename.yaml>l up -d

    Sau khi chạy lệnh trên, quá trình tải và build các container theo kịch bản đã được lên sẵn trong file docker-compose.yml.

    $ docker-compose -f ./docker.compose.yaml up -d
    [+] Running 4/4
     ⠿ Network home_default  Created                                                                                                                                                                                          0.0s
     ⠿ Container wordpress   Started                                                                                                                                                                                          1.2s
     ⠿ Container mariadb     Started                                                                                                                                                                                          3.1s
     ⠿ Container nginx       Started                                                                                                                                                                                          1.8s

    Sau khi build xong, dùng lệnh docker ps bạn đã thấy 3 container đã được tạo xong

    $ docker ps
    CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES
    60389c9e1629   nginx       "/docker-entrypoint.…"   19 seconds ago   Up 17 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
    9e40af065fac   wordpress   "docker-entrypoint.s…"   19 seconds ago   Up 18 seconds   80/tcp                                                                     wordpress
    91f072c0d971   mariadb     "docker-entrypoint.s…"   19 seconds ago   Up 16 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                  mariadb

    Sử dụng máy client để test, hãy trỏ domain hoanghd.com về máy host

    $ cat /etc/hosts | grep hoanghd.com
    192.168.13.206 hoanghd.com

    Kiểm tra kết nối giữa máy host và client

    $ ping hoanghd.com
    PING hoanghd.com (192.168.13.206): 56 data bytes
    64 bytes from 192.168.13.206: icmp_seq=0 ttl=64 time=0.513 ms
    64 bytes from 192.168.13.206: icmp_seq=1 ttl=64 time=0.562 ms
    64 bytes from 192.168.13.206: icmp_seq=2 ttl=64 time=0.498 ms
    64 bytes from 192.168.13.206: icmp_seq=3 ttl=64 time=0.495 ms
    
    --- hoanghd.com ping statistics ---
    4 packets transmitted, 4 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 0.495/0.517/0.562/0.027 ms

    Chúng ta có kết quả

    Nếu muốn huỷ các container chạy dịch vụ wordpress vừa triển khai xong, đơn giản bạn chỉ cần chạy Sử dụng lệnh docker-compose với cú pháp docker-compose -f <docker-compose-filename.yaml>l down

    $ docker-compose -f ./docker.compose.yaml down
    [+] Running 4/4
     ⠿ Container mariadb     Removed                                                                                                                                                                                          0.7s
     ⠿ Container nginx       Removed                                                                                                                                                                                          0.5s
     ⠿ Container wordpress   Removed                                                                                                                                                                                          1.3s
     ⠿ Network home_default  Removed

    Kết quả khi kiểm tra bằng lệnh docker ps

    $ docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

    Kết Luận

    Trong phần này, chúng ta đã bắt đầu tìm hiểu về Docker Compose và tại sao nó là một công cụ quan trọng trong việc quản lý các dịch vụ Docker đa-container. Chúng ta đã xem xét cách sử dụng Docker Compose để định nghĩa và chạy các dịch vụ Docker một cách hiệu quả.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email