Bây giờ bạn đã hiểu Docker image, đã đến lúc sử dụng chúng để chạy container. container là một phiên bản có thể chạy được của image, đó là phiên bản bạn thực sự triển khai và sử dụng trong các ứng dụng của mình. Trong phần này, bạn sẽ tìm hiểu cách chạy, quản lý và làm việc với Docker container.
Chạy container đầu tiên của bạn
Hãy bắt đầu với một container đơn giản bằng máy chủ web nginx image mà bạn đã lấy ở phần trước:
docker run nginx:latest
Chạy lệnh này:
- Tạo container mới từ nginx:image mới nhất
- Khởi động container
- Gắn thiết bị đầu cuối của bạn vào thiết bị xuất chuẩn/thiết bị xuất chuẩn của container
Bạn sẽ thấy nhật ký nginx trong thiết bị đầu cuối của mình:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
...
container này đang chạy ở nền trước. Để dừng nó, nhấn Ctrl+C.
Chạy container ở Chế độ tách rời
Đối với hầu hết các trường hợp, bạn sẽ muốn chạy container ở chế độ nền (chế độ tách rời):
docker run -d nginx:latest
Cờ -d báo cho Docker chạy container ở chế độ nền. Docker phản hồi bằng ID container:
7d14a361fe7c3a2ad868184c0ac7a112bc2eb2ee424fa6c8a3a52c6c8afb2dfe
Đặt tên container
Theo mặc định, Docker gán tên ngẫu nhiên cho container. Bạn có thể chỉ định tên bằng cờ --name:
docker run -d --name my-nginx nginx:latest
Việc sử dụng tên có ý nghĩa sẽ giúp việc tham chiếu container trong các lệnh khác dễ dàng hơn.
Danh sách đang chạy container
Để xem tất cả container đang chạy:
docker ps
Đầu ra ví dụ:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d292c4f70394 nginx:latest "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 80/tcp my-nginx
Để xem tất cả container, bao gồm cả những cái đã dừng:
docker ps -a
Hiển thị các cổng container
container có mạng riêng biệt. Để truy cập các dịch vụ của container từ máy chủ của bạn, bạn cần xuất bản các cổng bằng cờ -p:
docker run -d --name web-server -p 8080:80 nginx:latest
Điều này ánh xạ cổng 80 bên trong container sang cổng 8080 trên máy chủ của bạn. Bây giờ bạn có thể truy cập nginx bằng cách truy cập http://localhost:8080 trong trình duyệt của mình.
Định dạng để ánh xạ cổng là -p host_port:container_port.
Bạn có thể ánh xạ nhiều cổng:
docker run -d --name web-app -p 8080:80 -p 8443:443 nginx:latest
Xem nhật ký container
Để xem nhật ký từ container:
docker logs my-nginx
Để theo dõi liên tục, hãy thêm cờ -f (theo dõi):
docker logs -f my-nginx
Điều này truyền phát nhật ký mới khi chúng được tạo. Nhấn Ctrl+C để dừng theo dõi.
Thực thi các lệnh khi chạy container
Đôi khi bạn cần chạy các lệnh bên trong container đang chạy. Sử dụng lệnh exec cho việc này:
docker exec -it my-nginx bash
Các cờ -it có nghĩa là:
-i: Giữ STDIN mở (tương tác)-t: Phân bổ TTY giả
Điều này cung cấp cho bạn một bash shell bên trong container nơi bạn có thể chạy các lệnh:
root@d292c4f70394:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
Gõ exit để thoát khỏi container shell.
Dừng và khởi động container
Để dừng container đang chạy:
docker stop my-nginx
Thao tác này sẽ gửi tín hiệu SIGTERM đến quy trình chính, cho nó thời gian để tắt một cách nhẹ nhàng.
Để buộc dừng ngay lập tức:
docker kill my-nginx
Để khởi động lại container đã dừng:
docker start my-nginx
Đang khởi động lại container
Docker container có thể được cấu hình để tự động khởi động lại khi chúng thoát hoặc khi Docker khởi động lại. Sử dụng cờ --restart khi tạo container:
docker run -d --restart always --name always-up nginx:latest
Khởi động lại chính sách:
no: Không khởi động lại (mặc định)on-failure[:max-retries]: Chỉ khởi động lại nếu container thoát với trạng thái khác 0always: Luôn khởi động lại bất kể trạng thái thoátunless-stopped: Luôn khởi động lại trừ khi dừng rõ ràng
Biến môi trường
Nhiều container có thể được cấu hình bằng các biến môi trường:
docker run -d --name custom-nginx -e NGINX_HOST=example.com -e NGINX_PORT=80 nginx:latest
Cờ -e đặt biến môi trường bên trong container.
Dọn dẹp container
Để xóa container đã dừng:
docker rm my-nginx
Để buộc xóa container đang chạy:
docker rm -f my-nginx
Để xóa tất cả container đã dừng:
docker container prune
Sử dụng volume với container
container chỉ là phù du, khi chúng bị xóa, mọi dữ liệu được ghi bên trong container sẽ bị mất. Đối với dữ liệu liên tục, hãy sử dụng volume:
docker run -d --name nginx-with-data -v nginx-data:/usr/share/nginx/html nginx:latest
Điều này tạo ra một volume có tên nginx-data và gắn nó vào /usr/share/nginx/html bên trong container.
Chúng tôi sẽ đề cập chi tiết hơn về volume trong phần sau.
Giới hạn tài nguyên container
Bạn có thể giới hạn tài nguyên mà container có thể sử dụng:
docker run -d --name limited-nginx --cpus 0.5 --memory 512m nginx:latest
Điều này giới hạn container sử dụng 50% một lõi CPU và 512 MB bộ nhớ.
Kiểm tra sức khỏe container
Kiểm tra tình trạng giúp Docker xác định xem container có hoạt động bình thường hay không:
docker run -d --name healthy-nginx --health-cmd="curl -f http://localhost/ || exit 1" --health-interval=5s nginx:latest
Lệnh này chạy lệnh được chỉ định cứ sau 5 giây để kiểm tra xem container có hoạt động tốt hay không.
Mạng container
container có thể giao tiếp với nhau thông qua mạng Docker. Cách đơn giản nhất là sử dụng mạng cầu nối mặc định:
docker run -d --name db postgres:13
docker run -d --name web --link db:database -p 8080:80 mywebapp:latest
Cờ --link tạo liên kết từ web container tới db container, cho phép chúng giao tiếp. Web container có thể truy cập cơ sở dữ liệu bằng tên máy chủ database.
Chúng tôi sẽ đề cập đến mạng chi tiết hơn trong phần sau.
Giám sát việc sử dụng tài nguyên container
Để xem mức sử dụng tài nguyên của container của bạn:
docker stats
Điều này hiển thị luồng trực tiếp về mức sử dụng CPU, bộ nhớ, mạng và ổ đĩa cho mỗi container.
Ví dụ thực tế: Chạy một trang web WordPress
Hãy kết hợp tất cả lại với một ví dụ thực tế. Lệnh này chạy WordPress container được liên kết với cơ sở dữ liệu MySQL:
# First, create a network
docker network create wordpress-net
# Run MySQL container
docker run -d --name wordpress-db \
--network wordpress-net \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
mysql:5.7
# Run WordPress container
docker run -d --name wordpress-site \
--network wordpress-net \
-e WORDPRESS_DB_HOST=wordpress-db \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpress \
-e WORDPRESS_DB_NAME=wordpress \
-p 8080:80 \
wordpress:latest
Sau khi chạy các lệnh này, bạn có thể truy cập trang web WordPress của mình tại http://localhost:8080.
Môi trường phát triển trên đám mây
Đối với các nhóm phát triển, việc chạy Docker container trên đám mây mang đến một môi trường nhất quán mà mọi người đều có thể truy cập. DigitalOcean cung cấp một nền tảng tuyệt vời cho việc này với các Droplets dựa trên SSD nhanh được tối ưu hóa cho khối lượng công việc container.
Đăng ký với DigitalOcean để nhận tín dụng miễn phí trị giá 200 USD và triển khai các ứng dụng trong vùng chứa của bạn lên đám mây.
Trong phần tiếp theo, chúng ta sẽ tìm hiểu cách xây dựng Docker image tùy chỉnh của riêng bạn bằng Dockerfiles.