Docker là một tập hợp các nền tảng mở cung cấp ảo hóa cấp hệ điều hành để phát triển, vận chuyển và chạy các ứng dụng. Trong Docker, các ứng dụng được phân phối dưới dạng các gói đơn vị chuẩn hóa được gọi là container. Mỗi container được cô lập với nhau, bao gồm các thư viện và tệp cấu hình, nhưng mỗi container có thể giao tiếp thông qua các kênh mạng được xác định rõ ràng.
Hiện tại, Docker đã trở thành một tiêu chuẩn cho phát triển phần mềm và DevOps. Docker được hàng triệu nhà phát triển sử dụng để xây dựng, chia sẻ và chạy bất kỳ ứng dụng nào mỗi ngày tại nơi làm việc. Docker được sử dụng trong vòng đời phát triển ứng dụng, từ bản thân quá trình phát triển, thử nghiệm và sản xuất. Với Docker, ứng dụng trở nên linh hoạt và di động hơn. Các ứng dụng có thể chạy ở bất kỳ đâu trong các hệ điều hành khác nhau một cách dễ dàng, nhưng bản thân ứng dụng vẫn giữ nguyên từ thư viện đến tệp cấu hình.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Docker trên Debian 11 Bullseye. Ngoài ra, bạn sẽ học cách sử dụng Docker cơ bản để chạy container và quản lý hình ảnh.
1. Thực hiện lệnh apt bên dưới để cài đặt các gói phụ thuộc mới.
Gõ 'y' và nhấn 'Enter' để cài đặt tất cả các gói đó.
1. Thực hiện lệnh sau để thêm khóa GPG cho Docker.
2. Sau đó, thêm kho lưu trữ Docker cho hệ thống Debian 11 bằng lệnh bên dưới.
3. Bây giờ hãy chạy lệnh 'apt update' để cập nhật/làm mới tất cả các kho lưu trữ khả dụng.
Bây giờ bạn đã sẵn sàng cài đặt Docker vào Debian 11 Bullseye.
2. Sau đó, bạn có thể cài đặt lại Docker bằng lệnh apt bên dưới.
Gõ 'y' và nhấn 'Enter' để xác nhận cài đặt.
3. Nếu quá trình cài đặt hoàn tất, hãy thực hiện lệnh sau để xác minh cài đặt.
Kiểm tra xem dịch vụ đã được bật hay chưa.
Kiểm tra trạng thái dịch vụ Docker và Containerd.
Dưới đây là kết quả tương tự mà bạn sẽ nhận được.
Như đã thấy, các dịch vụ Docker và Containerd đang hoạt động (đang chạy) và cả hai dịch vụ đều được bật và sẽ tự động chạy khi hệ thống khởi động.
1. Đối với ví dụ này, bạn sẽ sử dụng người dùng 'johndoe' để chạy container Docker.
Tạo người dùng mới 'johndoe' trên hệ thống Debian của bạn bằng lệnh sau.
2. Sau đó, thực thi lệnh sau để thêm người dùng 'johndoe' vào nhóm 'docker'.
3. Bây giờ hãy đăng nhập với tư cách là người dùng 'johndoe' bằng lệnh bên dưới và xác minh cấu hình.
Chạy lệnh docker sau để xác minh cài đặt của bạn.
Và bạn sẽ thấy thông báo 'Xin chào Docker' bên dưới.
Dưới đây là giải thích đơn giản về lệnh docker mà bạn chạy ở trên cùng.
Kiểm tra container có trạng thái 'đang chạy'.
Kiểm tra tất cả các container - sẽ hiển thị cho bạn tất cả các container, container hiện đang chạy và đã dừng.
Dưới đây là đầu ra tương tự như bên dưới.
Như bạn có thể thấy, tên container mới 'bold_bartix' được tạo bằng hình ảnh cơ sở 'hello-world' và trạng thái hiện tại của container là 'Đã thoát' hoặc đã dừng. Tên container 'bold_bartix' trong ảnh chụp màn hình được Docker chọn ngẫu nhiên, nhưng bạn có thể chỉ định tên container của mình.
1. Trước tiên, hãy tải xuống hình ảnh Docker về máy tính cục bộ của bạn bằng lệnh sau.
Lệnh này sẽ tải xuống tên hình ảnh Docker 'nginx' và gắn thẻ 'alpine' vào hệ thống của bạn.
Thuật ngữ 'tags' giống như một phiên bản của chính hình ảnh đó. 'nginx:alpine' có nghĩa là hình ảnh 'nginx' có thẻ 'alpine', có nghĩa là dựa trên hệ điều hành Alpine Linux. Luôn kiểm tra tất cả các thẻ có sẵn của hình ảnh Docker tại kho lưu trữ Docker-Hub chính thức.
Dưới đây là ví dụ về tất cả các thẻ có sẵn cho hình ảnh Docker 'nginx'.
Để kiểm tra tất cả các hình ảnh docker có sẵn trên hệ thống cục bộ của bạn, hãy chạy lệnh docker sau.
Bạn sẽ thấy đầu ra tương tự như bên dưới.
Như đã thấy, bạn có hai hình ảnh Docker, nginx:alpine và hello-world.
2. Tiếp theo, thực hiện lệnh sau để chạy một container.
Bây giờ bạn sẽ nhận được chuỗi ngẫu nhiên và số của container mới.
Các tùy chọn bạn phải biết:
Bạn sẽ thấy kết quả tương tự như bên dưới.
Để xác minh container Nginx của bạn, hãy mở trình duyệt web và nhập địa chỉ IP máy chủ của bạn với cổng '8080'.
Và bạn sẽ xem trang chỉ mục Nginx từ container 'web ' như bên dưới.
3. Tiếp theo, bạn có thể kiểm tra nhật ký của container bằng cách thực hiện lệnh docker sau.
Và bạn sẽ thấy tất cả các nhật ký của container, từ đầu đến cuối.
Để giới hạn đầu ra nhật ký, bạn có thể sử dụng tùy chọn '--tail n' như bên dưới.
Và bạn sẽ thấy 10 dòng cuối cùng của nhật ký container.
4. Bây giờ để dừng container Docker, bạn có thể sử dụng lệnh Docker bên dưới.
Sau đó, xác minh container đang chạy bằng lệnh sau.
Bạn sẽ thấy đầu ra như bên dưới.
Container 'web' bị dừng và tự động xóa. Đó là vì bạn sử dụng tùy chọn '--rm' khi chạy container.
5. Tiếp theo, bạn sẽ học cách chạy container với ổ đĩa tùy chỉnh. Thư mục trên máy chủ sẽ được sử dụng làm ổ đĩa cho vùng chứa Docker.
Tạo thư mục 'data' mới và tệp 'index.html' tùy chỉnh bằng lệnh sau.
Sao chép và dán tập lệnh 'index.html' tùy chỉnh như bên dưới.
Lưu cấu hình bằng cách nhấn nút 'Ctrl+x', nhập 'y', sau đó nhấn 'Enter'.
Tiếp theo, tạo container mới bằng lệnh docker bên dưới.
Bây giờ bạn sẽ nhận được số ngẫu nhiên và chuỗi của container.
Tùy chọn '-v ~/data:/usr/share/nginx/html' sẽ gắn '~/data' trên máy cục bộ vào container tại Thư mục '/usr/share/nginx/html'.
Bây giờ hãy xác minh vùng chứa Docker bằng lệnh sau.
Và bạn sẽ thấy đầu ra tương tự như bên dưới.
Tiếp theo, hãy mở lại trình duyệt web của bạn và nhập địa chỉ IP của máy chủ theo sau là cổng '8080' như bên dưới.
http://192.168.1.10:8080/
Và bạn sẽ nhận được 'index.html' tùy chỉnh mà bạn vừa tạo ở trên cùng, điều đó có nghĩa là thư mục '~/data' được gắn vào thư mục vùng chứa '/usr/share/nginx/html'.
6. Ngoài ra, bạn có thể đăng nhập vào container đang chạy 'web' bằng cách thực thi lệnh docker bên dưới.
Trước tiên, hãy kiểm tra xem container 'web' có đang chạy không.
Bây giờ hãy đính kèm vào container 'web' bằng lệnh bên dưới.
Bên trong container, hãy kiểm tra tên máy chủ của container bằng lệnh sau.
Kiểm tra địa chỉ IP của container bằng lệnh 'ip' bên dưới.
Kiểm tra bảng định tuyến của container bằng lệnh sau.
Dưới đây là kết quả tương tự mà bạn sẽ nhận được.
Để dọn dẹp môi trường hiện tại của bạn, hãy dừng Container 'web' bằng lệnh sau.
Ngoài ra, bạn có thể xóa tất cả các container có trạng thái 'exited' bằng lệnh bên dưới.
Hiện tại, Docker đã trở thành một tiêu chuẩn cho phát triển phần mềm và DevOps. Docker được hàng triệu nhà phát triển sử dụng để xây dựng, chia sẻ và chạy bất kỳ ứng dụng nào mỗi ngày tại nơi làm việc. Docker được sử dụng trong vòng đời phát triển ứng dụng, từ bản thân quá trình phát triển, thử nghiệm và sản xuất. Với Docker, ứng dụng trở nên linh hoạt và di động hơn. Các ứng dụng có thể chạy ở bất kỳ đâu trong các hệ điều hành khác nhau một cách dễ dàng, nhưng bản thân ứng dụng vẫn giữ nguyên từ thư viện đến tệp cấu hình.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Docker trên Debian 11 Bullseye. Ngoài ra, bạn sẽ học cách sử dụng Docker cơ bản để chạy container và quản lý hình ảnh.
Điều kiện tiên quyết
- Máy chủ Debian 11. Đảm bảo tất cả các gói được cập nhật lên phiên bản mới nhất.
- Người dùng root hoặc người dùng có quyền root. Người dùng này sẽ được sử dụng để cài đặt các gói mới và chỉnh sửa cấu hình hệ thống.
Cài đặt các phụ thuộc
Trước tiên, bạn sẽ cài đặt một số phụ thuộc gói cơ bản vào hệ thống Debian của mình.1. Thực hiện lệnh apt bên dưới để cài đặt các gói phụ thuộc mới.
Mã:
apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
Thêm kho lưu trữ Docker
Đối với hướng dẫn này, bạn sẽ cài đặt Docker từ kho lưu trữ Docker chính thức. Vì vậy, bạn sẽ thêm một kho lưu trữ Docker mới vào hệ thống Debian của mình.1. Thực hiện lệnh sau để thêm khóa GPG cho Docker.
Mã:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Mã:
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Mã:
apt update
Cài đặt Docker trên Debian 11
1. Nếu hệ thống của bạn đã cài Docker từ kho lưu trữ Debian trước đó, bạn phải xóa nó bằng lệnh bên dưới.
Mã:
sudo apt remove docker docker-engine docker.io containerd runc
Mã:
apt install docker-ce docker-ce-cli containerd.io
3. Nếu quá trình cài đặt hoàn tất, hãy thực hiện lệnh sau để xác minh cài đặt.
Kiểm tra xem dịch vụ đã được bật hay chưa.
Mã:
systemctl is-enabled docker
systemctl is-enabled containerd
Mã:
systemctl status docker containerd
Như đã thấy, các dịch vụ Docker và Containerd đang hoạt động (đang chạy) và cả hai dịch vụ đều được bật và sẽ tự động chạy khi hệ thống khởi động.
Cho phép người dùng không phải root sử dụng Docker
Theo mặc định, Docker chỉ cho phép người dùng 'root' chạy container. Và để người dùng không phải root có thể chạy container, bạn phải thêm người dùng không phải root của mình vào nhóm 'docker', được tự động tạo trong quá trình cài đặt Docker.1. Đối với ví dụ này, bạn sẽ sử dụng người dùng 'johndoe' để chạy container Docker.
Tạo người dùng mới 'johndoe' trên hệ thống Debian của bạn bằng lệnh sau.
Mã:
useradd -m -s /bin/bash johndoe
Mã:
usermod -aG docker johndoe
Mã:
su - johndoe
Mã:
docker run hello-world
Dưới đây là giải thích đơn giản về lệnh docker mà bạn chạy ở trên cùng.
- Docker sẽ cố gắng tìm một hình ảnh có tên 'hello-world'. Nếu hình ảnh có sẵn cục bộ, docker sẽ chạy container, nếu hình ảnh không có sẵn cục bộ, Docker sẽ tìm và tải xuống hình ảnh 'hello-world' trên Docker-hub (kho lưu trữ hình ảnh docker mặc định).
- Nếu hình ảnh docker được tải xuống, docker sẽ chạy container. Và container thực thi các lệnh và hiển thị cho bạn thông báo 'Xin chào Docker'.
Kiểm tra container có trạng thái 'đang chạy'.
Mã:
docker ps
Mã:
docker ps -a
Như bạn có thể thấy, tên container mới 'bold_bartix' được tạo bằng hình ảnh cơ sở 'hello-world' và trạng thái hiện tại của container là 'Đã thoát' hoặc đã dừng. Tên container 'bold_bartix' trong ảnh chụp màn hình được Docker chọn ngẫu nhiên, nhưng bạn có thể chỉ định tên container của mình.
Cách sử dụng Docker cơ bản
Đối với giai đoạn này, bạn sẽ tìm hiểu cách sử dụng Docker rất cơ bản để quản lý hình ảnh và container.1. Trước tiên, hãy tải xuống hình ảnh Docker về máy tính cục bộ của bạn bằng lệnh sau.
Mã:
docker pull nginx:alpine
Thuật ngữ 'tags' giống như một phiên bản của chính hình ảnh đó. 'nginx:alpine' có nghĩa là hình ảnh 'nginx' có thẻ 'alpine', có nghĩa là dựa trên hệ điều hành Alpine Linux. Luôn kiểm tra tất cả các thẻ có sẵn của hình ảnh Docker tại kho lưu trữ Docker-Hub chính thức.
Dưới đây là ví dụ về tất cả các thẻ có sẵn cho hình ảnh Docker 'nginx'.
Để kiểm tra tất cả các hình ảnh docker có sẵn trên hệ thống cục bộ của bạn, hãy chạy lệnh docker sau.
Mã:
hình ảnh docker
Như đã thấy, bạn có hai hình ảnh Docker, nginx:alpine và hello-world.
2. Tiếp theo, thực hiện lệnh sau để chạy một container.
Mã:
docker run -it --rm -d -p 8080:80 --name web nginx:alpine
Các tùy chọn bạn phải biết:
- -i hoặc --interactive - giữ cho STDIN của container mở ngay cả khi không được đính kèm.
- -t hoặc --tty - phân bổ một thiết bị đầu cuối giả kết nối thiết bị đầu cuối của bạn với STDIN và STDOUT của container.
- --rm - tự động xóa container khi container thoát hoặc dừng.
- -d - chạy container ở chế độ nền, hủy đính kèm container sau khi chạy.
- -p 8080:80 - ánh xạ cổng giữa container và hệ thống máy chủ. Cổng '80' trên container được ánh xạ tới cổng hệ thống lưu trữ '8080'.
- --name web - chỉ định tên container mới là 'web'.
- nginx:alpine - hình ảnh Docker mà chúng tôi sử dụng là 'nginx:alpine'.
Mã:
docker ps
Để xác minh container Nginx của bạn, hãy mở trình duyệt web và nhập địa chỉ IP máy chủ của bạn với cổng '8080'.
Và bạn sẽ xem trang chỉ mục Nginx từ container 'web ' như bên dưới.
3. Tiếp theo, bạn có thể kiểm tra nhật ký của container bằng cách thực hiện lệnh docker sau.
Mã:
docker logs web
Để giới hạn đầu ra nhật ký, bạn có thể sử dụng tùy chọn '--tail n' như bên dưới.
Mã:
docker logs --tail 10 web
4. Bây giờ để dừng container Docker, bạn có thể sử dụng lệnh Docker bên dưới.
Mã:
docker stop web
Mã:
docker ps
docker ps -a
Container 'web' bị dừng và tự động xóa. Đó là vì bạn sử dụng tùy chọn '--rm' khi chạy container.
5. Tiếp theo, bạn sẽ học cách chạy container với ổ đĩa tùy chỉnh. Thư mục trên máy chủ sẽ được sử dụng làm ổ đĩa cho vùng chứa Docker.
Tạo thư mục 'data' mới và tệp 'index.html' tùy chỉnh bằng lệnh sau.
Mã:
mkdir -p ~/data/
nano ~/data/index.html
Mã:
Chào mừng đến với Docker Nginx
[HEADING=2]Xin chào từ Nginx container[/HEADING]
Tiếp theo, tạo container mới bằng lệnh docker bên dưới.
Mã:
docker run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine
Tùy chọn '-v ~/data:/usr/share/nginx/html' sẽ gắn '~/data' trên máy cục bộ vào container tại Thư mục '/usr/share/nginx/html'.
Bây giờ hãy xác minh vùng chứa Docker bằng lệnh sau.
Mã:
docker ps
Tiếp theo, hãy mở lại trình duyệt web của bạn và nhập địa chỉ IP của máy chủ theo sau là cổng '8080' như bên dưới.
http://192.168.1.10:8080/
Và bạn sẽ nhận được 'index.html' tùy chỉnh mà bạn vừa tạo ở trên cùng, điều đó có nghĩa là thư mục '~/data' được gắn vào thư mục vùng chứa '/usr/share/nginx/html'.
6. Ngoài ra, bạn có thể đăng nhập vào container đang chạy 'web' bằng cách thực thi lệnh docker bên dưới.
Trước tiên, hãy kiểm tra xem container 'web' có đang chạy không.
Mã:
docker ps
Mã:
docker exec -it web /bin/sh
Mã:
hostname
Mã:
ip a
Mã:
route -n
Để dọn dẹp môi trường hiện tại của bạn, hãy dừng Container 'web' bằng lệnh sau.
Mã:
docker stop web
Mã:
docker rm $(docker ps --filter "status=exited" -q)