일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Termux
- 딸래미
- 일본
- 페루
- 한강
- 스마트폰 리눅스
- FT-8
- 비욘드트러스트
- 캠핑
- 가족여행
- 도쿄
- 제주도
- ARM
- 크로스 컴파일
- 휴양림
- iGPSPORT
- 갤럭시 핏2
- 체험학습
- 아마추어무선
- ubuntu 24.04
- 갤럭시 핏3
- 대만
- 한강 라이딩코스
- BSC100S
- 태블릿 리눅스
- 여행
- 어린이
- 둠
- 박물관
- cross compile
- Today
- Total
주희아빠의 헝그리 라이딩
Docker vs VM 개념 새롭게 정리해 드립니다. 본문
2024.1.19
docker 를 아시는 분들은 이 이미지가 익숙하시지요.
네모 반듯한 컨테이너가 차곡차곡 쌓여 있습니다. 그래서 보통은 docker 를 이용해 패키징하면 컨테이너처럼 네모 반듯한 모양으로 구성될 거라는 생각이 들게됩니다.
하지만 사실 docker 의 개념은 고래위에 쌓인 컨테이너가 아닙니다. 그 컨테이너 안이 어떻게 생겼냐가 뽀인트입니다.
실제로 보면 docker 의 개념은 다음이 더 정확하지 않나 싶습니다.
방은 하나 뿐인데 그 방에 철망이나 천조각을 막아서 칸을 잘게 나눈 것이지요.
그래서 화장실이나 부엌은 하나 뿐인데 나눠써야 하고 그나마 잠자리만 겨우 독립을 시켜 놓은 모습이라고 생각합니다.
저 작은 칸 중 하나에 apache 가 돌고 있는 프로세스가 자리잡고 또 다른 한 곳에는 tomcat 이 도는 프로세스가 자리 잡습니다. 하지만 서로의 존재를 모르고 열심히 일하고 있습니다.
'화장실이나 부엌'은 '네트웍이나 IO' 처럼 외부와 연결되는 커널 영역이라고 비유할 수 있습니다.
사실 리눅스에서 컨테이너라고 불리우는 docker 가 등장하기 한참 전인 2010년 정도에 Yahoo 에서 사용하는 FreeBSD 에는 Jail 이라는 환경 격리툴이 있었습니다.
namespace, cgroup, chroot 같은 기술을 통해 프로세스와 디스크에 대해 격리시켜서 마치 혼자만 실행되고 있는 것처럼 구성이 가능했습니다. 사실 이때도 사용하면서 이건 vm 의 일종인가 하고 헛갈려 했습니다.
그러다 몇년뒤 리눅스 진영에서 컨테이너라는 이름과 함께 docker 가 등장을 하였는데 이때는 왠지 환경 격리의 의미보다는 배포툴의 한 형태로 소개가 되고 있었습니다.
아무래도 CI/ CD 가 유행하며 docker 를 사용하면 깔끔하게 패키징과 배포, 운영이 가능하다는 점이 어필을 한 모양입니다.
어쨌든 vm 같은 완전한 머신이 아니라 평범하던 프로세스에게 칸막이 하나 쳐주고 '이제부터 너는 독립된 머신이야' 라고 구분을 해준 것입니다.
다음은 ps -ef 명령으로 보는 전체 프로세스 현황입니다. 이렇게 보면 docker 내부의 프로세스들도 포함되어 있습니다. 밖에서 보면 그냥 일반적인 프로세스와 같을 뿐입니다. (ubuntu 22.04 LTS. 리스트 뒷쪽에서 vim 과 top 을 찾아보십시오.)
multitab@multitab-Aspire:~/tmp$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 19:36 ? 00:00:13 /sbin/init splash
root 2 0 0 19:36 ? 00:00:00 [kthreadd]
root 3 2 0 19:36 ? 00:00:00 [rcu_gp]
root 4 2 0 19:36 ? 00:00:00 [rcu_par_gp]
root 5 2 0 19:36 ? 00:00:00 [slub_flushwq]
root 6 2 0 19:36 ? 00:00:00 [netns]
root 8 2 0 19:36 ? 00:00:00 [kworker/0:0H-events_highpri]
root 11 2 0 19:36 ? 00:00:00 [mm_percpu_wq]
root 12 2 0 19:36 ? 00:00:00 [rcu_tasks_kthread]
root 13 2 0 19:36 ? 00:00:00 [rcu_tasks_rude_kthread]
root 14 2 0 19:36 ? 00:00:00 [rcu_tasks_trace_kthread]
root 15 2 0 19:36 ? 00:00:04 [ksoftirqd/0]
root 16 2 0 19:36 ? 00:00:01 [rcu_preempt]
root 17 2 0 19:36 ? 00:00:00 [migration/0]
root 18 2 0 19:36 ? 00:00:00 [idle_inject/0]
root 19 2 0 19:36 ? 00:00:00 [cpuhp/0]
root 20 2 0 19:36 ? 00:00:00 [cpuhp/1]
root 21 2 0 19:36 ? 00:00:00 [idle_inject/1]
root 22 2 0 19:36 ? 00:00:00 [migration/1]
root 23 2 0 19:36 ? 00:00:03 [ksoftirqd/1]
root 25 2 0 19:36 ? 00:00:00 [kworker/1:0H-events_highpri]
root 26 2 0 19:36 ? 00:00:00 [kdevtmpfs]
root 27 2 0 19:36 ? 00:00:00 [inet_frag_wq]
root 28 2 0 19:36 ? 00:00:03 [kworker/u8:1-events_unbound]
root 29 2 0 19:36 ? 00:00:00 [kauditd]
root 30 2 0 19:36 ? 00:00:00 [khungtaskd]
root 32 2 0 19:36 ? 00:00:00 [oom_reaper]
root 33 2 0 19:36 ? 00:00:00 [writeback]
root 34 2 0 19:36 ? 00:00:00 [kcompactd0]
root 35 2 0 19:36 ? 00:00:00 [ksmd]
root 37 2 0 19:36 ? 00:00:00 [khugepaged]
root 38 2 0 19:36 ? 00:00:00 [kintegrityd]
root 39 2 0 19:36 ? 00:00:00 [kblockd]
root 40 2 0 19:36 ? 00:00:00 [blkcg_punt_bio]
root 41 2 0 19:36 ? 00:00:00 [tpm_dev_wq]
root 42 2 0 19:36 ? 00:00:00 [ata_sff]
root 43 2 0 19:36 ? 00:00:00 [md]
root 44 2 0 19:36 ? 00:00:00 [md_bitmap]
root 45 2 0 19:36 ? 00:00:00 [edac-poller]
root 46 2 0 19:36 ? 00:00:00 [devfreq_wq]
root 47 2 0 19:36 ? 00:00:00 [watchdogd]
root 48 2 0 19:36 ? 00:00:00 [kworker/0:1H-events_highpri]
root 49 2 0 19:36 ? 00:00:00 [kswapd0]
root 50 2 0 19:36 ? 00:00:00 [ecryptfs-kthread]
root 51 2 0 19:36 ? 00:00:00 [kthrotld]
root 52 2 0 19:36 ? 00:00:00 [acpi_thermal_pm]
root 54 2 0 19:36 ? 00:00:00 [mld]
root 55 2 0 19:36 ? 00:00:00 [ipv6_addrconf]
root 56 2 0 19:36 ? 00:00:00 [kworker/1:1H-kblockd]
root 65 2 0 19:36 ? 00:00:00 [kstrp]
root 71 2 0 19:36 ? 00:00:00 [charger_manager]
root 117 2 0 19:36 ? 00:00:00 [napi/eth%d-8193]
root 118 2 0 19:36 ? 00:00:00 [napi/eth%d-0]
root 119 2 0 19:36 ? 00:00:00 [scsi_eh_0]
root 120 2 0 19:36 ? 00:00:00 [scsi_tmf_0]
root 121 2 0 19:36 ? 00:00:00 [scsi_eh_1]
root 122 2 0 19:36 ? 00:00:00 [scsi_tmf_1]
root 123 2 0 19:36 ? 00:00:00 [scsi_eh_2]
root 124 2 0 19:36 ? 00:00:00 [scsi_tmf_2]
root 125 2 0 19:36 ? 00:00:00 [scsi_eh_3]
root 126 2 0 19:36 ? 00:00:00 [scsi_tmf_3]
root 127 2 0 19:36 ? 00:00:00 [scsi_eh_4]
root 129 2 0 19:36 ? 00:00:00 [scsi_tmf_4]
root 130 2 0 19:36 ? 00:00:00 [scsi_eh_5]
root 132 2 0 19:36 ? 00:00:00 [scsi_tmf_5]
root 164 2 0 19:36 ? 00:00:00 [jbd2/sda6-8]
root 165 2 0 19:36 ? 00:00:00 [ext4-rsv-conver]
root 204 1 0 19:36 ? 00:00:01 /lib/systemd/systemd-journald
root 244 1 0 19:36 ? 00:00:00 /lib/systemd/systemd-udevd
root 304 2 0 19:36 ? 00:00:00 [cfg80211]
root 309 2 0 19:36 ? 00:00:03 [kworker/u9:2-rtw_tx_wq]
systemd+ 349 1 0 19:36 ? 00:00:05 /lib/systemd/systemd-oomd
systemd+ 350 1 0 19:36 ? 00:00:00 /lib/systemd/systemd-resolved
systemd+ 354 1 0 19:36 ? 00:00:00 /lib/systemd/systemd-timesyncd
root 416 2 0 19:36 ? 00:00:00 [ttm]
root 417 2 0 19:36 ? 00:00:00 [card0-crtc0]
root 420 2 0 19:36 ? 00:00:00 [card0-crtc1]
root 421 2 0 19:36 ? 00:00:00 [rtw88_usb: tx w]
root 422 2 0 19:36 ? 00:00:00 [rtw88_usb: rx w]
root 426 1 0 19:36 ? 00:00:00 /usr/libexec/accounts-daemon
root 427 1 0 19:36 ? 00:00:00 /usr/sbin/acpid
avahi 430 1 0 19:36 ? 00:00:00 avahi-daemon: running [multitab-Aspire.local]
root 431 1 0 19:36 ? 00:00:00 /usr/lib/bluetooth/bluetoothd
root 432 1 0 19:36 ? 00:00:00 /usr/sbin/cron -f -P
message+ 433 1 0 19:36 ? 00:00:04 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-
root 436 1 0 19:36 ? 00:00:02 /usr/sbin/NetworkManager --no-daemon
root 444 1 0 19:36 ? 00:00:00 /usr/sbin/irqbalance --foreground
root 447 1 0 19:36 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 448 1 0 19:36 ? 00:00:05 /usr/libexec/polkitd --no-debug
root 453 1 0 19:36 ? 00:00:00 /usr/libexec/power-profiles-daemon
syslog 457 1 0 19:36 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE
root 464 1 0 19:36 ? 00:00:11 /usr/lib/snapd/snapd
root 466 1 0 19:36 ? 00:00:00 /usr/libexec/switcheroo-control
root 477 1 0 19:36 ? 00:00:00 /lib/systemd/systemd-logind
root 538 1 0 19:36 ? 00:00:01 /usr/libexec/udisks2/udisksd
root 539 1 0 19:36 ? 00:00:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
avahi 558 430 0 19:36 ? 00:00:00 avahi-daemon: chroot helper
root 573 1 0 19:36 ? 00:00:00 /usr/sbin/ModemManager
root 578 1 0 19:36 ? 00:00:00 /usr/sbin/cupsd -l
root 590 1 0 19:36 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signa
root 619 1 0 19:36 ? 00:00:00 /usr/sbin/gdm3
rtkit 794 1 0 19:36 ? 00:00:00 /usr/libexec/rtkit-daemon
root 901 1 0 19:36 ? 00:00:00 /usr/libexec/upowerd
root 907 1 0 19:36 ? 00:00:00 /usr/libexec/packagekitd
root 1058 1 0 19:36 ? 00:00:00 /usr/sbin/cups-browsed
kernoops 1072 1 0 19:36 ? 00:00:00 /usr/sbin/kerneloops --test
kernoops 1082 1 0 19:36 ? 00:00:00 /usr/sbin/kerneloops
colord 1106 1 0 19:36 ? 00:00:00 /usr/libexec/colord
root 1186 619 0 19:39 ? 00:00:00 gdm-session-worker [pam/gdm-password]
multitab 1201 1 0 19:39 ? 00:00:02 /lib/systemd/systemd --user
multitab 1202 1201 0 19:39 ? 00:00:00 (sd-pam)
multitab 1208 1201 0 19:39 ? 00:00:00 /usr/bin/pipewire
multitab 1209 1201 0 19:39 ? 00:00:00 /usr/bin/pipewire-media-session
multitab 1210 1201 0 19:39 ? 00:00:00 /usr/bin/pulseaudio --daemonize=no --log-target=journal
multitab 1214 1 0 19:39 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
multitab 1228 1201 0 19:39 ? 00:00:01 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
multitab 1229 1201 0 19:39 ? 00:00:00 /usr/libexec/xdg-document-portal
multitab 1232 1201 0 19:40 ? 00:00:00 /usr/libexec/xdg-permission-store
root 1238 1229 0 19:40 ? 00:00:00 fusermount3 -o rw,nosuid,nodev,fsname=portal,auto_unmount,subtype=portal -- /run/user/1000/d
multitab 1252 1186 0 19:40 tty2 00:00:00 /usr/libexec/gdm-wayland-session env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session
multitab 1258 1252 0 19:40 tty2 00:00:00 /usr/libexec/gnome-session-binary --session=ubuntu
multitab 1301 1201 0 19:40 ? 00:00:00 /usr/libexec/gnome-session-ctl --monitor
multitab 1319 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfsd
multitab 1329 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f
multitab 1330 1201 0 19:40 ? 00:00:00 /usr/libexec/gnome-session-binary --systemd-service --session=ubuntu
root 1372 2 0 19:40 ? 00:00:00 [krfcommd]
multitab 1379 1330 0 19:40 ? 00:00:00 /usr/libexec/at-spi-bus-launcher --launch-immediately
multitab 1381 1201 3 19:40 ? 00:02:20 /usr/bin/gnome-shell
multitab 1387 1379 0 19:40 ? 00:00:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork -
multitab 1409 1201 0 19:40 ? 00:00:00 /usr/libexec/gnome-shell-calendar-server
multitab 1415 1201 0 19:40 ? 00:00:00 /usr/libexec/evolution-source-registry
multitab 1422 1201 0 19:40 ? 00:00:00 /usr/libexec/goa-daemon
multitab 1423 1201 0 19:40 ? 00:00:00 /snap/snapd-desktop-integration/83/usr/bin/snapd-desktop-integration
multitab 1437 1201 0 19:40 ? 00:00:00 /usr/libexec/evolution-calendar-factory
multitab 1449 1201 0 19:40 ? 00:00:01 /usr/libexec/gvfs-udisks2-volume-monitor
multitab 1471 1201 0 19:40 ? 00:00:00 /usr/libexec/goa-identity-service
multitab 1481 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfs-goa-volume-monitor
multitab 1493 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfs-gphoto2-volume-monitor
multitab 1512 1201 0 19:40 ? 00:00:00 /usr/libexec/dconf-service
multitab 1513 1201 0 19:40 ? 00:00:00 /usr/libexec/evolution-addressbook-factory
multitab 1517 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfs-mtp-volume-monitor
multitab 1533 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfs-afc-volume-monitor
multitab 1542 1423 0 19:40 ? 00:00:00 /snap/snapd-desktop-integration/83/usr/bin/snapd-desktop-integration
multitab 1547 1201 0 19:40 ? 00:00:00 /usr/libexec/xdg-desktop-portal
multitab 1554 1201 0 19:40 ? 00:00:00 /usr/libexec/xdg-desktop-portal-gnome
multitab 1561 1319 0 19:40 ? 00:00:00 /usr/libexec/gvfsd-trash --spawner :1.15 /org/gtk/gvfs/exec_spaw/0
multitab 1571 1201 0 19:40 ? 00:00:00 /usr/bin/gjs /usr/share/gnome-shell/org.gnome.Shell.Notifications
multitab 1575 1201 0 19:40 ? 00:00:00 /usr/libexec/at-spi2-registryd --use-gnome-session
multitab 1585 1201 0 19:40 ? 00:00:00 sh -c /usr/bin/ibus-daemon --panel disable $([ "$XDG_SESSION_TYPE" = "x11" ] && echo "--xim"
multitab 1587 1585 0 19:40 ? 00:00:08 /usr/bin/ibus-daemon --panel disable
multitab 1588 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-a11y-settings
multitab 1591 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-color
multitab 1599 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-datetime
multitab 1601 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-housekeeping
multitab 1602 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-keyboard
multitab 1604 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-media-keys
multitab 1608 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-power
multitab 1610 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-print-notifications
multitab 1611 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-rfkill
multitab 1613 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-screensaver-proxy
multitab 1616 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-sharing
multitab 1619 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-smartcard
multitab 1623 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-sound
multitab 1627 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-wacom
multitab 1647 1201 0 19:40 ? 00:00:00 /usr/libexec/gsd-printer
multitab 1649 1330 0 19:40 ? 00:00:00 /usr/libexec/gsd-disk-utility-notify
multitab 1662 1587 0 19:40 ? 00:00:00 /usr/libexec/ibus-memconf
multitab 1663 1587 0 19:40 ? 00:00:05 /usr/libexec/ibus-extension-gtk3
multitab 1676 1201 0 19:40 ? 00:00:00 /usr/libexec/ibus-portal
multitab 1689 1330 0 19:40 ? 00:00:00 /usr/libexec/evolution-data-server/evolution-alarm-notify
multitab 1756 1587 0 19:40 ? 00:00:02 /usr/libexec/ibus-engine-hangul --ibus
multitab 1761 1201 0 19:40 ? 00:00:00 /usr/libexec/xdg-desktop-portal-gtk
multitab 1776 1201 0 19:40 ? 00:00:02 /usr/libexec/tracker-miner-fs-3
multitab 1796 1201 0 19:40 ? 00:00:00 /usr/bin/gjs /usr/share/gnome-shell/org.gnome.ScreenSaver
multitab 1844 1201 0 19:40 ? 00:00:00 /usr/libexec/gvfsd-metadata
multitab 1861 1201 0 19:40 ? 00:00:00 /usr/bin/python3 /usr/bin/gnome-terminal --wait
multitab 1862 1861 0 19:40 ? 00:00:00 /usr/bin/gnome-terminal.real --wait
multitab 1867 1201 1 19:40 ? 00:01:01 /usr/libexec/gnome-terminal-server
multitab 1885 1867 0 19:40 pts/0 00:00:00 bash
multitab 1917 1330 0 19:41 ? 00:00:00 update-notifier
multitab 2019 1867 0 19:42 pts/2 00:00:00 bash
root 2307 1 0 19:45 ? 00:00:04 /usr/bin/containerd
root 2465 1 0 19:46 ? 00:00:11 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
multitab 2813 1381 0 20:00 ? 00:00:03 gjs /usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js -E -P /usr/share/gnome-she
root 3098 2 0 20:02 ? 00:00:02 [kworker/u8:4-events_power_efficient]
root 3415 2 0 20:06 ? 00:00:01 [kworker/0:1-events]
multitab 3530 1867 0 20:09 pts/3 00:00:00 bash
root 3675 2 0 20:09 ? 00:00:02 [kworker/u8:3-events_power_efficient]
root 3692 1885 0 20:10 pts/0 00:00:00 sudo docker run -it ubuntu bash
root 3693 3692 0 20:10 pts/1 00:00:00 sudo docker run -it ubuntu bash
root 3694 3693 0 20:10 pts/1 00:00:00 docker run -it ubuntu bash
root 3729 1 0 20:10 ? 00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id fc7fe321ed1c94f8f042ca8875c9c016b4276fe
root 3752 3729 0 20:10 pts/0 00:00:00 bash
root 3811 3530 0 20:14 pts/3 00:00:00 sudo docker run -it ubuntu bash
root 3812 3811 0 20:14 pts/4 00:00:00 sudo docker run -it ubuntu bash
root 3813 3812 0 20:14 pts/4 00:00:00 docker run -it ubuntu bash
root 3850 1 0 20:14 ? 00:00:01 /usr/bin/containerd-shim-runc-v2 -namespace moby -id a492ed5dfa0a2d072ecac21f118a9a86d2e8801
root 3873 3850 0 20:14 pts/0 00:00:00 bash
root 4315 3873 0 20:20 pts/0 00:00:00 vim
root 4565 2 0 20:25 ? 00:00:00 [kworker/u8:2-rtw88_usb: tx wq]
multitab 4659 1201 0 20:25 ? 00:00:00 /usr/bin/snap userd
root 4935 2 0 20:25 ? 00:00:00 [kworker/u9:3-rtw_tx_wq]
root 5424 1 0 20:25 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
multitab 5674 1319 0 20:28 ? 00:00:00 /usr/libexec/gvfsd-network --spawner :1.15 /org/gtk/gvfs/exec_spaw/1
multitab 5686 1319 0 20:28 ? 00:00:00 /usr/libexec/gvfsd-dnssd --spawner :1.15 /org/gtk/gvfs/exec_spaw/3
root 5739 2 0 20:28 ? 00:00:00 [kworker/1:3-events]
root 5875 5424 0 20:28 ? 00:00:00 sshd: multitab [priv]
multitab 5950 5875 0 20:29 ? 00:00:00 sshd: multitab@pts/5
multitab 5951 5950 0 20:29 pts/5 00:00:00 -bash
root 5977 2 0 20:29 ? 00:00:00 [tls-strp]
root 5997 2 0 20:30 ? 00:00:00 [kworker/u9:0]
root 6010 2 0 20:31 ? 00:00:00 [kworker/0:2-i915-unordered]
root 6028 2 0 20:33 ? 00:00:00 [kworker/1:1-mm_percpu_wq]
root 6045 2 0 20:37 ? 00:00:00 [kworker/0:0-events]
root 6053 3752 0 20:37 pts/0 00:00:00 top
root 6057 2 0 20:38 ? 00:00:00 [kworker/1:0-mm_percpu_wq]
multitab 6098 5951 0 20:41 pts/5 00:00:00 ps -ef
multitab@multitab-Aspire:~/tmp$
하지만 docker 내부에서 보면 다음처럼 자기 컨테이너의 프로세스 밖에 볼 수 없습니다.
-- 간단히 docker 내부 들여야 보기
$ docker run -it ubuntu:latest /bin/bash
-- docker 내부에서 보이는 프로세스 현황
root@fc7fe321ed1c:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 3 11:10 pts/0 00:00:00 bash
root 9 1 0 11:10 pts/0 00:00:00 ps -ef
-- top 명령어로 봐도 비슷하게 보입니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 4588 3968 3456 S 0.0 0.1 0:00.08 bash
10 root 20 0 8876 5120 3072 R 0.0 0.1 0:00.03 top
현재 동작 프로세스를 좀 더 예쁘게 보기 위해 'systemctl status' 명령을 사용했습니다. docker 부분은 찾기 쉽게 살짝 위로 올렸습니다. 아래 보이는 docker 옆의 긴 글자는 docker container id 입니다.
-- systemctl status 명령어로 보는 프로세스 정보 중 일부.
...생략...
├─init.scope
│ └─1 /sbin/init splash
└─system.slice
├─docker-fc7fe321ed1c94f8f042ca8875c9c016b4276fe91567a034ce2185ee77f6dc62.scope
│ └─3752 bash
│ └─6053 top
├─docker-a492ed5dfa0a2d072ecac21f118a9a86d2e8801d1a27141a9a182468f1f8891e.scope
│ ├─3873 bash
│ └─4315 vim
├─irqbalance.service
│ └─444 /usr/sbin/irqbalance --foreground
├─containerd.service
│ ├─2307 /usr/bin/containerd
│ ├─3729 /usr/bin/containerd-shim-runc-v2 -namespace moby -id fc7fe321ed1c94f8f042ca8875c9c016b4276fe91567a034ce2185ee77f6dc62 -address /run/containerd/containerd.sock
│ └─3850 /usr/bin/containerd-shim-runc-v2 -namespace moby -id a492ed5dfa0a2d072ecac21f118a9a86d2e8801d1a27141a9a182468f1f8891e -address /run/containerd/containerd.sock
├─packagekit.service
│ └─907 /usr/libexec/packagekitd
├─systemd-udevd.service
│ └─244 /lib/systemd/systemd-udevd
├─cron.service
│ └─432 /usr/sbin/cron -f -P
├─docker.service
│ └─2465 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
├─polkit.service
│ └─448 /usr/libexec/polkitd --no-debug
├─networkd-dispatcher.service
│ └─447 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
├─rtkit-daemon.service
│ └─794 /usr/libexec/rtkit-daemon
├─bluetooth.service
│ └─431 /usr/lib/bluetooth/bluetoothd
├─accounts-daemon.service
│ └─426 /usr/libexec/accounts-daemon
├─wpa_supplicant.service
│ └─539 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
├─ModemManager.service
│ └─573 /usr/sbin/ModemManager
├─systemd-journald.service
│ └─204 /lib/systemd/systemd-journald
├─power-profiles-daemon.service
│ └─453 /usr/libexec/power-profiles-daemon
├─unattended-upgrades.service
│ └─590 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
├─colord.service
│ └─1106 /usr/libexec/colord
├─NetworkManager.service
│ └─436 /usr/sbin/NetworkManager --no-daemon
├─snapd.service
│ └─464 /usr/lib/snapd/snapd
├─gdm.service
│ └─619 /usr/sbin/gdm3
├─switcheroo-control.service
│ └─466 /usr/libexec/switcheroo-control
├─rsyslog.service
│ └─457 /usr/sbin/rsyslogd -n -iNONE
├─kerneloops.service
│ ├─1072 /usr/sbin/kerneloops --test
│ └─1082 /usr/sbin/kerneloops
├─cups-browsed.service
│ └─1058 /usr/sbin/cups-browsed
├─cups.service
│ └─578 /usr/sbin/cupsd -l
├─upower.service
│ └─901 /usr/libexec/upowerd
├─systemd-oomd.service
│ └─349 /lib/systemd/systemd-oomd
├─systemd-resolved.service
│ └─350 /lib/systemd/systemd-resolved
├─udisks2.service
│ └─538 /usr/libexec/udisks2/udisksd
├─acpid.service
│ └─427 /usr/sbin/acpid
├─dbus.service
│ └─433 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
├─systemd-timesyncd.service
│ └─354 /lib/systemd/systemd-timesyncd
├─avahi-daemon.service
│ ├─430 avahi-daemon: running [multitab-Aspire.local]
│ └─558 avahi-daemon: chroot helper
└─systemd-logind.service
└─477 /lib/systemd/systemd-logind
그에 비해 vm 은 별도의 살림방을 만들어 놓은 것입니다. 작긴하지만 별도의 독립된 화장실과 부엌을 가지고 있습니다.
이런 개념으로 보면 vm 은 화장실과 부엌이 딸린 원룸 이거나 조금더 양보해서 고시원 정도라고 비교할 수 있겠군요. 부엌대신 작은 싱크대와 부르스타로 대체.
위에 있는 쪽방에 비교하면 훨씬 더 독립된 집다운 면모를 갖추고 있지만 사실은 이것도 일종의 방 쪼개기입니다. 원래는 좀 더 넓었던 공간을 벽으로 구분한 것입니다.
하지만 완전히 독립된 또 하나의 컴퓨터 환경이기 때문에 리눅스 호스트에 Windows 나 MacOS 를 설치할 수도 있고 그 반대도 가능합니다.
vm 의 경우 ps -ef 로 본다면 OS 를 구성하는 전체 프로세스의 리스트가 다 나옵니다.
다음은 VM 을 많이 만들어 놓은 모습니다. 저희 동네가 신림동이라 근처에서 많이 볼 수 있습니다.
그렇다면 이건 데이터 센터일 수 있겠군요. 저 안에 수 많은 vm 이나 docker 컨테이너가 구성되어 있을 수 있습니다.
자 이제 다들 Docker vs VM 설명하실 땐 쪽방과 원룸을 생각하시면 됩니다.
'나름 IT 이야기' 카테고리의 다른 글
나의 PC 이야기 (2) | 2024.02.26 |
---|---|
ZTE TREK2 - K88 태플릿. 트레기 전원 버튼 수리 (0) | 2024.02.25 |
Termux - 안드로이드 스마트폰 & 태블릿에 리눅스 설치하기 (2) | 2023.12.10 |
우리에겐 이미 강력한 ARM 머신이 있었다. (0) | 2023.12.05 |
ARM 환경을 Docker 로 구성해 보자 (0) | 2023.12.01 |