namespaces trong Linux kernel để chạy được Podman container và Docker container – Phần 1

Bạn đã từng nghe nói Podman container hay Docker container chạy được là nhờ có chức năng namespaces trong Linux kernel đúng không?

Đúng vậy Podman container hay Docker container sử dụng Linux namespaces để tạo ra các container giả lập hệ điều hành hay ở dạng 1 môi trường hệ điều hành cô lập (isolated), riêng biệt giải quyết được vấn đề trước giờ xảy ra là bị xung đột phiên bản phần mềm, xung đột thư viện khi cùng chạy phần mềm nhiều phiên bản hay nhiều phần mềm trên cùng 1 hệ điều hành Linux.

Linux kernel mới nhất có 6 namespace là UTS, TIME, IPC, User, PID, Network.

Namespaces support

CONFIG_NAMESPACES:

Provides the way to make tasks work with different objects using
the same id. For example same IPC id may refer to different objects
or same user id or pid may refer to different tasks when used in
different namespaces.

Symbol: NAMESPACES [=y]
Type  : bool
Defined at init/Kconfig:1201
  Prompt: Namespaces support
  Depends on: MULTIUSER [=y]
  Visible if: MULTIUSER [=y] && EXPERT [=y]
  Location:
    -> General setup
      -> Namespaces support (NAMESPACES [=y])

UTS namespace trong Linux kernel.

UTS namespace

CONFIG_UTS_NS:

In this namespace tasks see different info provided with the
uname() system call

Symbol: UTS_NS [=y]
Type  : bool
Defined at init/Kconfig:1213
  Prompt: UTS namespace
  Depends on: NAMESPACES [=y]
  Location:
    -> General setup
      -> Namespaces support (NAMESPACES [=y])
        -> UTS namespace (UTS_NS [=y])

TIME namespace trong Linux kernel.

TIME namespace

CONFIG_TIME_NS:

In this namespace boottime and monotonic clocks can be set.
The time will keep going with the same pace.

Symbol: TIME_NS [=y]
Type  : bool
Defined at init/Kconfig:1220
  Prompt: TIME namespace
  Depends on: NAMESPACES [=y] && GENERIC_VDSO_TIME_NS [=y]
  Location:
    -> General setup
      -> Namespaces support (NAMESPACES [=y])
        -> TIME namespace (TIME_NS [=y])

IPC namespace trong Linux kernel.

IPC namespace

CONFIG_IPC_NS:

In this namespace tasks work with IPC ids which correspond to
different IPC objects in different namespaces.

Symbol: IPC_NS [=y]
Type  : bool
Defined at init/Kconfig:1228
  Prompt: IPC namespace
  Depends on: NAMESPACES [=y] && (SYSVIPC [=y] || POSIX_MQUEUE [=y])
  Location:
    -> General setup
      -> Namespaces support (NAMESPACES [=y])
        -> IPC namespace (IPC_NS [=y])