Chào bạn, trong thế giới phát triển web hiện đại, việc triển khai (deploy) một website không còn là một công việc đơn giản như copy file lên server nữa. Với sự phức tạp của các ứng dụng web và nhu cầu về tính ổn định, khả năng mở rộng, Docker đã trở thành một công cụ không thể thiếu đối với nhiều nhà phát triển. Hôm nay, chúng ta sẽ cùng nhau khám phá cách cài đặt và sử dụng Docker để đơn giản hóa quy trình triển khai website của bạn nhé!
Docker là gì? “Trợ thủ đắc lực” cho việc triển khai ứng dụng
Trước khi bắt đầu, hãy cùng mình tìm hiểu xem Docker là gì và tại sao nó lại trở nên quan trọng trong việc triển khai website. Docker là một nền tảng mã nguồn mở giúp bạn tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng bằng cách sử dụng container hóa.
Container hóa: “Đóng gói” ứng dụng và môi trường
Hãy tưởng tượng bạn muốn chuyển một ứng dụng từ máy tính cá nhân của mình lên một máy chủ khác. Thông thường, bạn sẽ phải đảm bảo rằng máy chủ đó có đầy đủ các thư viện, phần mềm và cấu hình giống hệt như môi trường phát triển của bạn. Điều này có thể gây ra nhiều vấn đề nếu có bất kỳ sự khác biệt nào.
Docker giải quyết vấn đề này bằng cách đóng gói ứng dụng của bạn cùng với tất cả các thư viện, dependencies và cấu hình cần thiết vào một “container”. Container này hoàn toàn cô lập với hệ thống bên ngoài và có thể chạy một cách nhất quán trên bất kỳ máy chủ nào đã cài đặt Docker.
Lợi ích của việc sử dụng Docker để deploy website
Việc sử dụng Docker để triển khai website mang lại rất nhiều lợi ích:
Tính nhất quán: “Chạy ở đâu cũng như nhau”

