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
Mục lục
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:
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
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.
Comments are closed.