Triển Khai Máy Chủ Web Container Bằng Docker Compose
Bài viết này sẽ hướng dẫn bạn cách triển khai một trang web tĩnh trong container bằng cách sử dụng Docker Compose trên App Server 1. Chúng ta sẽ khám phá quy trình tạo tệp docker-compose.yml để định nghĩa dịch vụ, xử lý lỗi command not found cho docker-compose, và cuối cùng là khởi động container.
Mục Lục
- Tạo Tệp Docker Compose
- Khắc Phục Lỗi Cài Đặt Docker Compose
- Triển Khai Container
- Thực Hành Tốt Nhất
- Cạm Bẫy Thường Gặp
- Mẹo Hiệu Suất
- Giải Quyết Vấn Đề
- Câu Hỏi Thường Gặp
Tạo Tệp Docker Compose
Bước đầu tiên là định nghĩa cấu hình của container bằng cách tạo tệp docker-compose.yml. Tệp này sẽ chỉ định hình ảnh sử dụng, tên container, ánh xạ cổng và gắn kết volume.
Nội dung sau đã được tạo trong tệp nằm tại /opt/docker/docker-compose.yml:
yaml
version: '3'
services:
webserver:
image: httpd:latest
container_name: httpd
ports:
- "8082:80"
volumes:
- "/opt/finance:/usr/local/apache2/htdocs"
Cấu hình này đảm bảo:
- Hình ảnh
httpd:latestđược sử dụng. - Container được đặt tên là
httpd. - Cổng máy chủ
8082được ánh xạ tới cổng80của container. - Thư mục trên máy chủ
/opt/financeđược gắn kết làm volume tới thư mục/usr/local/apache2/htdocscủa container, nơi lưu trữ nội dung web.
Khắc Phục Lỗi Cài Đặt Docker Compose
Một lần thử ban đầu để chạy lệnh đã dẫn đến lỗi sudo: docker-compose: command not found. Điều này cho thấy rằng công cụ Docker Compose chưa được cài đặt trên hệ thống. Để giải quyết vấn đề này, Docker Compose đã được cài đặt bằng cách tải xuống tệp nhị phân độc lập và cấp quyền thực thi.
bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Quá trình này đã cài đặt phiên bản mới nhất của Docker Compose vào vị trí hệ thống và cấp quyền cần thiết để chạy.
Triển Khai Container
Khi Docker Compose đã sẵn sàng, bước tiếp theo là chạy lệnh từ thư mục /opt/docker để khởi động container ở chế độ tách rời.
Lệnh:
bash
docker compose up -d
Kết quả:
WARN[0000] /opt/docker/docker-compose.yml: thuộc tính `version` đã lỗi thời, nó sẽ bị bỏ qua, vui lòng xóa nó để tránh gây nhầm lẫn
[+] Đang chạy 7/7
✔ webserver Đã kéo 6.7s
... (các lớp đã được kéo) ...
[+] Đang chạy 2/2
✔ Mạng docker_default Đã tạo 0.5s
✔ Container httpd Đã khởi động 2.4s
Lệnh đã thành công trong việc kéo hình ảnh httpd, tạo một mạng và khởi động container có tên httpd. Cảnh báo về thuộc tính version chỉ mang tính thông báo và không ảnh hưởng đến hoạt động của container.
Container httpd hiện đang chạy và phục vụ nội dung trang web tĩnh từ thư mục /opt/finance trên cổng 8082. Điều này hoàn thành nhiệm vụ lưu trữ nội dung tĩnh trên nền tảng container như yêu cầu của nhóm phát triển ứng dụng.
Thực Hành Tốt Nhất
- Sử dụng các phiên bản ổn định: Hãy chắc chắn rằng bạn đang sử dụng các phiên bản ổn định của Docker và Docker Compose để tránh các lỗi không mong muốn.
- Quản lý tài nguyên: Theo dõi tài nguyên sử dụng trên máy chủ để đảm bảo rằng container không chiếm quá nhiều tài nguyên.
- Sao lưu dữ liệu: Đảm bảo bạn có các bản sao lưu định kỳ cho thư mục chứa dữ liệu quan trọng.
Cạm Bẫy Thường Gặp
- Lỗi cổng bị chiếm: Nếu cổng bạn cố gắng ánh xạ đã được sử dụng bởi một dịch vụ khác, container sẽ không khởi động được.
- Lỗi quyền truy cập: Đảm bảo rằng thư mục gắn kết có quyền phù hợp để Docker có thể truy cập.
Mẹo Hiệu Suất
- Sử dụng mạng riêng: Thiết lập mạng riêng cho các container của bạn để cải thiện hiệu suất và bảo mật.
- Giảm kích thước hình ảnh: Sử dụng các hình ảnh nhẹ hơn để giảm thời gian tải và sử dụng băng thông.
Giải Quyết Vấn Đề
- Kiểm tra logs: Sử dụng lệnh
docker logs <tên_container>để xem logs và tìm hiểu nguyên nhân gây ra sự cố. - Thử khởi động lại container: Đôi khi, khởi động lại container có thể giải quyết các vấn đề tạm thời.
Câu Hỏi Thường Gặp
1. Docker Compose là gì?
Docker Compose là công cụ cho phép bạn định nghĩa và chạy nhiều container Docker với nhau.
2. Có thể chạy nhiều dịch vụ trong một tệp docker-compose không?
Có, bạn có thể định nghĩa nhiều dịch vụ trong một tệp docker-compose.yml.
3. Làm thế nào để xóa container đã chạy?
Sử dụng lệnh docker compose down để dừng và xóa tất cả các container đã chạy.
4. Tôi có thể kiểm tra trạng thái của container không?
Có, sử dụng lệnh docker ps để kiểm tra trạng thái của tất cả các container đang chạy.