Attach và Detach trong Docker – Chạy container foreground hay background? – Bài 4

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 modedetached 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 + C hoặ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ữ? Không
Có thể nhập lệnh khác? Không
Đó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 exec khi 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

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em