Khi ứng dụng hoạt động, bạn sẽ cần có các dependencies khác để liên kết và hỗ trợ cho các package trong ứng dụng. Chẳng hạn như một ứng dụng web sẽ các cần dịch vụ như NginX hay Apache, cơ sở dữ liệu là MySQL hay Postgresql. Trong bài viết về cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04 hôm nay, Vietnix sẽ hướng dẫn bạn sử dụng Docker Compose để quản lý ứng dụng dễ dàng và đơn giản hơn.
Giới thiệu về Docker Compose
Sử dụng Docker giúp bạn đơn giản hóa được quá trình quản lý ứng dụng của mình bằng các containers (vùng chứa). Bạn có thể hiểu các container cũng giống như các máy ảo, nhưng nhẹ hơn và thân thiện với tài nguyên hơn. Việc quản lý bằng container, sẽ giúp bạn có thể chia nhỏ môi trường chạy ứng dụng của mình ra thành các dịch vụ biệt lập nhau.
Tuy nhiên, việc quản lý một lượng lớn container như vậy cũng dẫn đến vấn đề như việc khởi động, kết nối để các container có thể giao tiếp với nhau và tắt chúng đi sẽ trở nên khó khăn. Nhưng Docker đã cung cấp cho bạn một giải pháp để quản lý nhiều container một cách hiệu quả và dễ dàng hơn nhiều đó là sử dụng Docker Compose. Docker Compose sẽ dựa vào định nghĩa của các container ở trong file YAML để tiến hành build ra các container cùng chia sẻ một network và vùng chứa dữ liệu (data volumes).
Trong bài hướng dẫn hôm nay, Vietnix sẽ hướng dẫn bạn cách để cài đặt và sử dụng Docker Compose trên hệ điều hành Ubuntu 20.04.
Yêu cầu tiên quyết để cài đặt và sử dụng Docker Compose trên Ubuntu 20.04
Để thực hiện các bước trong bài hướng dẫn, bạn cần thỏa mãn các điều kiện sau:
- Có một tài khoản người dùng non-root, được cấp quyền
sudo
để truy cập vào máy chủ Ubuntu 20.04. Trong trường hợp nếu bạn có sử dụng máy chủ remote thì hãy cài đặt và bật tường lửa. - Đã cài đặt Docker trên máy chủ của bạn.
Lưu ý: Hướng dẫn này sẽ cài đặt và sử dụng Docker Compose phiên bản v1 có cú pháp lệnh là docker-compose
. Đối với phiên bản Docker Compose v2, Docker đã chuyển qua cú pháp compose
, khác so với phiên bản docker-compose
của phiên bản v1. Tuy hai phiên bản sử dụng là khác nhau, nhưng sự khác biệt chỉ là nằm ở việc bỏ đi dấu gạch nối -
trong cú pháp. Để biết thêm thông tin chi tiết, bạn có thể kiểm tra khả năng tương thích của hai phiên bản ở website chính thức của Docker.
Các bước tiến hành
Bước 1: Cài đặt Docker Compose
Bạn cần tải Docker Compose từ Github repository chính thức của Docker để đảm bảo rằng bản cài đặt là phiên bản mới nhất.
Đầu tiên, bạn cần phải kiểm tra phiên bản mới nhất đã ra mắt trên trang Github của Docker. Ở thời điểm viết bài này, phiên bản chính thức là 1.29.2
.
Ở lệnh dưới đây, bạn sẽ tải về Docker Compose ở phiên bản 1.29.2
và lưu file thực thi vào đường dẫn /usr/local/bin/docker-compose
, sau đó là bạn có thể chạy lệnh docker-compose
trên máy của mình.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Tiếp theo, để thực thi, bạn cần cấp quyền cho docker-compose
:
sudo chmod +x /usr/local/bin/docker-compose
Sau đó, để xác nhận đã cài đặt và chạy docker-compose
thành công, bạn có thể dùng lệnh sau:
docker-compose --version
Bạn sẽ nhận được output tương tự như dưới đây:
Output
docker-compose version 1.29.2, build 5becea4c
Sau khi đã cài đặt thành công, ở bước tiếp theo bạn sẽ tiến hành thiết lập file docker-compose.yml
để định nghĩa và khởi chạy các container.
Xem thêm: Cách cài đặt Nginx trên Ubuntu 20.04
Bước 2: Thiết lập file docker-compose.yml
Ở bước này người dùng sử dụng Nginx image từ Docker Hub, tiến hành tạo môi trường máy chủ web, môi trường này sẽ dùng cho 1 file HTML tĩnh duy nhất.
Để bắt đầu, bạn hãy tạo một thư mục trong trong folder home, sau đó di chuyển vào thư mục mới.
mkdir ~/compose-demo
cd ~/compose-demo
Trong thư mục này, bạn hãy tạo thư mục tên “app
” để làm root document phục vụ cho máy chủ Nginx.
mkdir app
Tiếp theo, bạn hãy tạo file index.html
bên trong thư mục app
bằng nano
hoặc bất kì trình soạn thảo văn bản nào tùy thích:
nano app/index.html
Bạn hãy copy nội dung sau vào file index.html
của mình:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
Sau khi hoàn tất, bạn hãy lưu và đóng file lại. Nếu sử dụng nano
, bạn có thể nhấn CTRL+X
, sau đó là Y
và ENTER
.
Kế tiếp, bạn hãy tạo file docker-compose.yml
:
nano docker-compose.yml
Hãy chèn nội dung dưới đây vào file YAML trên:
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
File docker-compose
bắt đầu bằng một định nghĩa chỉ định phiên bản version
. Điều này cho Docker Compose biết cấu hình của phiên bản nào bạn đang sử dụng.
Tiếp đó là có block services
, là nơi bạn sẽ thiết lập các dịch vụ nằm trong môi trường này. Ở ví dụ này, bạn chỉ có một dịch vụ duy nhất gọi là web
. Dịch vụ này sử dụng image nginx:alpine
và thiết lập cổng chuyển hướng bằng directive ports
. Do đó, các request đến cổng 8000
của host (nơi mà bạn đang chạy Docker Compose) sẽ được điều hướng sang container web
trên cổng 80
(nơi mà Nginx đang chạy).
Còn directive volumes
sẽ tạo một vùng chia sẻ lưu trữ giữa các host và các container. Cấu hình theo ví dụ ở đây sẽ chia sẻ folder app
với container và vùng dữ liệu đó sẽ nằm ở /usr/share/nginx/html
bên trong container, vùng chứa này sau đó sẽ ghi đè lên document root mặc định của NginX.
Bạn hãy lưu và đóng lại file sau khi hoàn tất.
Sau khi định nghĩa container và các dịch vụ cần thiết, bạn đã có thể khởi tạo container đó để phục vụ cho máy chủ NginX.
Nếu bạn cần một máy chủ có cấu hình phù hợp, hỗ trợ hệ điều hành Ubuntu 20.04 để thực hiện theo hướng dẫn trong bài thì có thể tham khảo dịch vụ VPS của Vietnix.
Vietnix hiện đang cung cấp đa dạng gói VPS khác nhau với giá chỉ từ 84.000 VND/Tháng, đảm bảo đáp ứng được mọi nhu cầu của bạn. Bao gồm: VPS Giá Rẻ, VPS SSD, VPS AMD, VPS GPU và VPS NVMe.
Việc lựa chọn VPS của Vietnix cho việc cài đặt Docker Compose trên Ubuntu 20.04 mang lại sự ổn định và tin cậy cho môi trường của bạn. Với tốc độ truy cập nhanh chóng và ổn định, VPS của Vietnix sẽ đảm bảo ứng dụng của bạn hoạt động mượt mà và hiệu quả.
Liên hệ ngay với Vietnix để được tư vấn chi tiết hơn.
Bước 3: Chạy Docker Compose
Trong bước này, bạn sẽ khởi chạy môi trường với file docker-compose.yml
sau khi đã được thiết lập xong. Dòng lệnh sau sẽ tải về các images cần thiết của Docker, sau đó là tạo container cho dịch vụ web
mà bạn đã định nghĩa trong file YAML trên và khởi chạy môi trường ở chế độ background.
docker-compose up -d
Docker Compose sẽ tìm kiếm các image đã được xác định trên máy local của bạn, nếu không tìm thấy thì Docker Compose sẽ tải các image đó về từ Docker Hub.
Bạn sẽ nhận được output tương tự như dưới đây:
Output
Creating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
Lưu ý: Nếu gặp lỗi về quyền thực thi liên quan đến Docker socket, hãy cấp quyền để khởi chạy các lệnh của Docker mà không cần dùng đến sudo
.
Để kiểm tra môi trường của bạn đã khởi chạy thành công hay chưa, bạn có thể dùng lệnh sau:
docker-compose ps
Lệnh trên sẽ hiển thị các container hiện đang chạy và trạng thái tương ứng, cũng như là các cổng điều hướng đang có.
Output
Name Command State Ports
---------------------------------------------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Nếu output của bạn tương tự như trên thì môi trường của bạn đã khởi chạy thành công. Bạn có thể truy cập vào trang web của mình theo đường dẫn localhost:8000
trên trình duyệt nếu bạn đang chạy trên máy local của mình hoặc your_server_domain_or_IP:8000
nếu bạn đang chạy trên một máy chủ remote.
Trang web sẽ hiển thị ra như hình sau:
Như đã đề cập trước đó về vùng chia sẻ lưu trữ được thiết lập trong docker-compose.yml
sẽ đồng bộ thư mục app
trên máy của bạn với document root của NginX trong container của Docker. Do đó, nếu có bất kì thay đổi nào trong file index.html
diễn ra thì sự thay đổi đó cũng sẽ được cập nhật lại bên trong container. Bạn hãy thử chỉnh sửa file index.html
trên máy mình, sau đó lưu và reload lại trang web trên trình duyệt, bạn sẽ thấy ngay sự thay đổi.
Ở bước tiếp theo, bạn sẽ được làm quen với một số lệnh để giúp quản lý các container trong Docker.
Bước 4: Làm quen với các lệnh của Docker Compose
Đến đây, bạn đã thấy được cách để định nghĩa container bằng file docker-compose.yml
và khởi chạy với lệnh docker-compose up
. Ở bước cuối cùng này, bạn sẽ sử dụng một số lệnh khác trong Docker Compose để thao tác và quản lý môi trường của mình.
Đầu tiên, bạn có thể dùng lệnh logs
để kiểm tra các file logs được tạo ra bởi container của NginX:
docker-compose logs
Bạn sẽ nhận được output tương tự như dưới đây:
Output
Attaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Còn nếu bạn muốn dừng quá trình thực thi của môi trường lại mà không làm ảnh hưởng đến trạng thái hiện tại của các container, bạn hãy dùng lệnh sau:
docker-compose pause
Output
Pausing compose-demo_web_1 ... done
Để tiếp tục quá trình thực thi sau khi dừng, bạn có thể dùng lệnh unpause
:
docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done
Một lệnh nữa là stop
, lệnh này sẽ chấm dứt hoạt động của các container nhưng các dữ liệu có liên quan nằm trong các container vẫn được giữ nguyên, không bị xóa đi.
docker-compose stop
Output
Stopping compose-demo_web_1 ... done
Tiếp đến, nếu bạn muốn xóa đi các container, network hay là vùng dữ liệu có liên quan trong môi trường hiện tại, bạn có thể dùng lệnh down
:
docker-compose down
Output
Removing compose-demo_web_1 ... done
Removing network compose-demo_default
Lệnh trên sẽ không xóa đi các image được dùng bởi Docker Compose để khởi chạy môi trường của bạn (ở đây là nginx:alpine
). Vì vậy, bất kì khi nào mà bạn khởi chạy lại môi trường với docker-compose up
, quá trình này sẽ diễn ra nhanh hơn do Docker sẽ không cần phải tải lại các image đã có sẵn trên hệ thống từ lần cài đặt trước đó.
Nhưng nếu muốn thì bạn cũng có thể xóa đi các image có trên hệ thống bằng lệnh sau:
docker image rm nginx:alpine
Output
Untagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Vietnix là nhà cung cấp dịch vụ VPS tốc độ cao hàng đầu tại Việt Nam, đã xây dựng được danh tiếng và uy tín trong suốt hơn 11 năm hoạt động. Với hơn 50.000 khách hàng đồng hành, Vietnix đã trở thành địa chỉ tin cậy cho các khách hàng có nhu cầu sử dụng dịch vụ VPS.
Khách hàng sử dụng VPS của Vietnix được đảm bảo truy cập với tốc độ nhanh chóng và ổn định, an toàn và bảo mật. Vì thế không ngạc nhiên khi 97% khách hàng của Vietnix đánh giá dịch vụ 5 sao và rất hài lòng với trải nghiệm của họ. Điều này chứng tỏ sự uy tín và đáng tin cậy của Vietnix trên thị trường VPS tại Việt Nam.
Vừa qua, Vietnix còn khẳng định sự uy tín của mình trên thị trường khi vinh dự nhận giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022. Hãy liên hệ với Vietnix ngay hôm nay để trải nghiệm dịch vụ VPS tốc độ cao và nhận được sự hỗ trợ chuyên nghiệp từ đội ngũ kỹ thuật viên giàu kinh nghiệm.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Lời kết
Như vậy qua bài viết về cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04, Vietnix đã hướng dẫn cho bạn cách cài đặt Docker Compose và set up môi trường khởi chạy NginX bằng file YAML, sau đó là khởi chạy môi trường bằng docker-compose up
. Cuối cùng là một số lệnh cần thiết để quản lý và tương tác với môi trường của Docker Compose. Nếu còn điều gì chưa rõ hãy để lại bình luận bên dưới nhé.