728x90
๋ฐ˜์‘ํ˜•

2์žฅ ๋„์ปค์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•

2.1 ์ปจํ…Œ์ด๋„ˆ๋กœ Hello World ์‹คํ–‰ํ•˜๊ธฐ

$ docker container run diamol/ch02-hello-diamol
  • ์œ„์˜ ๊ฐ„๋‹จํ•œ ์ปค๋งจ๋“œ๋กœ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์˜ ํ•ต์‹ฌ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒจํ‚ค์ง•, ๊ณต์œ , ์‹คํ–‰ ์˜ ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค.
  • ๋„์ปค์—์„œ๋Š” ์ด ๊ณผ์ •์„ ๋นŒ๋“œ, ๊ณต์œ , ์‹คํ–‰ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์•„๋ฌด๋ฆฌ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์œ„์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
  • ๋„์ปค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์–ด๋””์„œ๋“  ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๊ฒƒ์ด ๋„์ปค์˜ ํ•ต์‹ฌ ์ด์ ์ธ ์ด์‹์„ฑ ์ด๋‹ค.

2.2 ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฌผ๊ฑด(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์„ ๋‹ด๋Š” ์ƒ์ž(์ปจํ…Œ์ด๋„ˆ)์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ(ํ˜ธ์ŠคํŠธ) ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ƒ์ž (์ปจํ…Œ์ด๋„ˆ) ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์„ ๊ฐ–์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ž์›(CPU, ๋ฉ”๋ชจ๋ฆฌ, ์œค์˜์ฒด์ œ)์„ ๊ณต์œ ํ•œ๋‹ค.
  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์˜ ์šด์˜์ฒด์ œ๋ฅผ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌ๊ฒŒ ๊ฒฝ๊ฐํ•œ๋‹ค.
  • ๊ทธ๋งŒํผ ์‹คํ–‰๋„ ๋น ๋ฅด๊ณ  ๊ฐ™์€ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ ๊ฐ€์ƒ ๋จธ์‹ ์— ๋น„ํ•ด ๋” ๋งŽ์€ ์ˆ˜(์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ ๋‹ค์„ฏ ๋ฐฐ)์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ, ์ปจํ…Œ์ด๋„ˆ ์—ญ์‹œ ์™ธ๋ถ€์™€ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋ฐ€์ง‘๊ณผ ๊ฒฉ๋ฆฌ๊ฐ€ ๋™์‹œ์— ๋‹ฌ์„ฑ๋œ๋‹ค.
  • ์ด๊ฒƒ์ด ๋„์ปค์˜ ๋ฐ€์ง‘, ๊ฒฉ๋ฆฌ, ํšจ์œจ์„ฑ์ด๋‹ค.

2.3 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์›๊ฒฉ ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ

  • ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„๊ตฌ์™€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ํŒจํ‚ค์ง•ํ•ด ์ถ”๊ฐ€์ ์ธ ์„ค์น˜๋‚˜ ์„ค์ • ์ž‘์—… ์—†์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • --interactive : ์ปจํ…Œ์ด๋„ˆ ์ ‘์†
  • --tty : ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์กฐ์ž‘
# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜ ์ ‘๊ทผ
$ sudo docker container run --interactive --tty diamol/base
Unable to find image 'diamol/base:latest' locally
latest: Pulling from diamol/base
941f399634ec: Pull complete 
716aca3e500c: Pull complete 
Digest: sha256:787fe221a14f46b55e224ea0436aca77d345c3ded400aaf6cd40125e247f35c7
Status: Downloaded newer image for diamol/base:latest
/ # 
/ # hostname
03c9c7de8cd2
/ # date
Sun Nov  3 06:58:22 UTC 2024
/ # 

$ docker container ls
CONTAINER ID   IMAGE         COMMAND     CREATED          STATUS          PORTS     NAMES
03c9c7de8cd2   diamol/base   "/bin/sh"   44 seconds ago   Up 44 seconds             angry_kepler

$ docker container top 03
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3071                3051                0                   07:04               pts/0               00:00:00            /bin/sh

$ docker container logs 03
/ # hostanem
03c9c7de8cd2
...

$ docker container inspect 03
[
    {
        "Id": "03c9c7de8cd27bd324d12b46563d66c324d9f9f604fc1b7b4231442ff0c6c7f5",
        "Created": "2024-11-03T07:04:18.008594904Z",
        "Path": "/bin/sh",
        "Args": [],
				...
		}
]
  • ์œ„์˜ ๋ช…๋ น์–ด๋“ค์€ ๋„์ปค๋ฅผ ์•ž์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
  • ๋„์ปค์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋กœ, ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค๊ฒƒ์ด๋“  ๋„์ปค ์ปค๋งจ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณตํ†ต์ ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

2.4 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ

  • ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋ชฉ์ ์€ ์›น ์‚ฌ์ดํŠธ, ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • --detach : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ ์ปคํ…Œ์ด๋„ˆ ID๋ฅผ ์ถœ๋ ฅ.
  • --publish : ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ๊ณต๊ฐœํ•œ๋‹ค.

-d , -p ์˜ต์…˜์œผ๋กœ ์ค„์—ฌ์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (๋‚˜๋Š” ํ•ด๋‹น ์˜ต์…˜์˜ ํ’€๋„ค์ž„์ด ์ €๊ฑฐ์ธ์ง€ ์ฒ˜์Œ ์•Œ์•˜๋‹คโ€ฆ)

$ docker container run --detach --public 8088:80 diamol/ch02-hello-diamol-web

$ docker container ls
CONTAINER ID   IMAGE                          COMMAND              CREATED          STATUS          PORTS                                     NAMES
26d8b153dc15   diamol/ch02-hello-diamol-web   "httpd-foreground"   42 seconds ago   Up 42 seconds   0.0.0.0:8088->80/tcp, [::]:8088->80/tcp   fervent_carson
  • --detach ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š ๋ฆฌ๋ˆ…์Šค ๋ฐ๋ชฌ์ฒ˜๋Ÿผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • --publish ๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ํ•ด๋‹น ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋„์ปค ๋‚ด๋ถ€ IP:Port ๋กœ ์ „๋‹ฌํ•ด์ค€๋‹ค.
    • ๋„์ปค ๋‚ด๋ถ€ IP ๋Š” ๋„์ปค๊ฐ€ ๋ถ€์—ฌํ•œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ์ด๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ IP ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜, ํฌํŠธ๋ฅผ ๊ณต๊ฐœํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌํŠธ ํฌ์›Œ๋”ฉ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
# ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ํ™•์ธํ•˜๊ธฐ
$ docker container stats 26d
CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O    PIDS
26d8b153dc15   fervent_carson   0.01%     4.859MiB / 3.812GiB   0.12%     2.63kB / 1.4kB   0B / 4.1kB   82

# ์ปจํ…Œ์ด๋„ˆ ๊ฐ•์ œ ์‚ญ์ œ (์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋„ ์‚ญ์ œ๋จ)
$ docker container rm --force $(docker container ls --all --quiet)
26d8b153dc15
03c9c7de8cd2
5bf1109bf9b4
  • --force : ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋„ ๋ฐ”๋กœ ์‚ญ์ œ
  • $() : ๊ด„ํ˜ธ ์•ˆ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ๋‹ค๋ฅธ ๋ช…๋ น์œผ๋กœ ์ „๋‹ฌ.
  • ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” ํ˜ธ์ŠคํŠธ์— ์กด์žฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๋ช…๋ น์–ด ์ด์ง€๋งŒ, ๊ทธ ๋งŒํผ ์œ„ํ—˜ํ•œ ๋ช…๋ น์–ด๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

2.5 ๋„์ปค๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์›๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ–ˆ๋˜ ๋„์ปค์˜ ์กฐ์ž‘์€ ์‚ฌ์‹ค Docker API ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

๋„์ปค๋Š” ํฌ๊ฒŒ Docker API, Docker Engine , Docker command-line interface 3๊ฐœ์˜ ๊ตฌ์„ฑ์œผ๋กœ ์ด๋ค„์ ธ ์žˆ๋‹ค.

  • ๋„์ปค ์—”์ง„(Docker Engine)
    • ๋„์ปค์˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๋งก๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค.
    • ๋กœ์ปฌ ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›์œผ๋ฉฐ, ๊ธฐ์กด ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ์ „์— ๋‚ด๋ ค๋ฐ›์€ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํ˜ธ์ŠคํŠธ ์šด์˜์ฒด์ œ์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋“ฑ ๋„์ปค ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์„ ๋‹ด๋‹นํ•œ๋‹ค.
    • ๋„์ปค ์—”์ง„์€ ํ•ญ์‹œ ๋™์ž‘ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋‹ค.
    • ๋„์ปค ์—”์ง„์€ containerd ๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹ค์ œ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
    • containerd ๋Š” ํ˜ธ์ŠคํŠธ ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ, ์ฆ‰ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋งŒ๋“ ๋‹ค.
    • containerd ๋Š” CNCF ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ, ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐœ๋ฐฉํ˜• ์ปจํ…Œ์ด๋„ˆ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ณต๊ฐœ๋œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€์ด๋‹ค.
  • ๋„์ปค API(Docker API)
    • ๋„์ปค๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ HTTP ๊ธฐ๋ฐ˜ REST API ์ด๋‹ค.
    • ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ์˜ ๋„์ปค API ํ˜ธ์ถœ์„ ์ ‘๊ทผ ํ—ˆ์šฉ ํ˜น์€ ์ฐจ๋‹จํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋„์ปค ๋ช…๋ นํ–‰ ์ธํ„ฐํŽ˜์ด์Šค(Docker command-line interface)
    • ๋„์ปค API์˜ ํด๋ผ์ด์–ธํŠธ์ด๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ docker ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ๋กœ ๋„์ปค API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋„์ปค CLI ๋‹ค.

2.6 ์—ฐ์Šต ๋ฌธ์ œ: ์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‹ค๋ฃจ๊ธฐ

  • Apace ์ปจํ…Œ์ด๋„ˆ์˜ index.html ํŒŒ์ผ ๋ณ€๊ฒฝํ•˜๊ธฐ.

1๋ฒˆ vi ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๊ธฐ

$ docker exec -it 772f24d9c83c sh

$ cd /usr/local/apache2/htdocs

$ vi index.html

2๋ฒˆ docker cp ๋ฅผ ์ด์šฉํ•œ ๋ณ€๊ฒฝํ•˜๊ธฐ

$ docker container cp index.html 772f24d9c83c:/usr/local/apache2/htdocs/index.html
728x90
๋ฐ˜์‘ํ˜•
MyeongDev