Home » TechNote » Xây dựng môi trường phát triển với Docker compose

Xây dựng môi trường phát triển với Docker compose

Docker-composer-emotion

Tiếp nối bài viết trước Giới thiệu về Docker, bài viết này sẽ giới thiệu một công cụ để quản lý và chạy nhiều docker containers liên kết với nhau để xây dựng một môi trường phát triển ở local cho các developers, đó là công cụ docker compose.

1. Docker compose là gì

. Định nghĩa

“Compose is a tool for defining and running multi-container applications with Docker. With Compose, you define a multi-container application in a single file, then spin your application up in a single command which does everything that needs to be done to get it running.”

Bạn có thể tham khảo thêm thông tin chi tiết về docker compose ở đây

2. Xây dựng môi trường phát triển với docker compose

2.1 Mục tiêu : xây dựng một môi trường phát triển local gồm các thành phần ở dưới

-Reverse proxy : nginx
-Framework : play-framework/scala
-Database : Mysql 5.6

2.2 Phân tích : sử dụng docker compose để quản lý và liên kết 3 containers, mỗi container chạy 1 service như ở trên gồm có nginx, play-framework/scala và mysql server

docker-composer-containers

2.3 Cài đặt docker compose : tham khảo ở đây

2.4 Thiết lập cấu hình và chạy docker compose cho project

Tạo một folder có cấu trúc như hình bên dưới, bạn có thể đặt tên theo project hoặc tùy ý, ở đây tạm đặt là docker-compose

docker-compose-folders

Trong đó :
  • docker-compose/ : thư mục gốc lưu trữ
  • docker-compose/app_web : thư mục lưu trữ mã nguồn của ứng dụng play-framework/scala
  • docker-compose/mysql : thư mục lưu trữ Dockerfile dùng để xây dựng và chạy mysql-server container
    • Dockerfile (mysql container)

  • docker-compose/nginx : thư mục lưu trữ Dockerfile, file cấu hình nginx dùng để xây dựng và chạy nginx container
    • Dockerfile (nginx container)

  • docker-compose/Dockerfile : Dockerfile dùng để xây dựng và chạy play-framework/scala container
    • Dockerfile (play-framework/scala container)

  • docker-compose/docker-compose.yml : file cấu hình mà docker compose sẽ sử dùng để đọc thông tin cấu hình khi chạy lệnh “docker-compose up”
    • docker-compose.yml

Đến đây việc chuẩn bị cấu hình cho docker compose đã hoàn tất. Tiếp theo chúng ta sẽ build các images từ Dockerfile và run các containers từ các images đó :

Hiển thị các containers đang chạy bằng lệnh :

Hiển thị logs của web containter bằng lệnh :

 

Truy cập từ trình duyệt http://app.local:8080/ :

docker-compose-local

2.5 Tổng kết : như vậy bạn đã có một môi trường phát triển hoàn chỉnh gồm các stacks : nginx/play-framework/mysql trên máy của mình chỉ với một vài thao tác sử dụng docker, docker compose. Việc chia sẻ với các developers khác cũng trở nên dễ dàng hơn, bạn chỉ cần đưa lên một source repository hoặc đẩy các images lên Docker Hub và các thành viên khác có thể sử dụng và đóng góp.

Hiện tại trong tài liệu chính thức của docker compose không khuyến nghị sử dụng cho production, chỉ nên sử dụng ở môi trường development, staging, continous integration. Hy vọng trong tương lai gần chúng ta có thể sử dụng docker compose cho tất cả các môi trường giúp cho việc phát triển và phân phối các ứng dụng trở nên dễ dàng và trơn tru hơn.

Một vấn đề nữa là khi mount một thư mục trên máy linux đã được mã hóa ổ đĩa, với một thư mục trên play-framework/scala container thì lúc biên dịch sbt sẽ báo lỗi :

Nguyên nhân có thể do giới hạn class file name của sbt và giới hạn của bản thân docker container. Khi có giải pháp cho vấn đề này người viết bài sẽ cập nhật.

Thank you for reading, all comments are welcome !