Docker đảm bảo rằng ứng dụng của bạn sẽ chạy giống hệt nhau trên mọi môi trường, từ máy phát triển, máy thử nghiệm đến máy chủ sản xuất.
Tính di động: “Dễ dàng di chuyển” giữa các môi trường
Bạn có thể dễ dàng di chuyển container Docker giữa các máy chủ, các nhà cung cấp cloud khác nhau mà không cần phải lo lắng về sự khác biệt trong cấu hình.
Tính cô lập: “Không ảnh hưởng” lẫn nhau
Các container Docker hoạt động độc lập với nhau, vì vậy nếu một container gặp sự cố, nó sẽ không ảnh hưởng đến các container khác trên cùng một máy chủ.
Tiết kiệm tài nguyên: “Nhẹ nhàng” cho hệ thống
Container Docker chia sẻ kernel của hệ điều hành, do đó chúng nhẹ hơn nhiều so với máy ảo (Virtual Machines) và tiêu thụ ít tài nguyên hệ thống hơn.
Tăng tốc độ triển khai: “Nhanh chóng” và hiệu quả
Việc tạo và triển khai container Docker diễn ra rất nhanh chóng, giúp bạn tiết kiệm thời gian và tăng hiệu quả công việc.
Hướng dẫn cài đặt Docker trên các hệ điều hành phổ biến: “Bắt đầu hành trình”
Để bắt đầu sử dụng Docker, bạn cần cài đặt Docker Engine trên máy tính hoặc máy chủ của mình. Dưới đây là hướng dẫn cài đặt trên các hệ điều hành phổ biến:
Cài đặt Docker trên Windows
- Truy cập trang web chính thức của Docker: https://www.docker.com/products/docker-desktop/
- Tải xuống Docker Desktop cho Windows.
- Chạy file cài đặt và làm theo hướng dẫn trên màn hình.
- Sau khi cài đặt xong, khởi động lại máy tính nếu được yêu cầu.
Cài đặt Docker trên macOS
- Truy cập trang web chính thức của Docker: https://www.docker.com/products/docker-desktop/
- Tải xuống Docker Desktop cho macOS.
- Mở file .dmg và kéo biểu tượng Docker vào thư mục Applications.
- Chạy ứng dụng Docker Desktop và làm theo hướng dẫn.
Cài đặt Docker trên Linux (Ubuntu, CentOS)
Ubuntu:
Bash
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
echo “deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
CentOS:
Bash
sudo yum install -y yum-utils
sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
Lưu ý: Các lệnh trên có thể thay đổi tùy theo phiên bản Linux bạn đang sử dụng. Bạn có thể tham khảo hướng dẫn chi tiết trên trang web chính thức của Docker: https://docs.docker.com/engine/install/
Các khái niệm cơ bản trong Docker: “Nắm vững kiến thức nền tảng”
Trước khi đi vào việc deploy website, hãy cùng mình làm quen với một số khái niệm cơ bản trong Docker:
Docker Image: “Bản thiết kế” của ứng dụng
Docker Image là một gói chỉ đọc chứa tất cả các thành phần cần thiết để chạy một ứng dụng, bao gồm mã nguồn, thư viện, dependencies, công cụ và cấu hình. Bạn có thể coi Image như là “bản thiết kế” của ứng dụng.
Docker Container: “Thực thể” đang chạy của Image
Docker Container là một thể hiện đang chạy của một Docker Image. Bạn có thể tạo nhiều container từ một image duy nhất. Container là nơi ứng dụng của bạn thực sự được thực thi.
Dockerfile: “Công thức” xây dựng Image
Dockerfile là một file văn bản chứa các lệnh để Docker build một image. Nó mô tả các bước để tạo ra môi trường chạy cho ứng dụng của bạn, bao gồm việc chọn image nền, sao chép code, cài đặt phần mềm, và thiết lập cấu hình.
Docker Hub: “Thư viện” chứa Image
Docker Hub là một registry (kho lưu trữ) công cộng chứa hàng ngàn Docker Image được tạo sẵn bởi cộng đồng và các nhà cung cấp phần mềm. Bạn có thể tìm kiếm và tải xuống các image này để sử dụng cho ứng dụng của mình.
Hướng dẫn từng bước deploy website với Docker: “Triển khai dễ dàng”
Bây giờ chúng ta sẽ cùng nhau đi qua các bước cơ bản để deploy một website đơn giản bằng Docker.
Bước 1: Viết Dockerfile cho website của bạn: “Xây dựng bản thiết kế”
Đầu tiên, bạn cần tạo một file có tên là Dockerfile trong thư mục gốc của dự án website của bạn. File này sẽ chứa các hướng dẫn để Docker build image cho website.
Dưới đây là một ví dụ về Dockerfile cho một website tĩnh sử dụng Nginx:
Dockerfile
# Chọn image nền (base image) là Nginx phiên bản mới nhất
FROM nginx:latest
# Xóa file cấu hình mặc định của Nginx
RUN rm /etc/nginx/conf.d/default.conf
# Sao chép file cấu hình Nginx tùy chỉnh của bạn vào container
COPY nginx.conf /etc/nginx/conf.d/
# Sao chép toàn bộ thư mục chứa mã nguồn website của bạn vào thư mục html của Nginx trong container
COPY html /usr/share/nginx/html
# Mở cổng 80 để website có thể truy cập được
EXPOSE 80
# Lệnh chạy khi container khởi động
CMD [“nginx”, “-g”, “daemon off;”]
Giải thích:
- FROM nginx:latest: Chỉ định image nền là image Nginx phiên bản mới nhất từ Docker Hub.
- RUN rm /etc/nginx/conf.d/default.conf: Xóa file cấu hình mặc định của Nginx.
- COPY nginx.conf /etc/nginx/conf.d/: Sao chép file cấu hình Nginx tùy chỉnh của bạn (nếu có) vào container.
- COPY html /usr/share/nginx/html: Sao chép thư mục html chứa mã nguồn website của bạn vào thư mục webroot của Nginx trong container.
- EXPOSE 80: Thông báo cho Docker biết rằng container sẽ lắng nghe trên cổng 80.
- CMD [“nginx”, “-g”, “daemon off;”]: Lệnh chạy Nginx khi container được khởi động.

