Làm quen với Docker Compose
Compose là công cụ giúp định nghĩa và khởi chạy multi-container Docker applications. Trong Compose, chúng ta sử dụng Compose file để cấu hình application’s services. Chỉ với một câu lệnh, lập trình viên có thể dễ dàng create và start toàn bộ các services phục vụ cho việc chạy ứng dụng.
Compose là một công cụ tuyệt với không chỉ dùng cho development, testing, staging environments, mà còn ứng dụng trong CI workflows. Việc sử dụng Docker Compose được tóm lược trong 3 bước cơ bản sau:
- Khai báo app’s environment với Dockerfile.
- Khai báo các services cần thiết để chạy app trong docker-compose.yml.
- Run docker-compose up và Compose sẽ start và run app.
Dưới đây là một ví dụ về file docker-compose.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
version : '2'
services :
web :
build : .
ports :
- "5000:5000"
volumes :
- . : / code
- logvolume01 : / var / log
links :
- redis
redis :
image : redis
volumes :
logvolume01 : { }
|
Trong bài viết này chúng ta sẽ thử xây dựng một ứng dụng web Python chạy trên Docker Compose. Ứng dụng này sử dụng Flask framework và lưu trữ hit counter trên Redis. Demo này tương đối dễ hiểu và giúp người đọc làm quen nhanh chóng với Docker compose.
Trước khi bắt tay vào thử hãy đảm bảo bạn đã cài đặt cả Docker Engine & Docker Compose trên máy tính
Step 1: Setup
1. Tạo thư mục cho project:
1
2
3
4
|
$ mkdir composetest
$ cd composetest
|
2. Tạo file app.py trong thư mục project với nội dung sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from flask import Flask
from redis import Redis
app = Flask ( __name__ )
redis = Redis ( host = 'redis' , port = 6379 )
@ app . route ( '/' )
def hello ( ) :
count = redis . incr ( 'hits' )
return 'Hello World! I have been seen {} times.\n' . format ( count )
if __name__ == "__main__" :
app . run ( host = "0.0.0.0" , debug = True )
|
3. Tạo 1 file requirements.txt trong project directory với nội dung sau:
1
2
3
4
|
flask
redis
|
Khai báo các application’s dependencies.
Step 2: Tạo Dockerfile
Trong bước này chúng ta tiến hành viết Dockerfile để build ra Docker image. Image này chứa toàn bộ các dependencies mà app Python require, bao gồm cả chính Python.
Trong thư mục project, tạo file name: Dockerfile và paste nội dung sau vào:
1
2
3
4
5
6
7
|
FROM python : 3.4 - alpine
ADD . / code
WORKDIR / code
RUN pip install - r requirements . txt
CMD [ "python" , "app.py" ]
|
Chúng ta có thể hiểu đơn giản thành các bước sau:
- Build một image từ image Python 3.4 có sẵn trên Docker hub.
- Thêm thư mục hiện tại . vào thư mục /code bên trong image.
- Thiết lập thư mục làm việc với Docker thành /code.
- Install các Python dependencies.
- Set default command của container là python app.py
Step 3: Khai báo các services bên trong Compose file
Create một file tên là docker-compose.yml trong thư mục project với nội dung sau:
1
2
3
4
5
6
7
8
9
10
11
12
|
version : '2'
services :
web :
build : .
ports :
- "5000:5000"
volumes :
- . : / code
redis :
image : "redis:alpine"
|
Compose file khai báo 2 services, web & redis:
- Sử dụng image được build từ Dockerfile trong thư mục project.
- Forwards the exposed port 5000 của container sang port 5000 trên host machine.
- Mounts thư mục project trên host sang /code bên trong container, cho phép bạn chỉnh sửa code mà ko cần rebuild image.
Redis service thì sử dụng public Redis image trên Docker Hub registry.
Step 4: Build và run Ứng dụng với Compose
1. Start ứng dụng từ thư mục project
1
2
3
4
5
6
7
8
9
10
|
$ docker - compose up
Pulling image redis . . .
Building web . . .
Starting composetest_redis_1 . . .
Starting composetest_web_1 . . .
redis_1 | [ 8 ] 02 Jan 18 : 43 : 35.576 # Server started, Redis version 2.8.3
web_1 | * Running on http : //0.0.0.0:5000/
web_1 | * Restarting with stat
|
Compose kéo Redis image về host và tiến hành build một image cho code, sau đó start services bạn đã khai báo.
2. Vào địa chỉ http://0.0.0.0:5000/ trên trình duyệt sẽ thấy ứng dụng đang chạy.
Nếu bạn sử dụng Docker trên Linux, bạn cũng có thể thử vào bằng đường dẫn sau: http://localhost:5000.
Nếu bạn sử dụng Docker Machine trên Mac, hãy dùng lệnh docker-machine ip MACHINE_VM để lấy IP address của Docker host. Sau đó vào bằng đường dẫn sau: http://MACHINE_VM_IP:5000
Bạn sẽ thấy message sau trên trình duyệt:
1
2
3
|
Hello World ! I have been seen 1 times .
|
3. Refresh lại web page.
Số lượng view sẽ tăng lên.
Step 5: Update the application
Như đã đề cập trong step 3, application code đã được mount vào trong container volume, chính vì thế lập trình viên có thể chỉnh sửa code và thấy sự thay đổi này diễn ra tức thì mà không cần rebuild the image.
1. Sửa code file app.py và save lại:
1
2
3
|
return 'Hello from Docker! I have been seen {} times.\n' . format ( count )
|
2. Refresh lại page và mọi thứ đã được cập nhật .
Step 6: Một vài câu lệnh thông dụng trong Docker compose
Nếu bạn muộn khởi chạy các services bên trong background, hãy thêm flag -d (for “detached” mode) vào lệnh docker-compose up và sử dụng lệnh docker-compose ps để thẩy những gì đang chạy trên hos
1
2
3
4
5
6
7
8
9
10
11
|
$ docker - compose up - d
Starting composetest_redis_1 . . .
Starting composetest_web_1 . . .
$ docker - compose ps
Name Command State Ports
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
composetest_redis_1 / usr / local / bin / run Up
composetest_web_1 / bin / sh - c python app . py Up 5000 -> 5000 / tcp
|
Câu lệnh docker-compose run cho phép ta chạy 1 lần nhiều câu lệnh cho các services. Ví dụ để thấy các environment variables trên web service:
1
2
3
|
$ docker - compose run web env
|
Dùng docker-compose –help để xem các câu lệnh có sẵn khác.
Nếu bạn started Compose với docker-compose up -d bạn có thể sẽ cần stop các services, khi đó hãy dùng lệnh:
1
2
3
|
$ docker - compose stop
|
Bạn có thể xóa tất cả các container. Truyền vào –volumes để remove data volume được dùng bởi Redis container:
1
2
3
|
$ docker - compose down -- volumes
|
Tới đây, chắc hẳn là việc sử dụng Docker compose đã quá dễ dàng rồi
viblo
Có thể bạn chưa biết:
- Bakkt giao dịch 71 hợp đồng tương lai Bitcoin trong 24 giờ đầu tiên
- Jack Ma xác nhận AliPay đã THÀNH CÔNG với dịch vụ chuyển tiền dựa trên blockchain
- Ủy viên Liên bang Thụy Sĩ tuyên bố: “Blockchain sẽ thâm nhập toàn bộ nền kinh tế của chúng ta”
- Blockchain có thực sự an toàn? 3 cách mà mạng Blockchain có thể bị tấn công
- Blockchain sẽ thúc đẩy cuộc cách mạng công nghiệp tiếp theo
- Blockchain – Khởi nguồn của một nền kinh tế mới: Chương 3 – Blockchain 3.0 (Phần 5)
- Lightning Network không hoàn hảo như chúng ta nghĩ! Có một vấn đề lớn cần được giải quyết!
- 30 ứng dụng thiết thực của công nghệ blockchain trong đời sống
- Blockchain đang thay đổi tiền tệ và kinh doanh như thế nào?
- Samsung áp dụng công nghệ Blockchain vào Chuỗi cung ứng Toàn cầu của tập đoàn
- Việt Nam: Các Bộ, ngành nói gì về hành lang pháp lý cho Blockchain?
- Chặt chẽ và nghiêm ngặt hơn, Trung quốc tiếp tục thành lập Liên minh An ninh Blockchain mới
DVMS chuyên:
- Tư vấn, xây dựng, chuyển giao công nghệ Blockchain, mạng xã hội,...
- Tư vấn ứng dụng cho smartphone và máy tính bảng, tư vấn ứng dụng vận tải thông minh, thực tế ảo, game mobile,...
- Tư vấn các hệ thống theo mô hình kinh tế chia sẻ như Uber, Grab, ứng dụng giúp việc,...
- Xây dựng các giải pháp quản lý vận tải, quản lý xe công vụ, quản lý xe doanh nghiệp, phần mềm và ứng dụng logistics, kho vận, vé xe điện tử,...
- Tư vấn và xây dựng mạng xã hội, tư vấn giải pháp CNTT cho doanh nghiệp, startup,...
Vì sao chọn DVMS?
- DVMS nắm vững nhiều công nghệ phần mềm, mạng và viễn thông. Như Payment gateway, SMS gateway, GIS, VOIP, iOS, Android, Blackberry, Windows Phone, cloud computing,…
- DVMS có kinh nghiệm triển khai các hệ thống trên các nền tảng điện toán đám mây nổi tiếng như Google, Amazon, Microsoft,…
- DVMS có kinh nghiệm thực tế tư vấn, xây dựng, triển khai, chuyển giao, gia công các giải pháp phần mềm cho khách hàng Việt Nam, USA, Singapore, Germany, France, các tập đoàn của nước ngoài tại Việt Nam,…
Quý khách xem Hồ sơ năng lực của DVMS tại đây >>
Quý khách gửi yêu cầu tư vấn và báo giá tại đây >>