Chào các bạn, hôm nay chúng ta sẽ tìm hiểu về một khái niệm rất hay trong Docker: chạy container ở chế độ foreground (gắn liền với terminal) hay background (chạy nền). Trong Linux, đây còn gọi là attached mode và detached mode.
Mình sẽ giải thích rõ bằng ví dụ thực tế trên Linux trước, rồi sau đó áp dụng lại trong Docker – vì cách hoạt động rất giống nhau.
Xem thêm:
Cách truy cập container trong Docker để kiểm tra và xử lý sự cố – Bài 5
Docker Registry và Docker Repo – Bài 6
1. Foreground vs Background trong Linux
Ví dụ: chạy script foreground (mặc định)
Giả sử bạn có một file script.sh với nội dung:
#!/bin/bash
while true
do
logger "Hello, world!"
sleep 3
done
Khi bạn chạy:
bash script.sh
- Lệnh này sẽ chạy mãi (vì vòng lặp
while true). - Bạn không thể gõ lệnh nào khác trong terminal cho đến khi script dừng.
- Đây gọi là chạy ở chế độ foreground, hay attached vào session.
Nếu bạn đóng terminal?
Script sẽ bị kill vì terminal chính là nơi “gắn” với tiến trình.
Ví dụ: chạy script background bằng dấu &
Bạn có thể chạy script ở chế độ nền (background) bằng:
bash script.sh &
- Dấu
&sẽ tách tiến trình ra khỏi terminal. - Bạn có thể tiếp tục gõ các lệnh khác.
- Script vẫn chạy trong nền cho tới khi bạn dừng nó.
Xem tiến trình đang chạy:
ps -ef | grep script.sh
Dừng tiến trình:
kill -9 <PID>
2. Attach và Detach trong Docker
Docker chạy container ở chế độ foreground (mặc định)
docker run php:apache
- Container sẽ chạy và giữ luôn terminal, bạn không thể thao tác gì khác.
- Nếu bạn bấm
Ctrl + Choặc tắt terminal → container bị dừng. - Tương tự như cách script chạy foreground trên Linux.
Docker chạy container background với -d (detached mode)
docker run -d php:apache
- Container sẽ chạy ngầm trong nền.
- Bạn có thể tiếp tục sử dụng terminal bình thường.
- Kiểm tra container đang chạy:
docker ps
- Nếu muốn dừng container:
docker stop <container_id>
3. Sự khác biệt giữa attached và detached mode
| Tiêu chí | Attached Mode (foreground) | Detached Mode (background) |
|---|---|---|
| Câu lệnh | docker run php:apache |
docker run -d php:apache |
| Terminal bị chiếm giữ? | Có | Không |
| Có thể nhập lệnh khác? | Không | Có |
| Đóng terminal có ảnh hưởng? | Container bị dừng | Container vẫn chạy |
| Truy cập lại container? | Không (phải chạy lại) | Có thể docker exec hoặc attach |
4. Khi nào dùng detached?
Trong thực tế, khi chạy các dịch vụ như web server, database, queue worker, bạn sẽ luôn nên chạy ở chế độ detached (-d). Điều này giúp:
- Giữ container hoạt động ổn định.
- Không chiếm giữ terminal.
- Dễ dàng truy cập bằng
docker execkhi cần kiểm tra.
5. Truy cập container đang chạy
Sau khi container chạy ngầm, bạn có thể “vào lại” bằng lệnh:
docker exec -it <container_name_or_id> bash
Bài viết cùng chủ đề:
Hướng dẫn Mapping Port trong Docker – Mở port (expose và publish) – Bài 7
Hướng dẫn sử dụng Docker Volume – Bài 8