Lưu ý: Bạn cần tạo một file cấu hình Nginx tùy chỉnh có tên là nginx.conf và một thư mục có tên là html chứa mã nguồn website của bạn trong cùng thư mục với Dockerfile.
Bước 2: Build Docker Image: “Tạo ra thực thể” từ bản thiết kế
Sau khi đã viết xong Dockerfile, bạn cần build Docker Image từ file này. Mở terminal hoặc command prompt, điều hướng đến thư mục chứa Dockerfile và chạy lệnh sau:
Bash
docker build -t ten-image-cua-ban .
Giải thích:
- docker build: Lệnh để build Docker Image.
- -t ten-image-cua-ban: Đặt tên cho image của bạn (ví dụ: my-website).
- .: Chỉ định thư mục hiện tại là context cho quá trình build (nơi Docker sẽ tìm kiếm các file cần thiết).
Docker sẽ thực hiện các bước được mô tả trong Dockerfile và tạo ra một image mới.
Bước 3: Chạy Docker Container: “Khởi động” website của bạn
Sau khi image đã được build thành công, bạn có thể chạy container từ image này bằng lệnh sau:
Bash
docker run -d -p 80:80 ten-image-cua-ban
Giải thích:
- docker run: Lệnh để chạy container từ image.
- -d: Chạy container ở chế độ detached (nền).
- -p 80:80: Map cổng 80 của máy chủ (host) đến cổng 80 của container. Điều này có nghĩa là bạn có thể truy cập website của mình thông qua cổng 80 trên máy chủ.
- ten-image-cua-ban: Tên image mà bạn đã đặt ở bước trước.
Sau khi chạy lệnh này, website của bạn sẽ được triển khai và bạn có thể truy cập nó thông qua trình duyệt web bằng địa chỉ IP của máy chủ.
Map cổng giữa container và host
Tùy thuộc vào ứng dụng web của bạn, bạn có thể cần map các cổng khác nhau. Ví dụ, nếu ứng dụng của bạn chạy trên cổng 3000 bên trong container, bạn có thể map nó đến cổng 80 của máy chủ bằng lệnh -p 80:3000.
Quản lý container (start, stop, restart)
Bạn có thể quản lý container của mình bằng các lệnh sau:
- docker ps: Liệt kê các container đang chạy.
- docker stop <ID_CONTAINER>: Dừng một container cụ thể (thay <ID_CONTAINER> bằng ID của container).
- docker start <ID_CONTAINER>: Khởi động lại một container đã dừng.
- docker restart <ID_CONTAINER>: Khởi động lại một container đang chạy.
Các lệnh Docker cơ bản thường dùng: “Bỏ túi” những “công cụ” quan trọng
Dưới đây là một số lệnh Docker cơ bản mà bạn sẽ thường xuyên sử dụng:
- docker pull <ten-image>: Tải image từ Docker Hub.
- docker build -t <ten-image> <duong-dan-den-dockerfile>: Build image từ Dockerfile.
- docker run <cac-tuy-chon> <ten-image>: Chạy container từ image.
- docker ps: Liệt kê các container đang chạy.
- docker stop <ID_CONTAINER>: Dừng container.
- docker rm <ID_CONTAINER>: Xóa container.
- docker images: Liệt kê các image hiện có.
- docker rmi <ID_IMAGE>: Xóa image.
Kinh nghiệm triển khai website với Docker: “Bí quyết” để thành công

- Sử dụng Docker Compose cho các ứng dụng phức tạp: Nếu website của bạn bao gồm nhiều container (ví dụ: web server, database server, cache server), Docker Compose sẽ giúp bạn quản lý chúng một cách dễ dàng hơn thông qua một file cấu hình duy nhất (docker-compose.yml).
- Quản lý Docker Volume cho dữ liệu bền vững: Volume được sử dụng để lưu trữ dữ liệu mà không bị mất khi container bị xóa. Điều này rất quan trọng đối với các ứng dụng cần lưu trữ dữ liệu như database.
- Tối ưu hóa Dockerfile để tạo image nhỏ gọn: Một image nhỏ gọn sẽ giúp giảm thời gian build và tải image, cũng như tiết kiệm dung lượng lưu trữ.
- Đảm bảo bảo mật cho container Docker: Mặc dù container cung cấp sự cô lập, bạn vẫn cần thực hiện các biện pháp bảo mật để đảm bảo an toàn cho ứng dụng và dữ liệu của mình.
Câu chuyện người dùng: Chia sẻ kinh nghiệm triển khai website bằng Docker
Mình có một người bạn tên là Minh, anh ấy là một freelance web developer. Trước đây, mỗi khi triển khai website cho khách hàng, anh Minh thường gặp phải nhiều vấn đề liên quan đến sự khác biệt giữa các môi trường. Đôi khi website chạy tốt trên máy của anh ấy nhưng lại gặp lỗi khi triển khai lên server của khách hàng. Từ khi biết đến Docker, quy trình làm việc của anh Minh đã trở nên đơn giản và hiệu quả hơn rất nhiều. Anh ấy có thể đóng gói toàn bộ môi trường phát triển vào một container và triển khai nó một cách dễ dàng lên bất kỳ server nào, giúp tiết kiệm thời gian và giảm thiểu các sự cố không đáng có.
Kết luận: Docker – Giải pháp triển khai website hiệu quả và hiện đại
Docker là một công cụ mạnh mẽ và hữu ích cho việc triển khai website. Với khả năng container hóa ứng dụng và môi trường, Docker giúp đơn giản hóa quy trình triển khai, đảm bảo tính nhất quán và di động, đồng thời tiết kiệm tài nguyên và tăng tốc độ triển khai. Nếu bạn đang muốn tối ưu hóa quy trình triển khai website của mình, hãy thử làm quen và sử dụng Docker ngay hôm nay nhé! Chúc bạn thành công!