Docker composer là gì

Nếu bạn tự hỏi Docker Compose là gì thì có nghĩa là bạn đã dùng qua Docker cũng như có biết chúc về nó, vì vậy trong bài viết này tôi sẽ hướng dẫn các bạn cách dùng nó cũng như khái niệm về nó

Chú ý nếu bạn muốn học Docker thì có thể xem qua khoá học này trên gsviec nó là miễn phí Docker cho ngưới mới bắt đầu

Toàn bộ mã nguồn demo bạn có thể tải qua đường dẫn này https://github.com/gsviec/docker-canban

Vậy Docker Compose là gì

Theo như định nghĩa trên trang chủ thì nó là một công cụ dùng để quảng lý các contianer cũng như liên kết các image đó với nnau tham khảo tại đây https://docs.docker.com/compose/

Còn theo giải thích mì ăn liền của tôi là như thế này khi bạn chạy một ứng dụng web wordpress bạn cần hệ điều hành đó là Linux cụ thể là Ubuntu, cơ sở dữ liệu là MySQL, ngôn ngử lập trình là PHP cuối cùng là máy chủ web Nginx hoặc Apache.

Chúng ta có thể đóng gói các thành phần đó lại với nhau gọi là LEMP hoặc LAMP vào một image rồi sau đó dùng nó để chạy wordpress thông qua dòng lệnh sau

docker run --name some-wordpress --link some-mysql:mysql -d wordpress

hoặc

docker run --name wordpress --link mysqlwp:mysql -p 80:80 \
                                  -e WORDPRESS_DB_NAME=wordpress \
                                  -e WORDPRESS_DB_USER=wordpress \
                                  -e WORDPRESS_DB_PASSWORD=wordpresspwd \
                                  -d wordpress

Nhưng bạn đã phạm phải một nguyên tắc căn bản trong Docker đó là mỗi một image trong Docker chỉ làm một công việc duy nhất đó chính là tính năng cơ bản trong MicroService mà Docker áp dụng vào, do đó thây vì dùng cêu lênh trên chúng ta có thể chạy câu lệnh thế này.

docker run --name nginx -p 80:80 -d nginx
docker run --name php-fpm -p 9000:9000 -d gsviec/php
docker run --name mysql -p 3600:3060 \
    MYSQL_ROOT_PASSWORD=secret \
    MYSQL_DATABASE=phanbook \
    MYSQL_USER=phanbook \
    MYSQL_PASSWORD=secret \
    -d mysql 

Nhưng thế này thì mỗi lần deploy hay chạy lại thêm các tham số cấu hình rất là phức tạp do đó thằng Docker Compose nó được sinh ra giúp cho việc quản lý dễ dàng hơn.

Nói tóm lại công dụng của Docker Compose giúp cho việc quản lý và phát triển một dự án thông qua docker nhanh hơn và trực quan hơn

Các dùng

Như mọi khi dùng WordPress để demo là cách tốt nhất cho các bạn muốn học Docker 🙂 cảm ơn Wordpess một lần nữa.

Để dùng Docker Compose thì bạn chỉ việc tạo một tập tin có tên là docker-compose.yaml cú pháp nó theo định dạng YAML, nếu bạn chưa biết YAML là gì thì có thể xem qua bài viết YAML Format.

Tập tin docker-composer.yml có nội dung như sau:

version: '2'
services:
    mysql:
        image: mysql
        restart: always
        environment:
           - variables.env
        # volumes:
        #     - ./data/mysql:/docker-entrypoint-initdb.d
    nginx:
        depends_on:
            - phpfpm
        image: nginx
        ports:
            - 80:80
        restart: always
        working_dir: /var/www
        volumes:
            - ./wordpress:/var/www/
            - ./conf/nginx/gsviec.conf:/etc/nginx/conf.d/default.conf
        links:
            - phpfpm
    phpfpm:
        image: phalconphp/php-apache:ubuntu-16.04
        restart: always
        working_dir: /var/www
        ports:
            - 9092:9000
            - 8080:80
        volumes:
            - ./wordpress:/var/www
        depends_on:
            - mysql
    download: 

        image: nginx
        restart: 'no'
        volumes:
            - ./:/var/www
        command: sh download-wp.sh

hãy để tôi giải thích vài tham số cho bạn hiểu dòng đầu tiên chỉ là định nghĩa version docker compose thôi, hiện tại nó đã có phiên bản là 3 nhưng tôi vẫn thích dùng 2 còn dưới dòng server tôi định nghĩa các image cần thiết để chạy wordpress bao gồm nginx, mysql, php-fpm, khi bạn chạy lệnh docker-compose up nó sẽ tạo các container tương ứng từ các image mà bạn định nghĩa.

Còn tập tin variables.env là các tham số cấu hình MySQL bạn có thể thay đổi nó nếu bạn muốn, sau này bạn muốn thêm cấu hình thì chỉ việc thêm vào thôi, rất tiện lợi để quản lý do với cách gõ trực tiếp từ bash shell như ở trên, chẳn hạn sau này bạn muốn thêm một dịch vụ phpmyadmin để quản lý mysql thì chỉ cần đoạn code này vào tập tin docker-compose.yml` dưới chỗ service

phpmyadmin:
    restart: always
    image: phpmyadmin/phpmyadmin:4.6
    depends_on:
      - mysql
    ports:
      - 9090:80
    env_file:
      - variables.env

Còn trong tập tin variables.env bạn có thể thêm vào thông số cấu hình PHPmyadmin như sau:

# phpMyAdmin settings
PMA_ARBITRARY=1
PMA_HOST=mysql
PMA_PORT=3306
PMA_USER=phalcon
PMA_PASSWORD=secret

Còn dòng code

ports:
    - 8080:80

có nghĩa là tôi cho web server apache lắng nghe ở cổng 8080, nếu bạn muốn lắng nghe ở cổng 80 thì chỉ việc thay đổi lại thành như sau:

Kế đến bạn chạy lệnh bên dưới này để pull(kéo) 4 cái image định nghĩa bên trên rồi nó sẽ tự khởi tạo 3 cái container sau vài phút bạn chờ đợi.

docker-compose up -d

trong 4 cái image tôi định nghĩa ở trên có 1 cái là restart: ‘no’ nên nó không khởi động, do đó khi bạn chạy lệnh:

docker ps

bạn chỉ thấy kết quả như thế này thôi:

Screenshot at Apr 05 20 52 45 1

cuối cùng bạn sau khi nó chạy xong kết quả sẽ có dạng như thế này nếu như bạn truy cập vào đường dẫn http://you-ip:port trong trường hợp của tôi là http://localhost

Screenshot at Apr 05 20 55 04 1

chú ý mặc định docker compose nó sẽ lấy tên thư mục làm tên project cho bạn như hình trên nó là khoahocdockercanban, nếu bạn muốn thây đổi nó thì bạn thêm tham số -p

Ngoài ra nếu bạn muốn restart và stop nó thì dùng lệnh sau:

docker-compose restart
docker-compose stop

tất nhiên bạn cũng có thể chạy lệnh docker-compose help để thấy các dòng lệnh nó hỗ trợ dưới đây là một kết quả trên máy tôi

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

Kêt luận

Trên đây tôi đã hướng dẫn bạn cách sử dụng Docker Compose và cũng như cách cài đặt WordPress thông qua Docker Compose.Như mọi khi nếu thấy bài viết hay thì các bạn có thể chia sẽ và like, các bạn đã dùng Docker chưa nếu có hãy để bình luận bên dưới chia sẽ những kinh nghiệm của bạn.

Leave a Comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Scroll to Top