Becker
Becker ์˜ TIL
Becker
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (30)
    • Computer Science (15)
      • Python (7)
      • Java (1)
      • Algorithm (0)
      • Database (3)
      • Network (1)
      • Openstack (2)
      • ETC (1)
    • ์ž๋™ํ™” (3)
      • Github Action (1)
      • Airflow (0)
      • Docker (2)
    • ๋…ผ๋ฌธ ๋ฆฌ๋ทฐ (1)
    • ์„œํ‰ (3)
    • ๋„์ ๋„์  (8)
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

์ธ๊ธฐ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Becker

Becker ์˜ TIL

[Docker] Docker ์•„ํ‚คํƒ์ฒ˜์™€ Dind, Dood
์ž๋™ํ™”/Docker

[Docker] Docker ์•„ํ‚คํƒ์ฒ˜์™€ Dind, Dood

2023. 2. 26. 01:31

๐Ÿ’ก ๋“ค์–ด๊ฐ€๋ฉฐ

  • Gitlab์œผ๋กœ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ ๋งŒ๋‚ฌ๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ, Docker์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์ œ๋Š” Docker Architecture, Dind, DooD ์ž…๋‹ˆ๋‹ค.

๐Ÿšซ Trouble

  • GitLab Runner๋กœ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค๊ณ , ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด TestContainer๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • TestContainer๋กœ ์ƒ์„ฑ๋œ MySql, Redis ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.
  • GitLab Runner๋ฅผ Docker out of Docker ํ˜•ํƒœ๋กœ Host Machine์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… ํ•ด๊ฒฐ์ฑ… : Docker in Docker ์ปจํ…Œ์ด๋„ˆ


Docker ์•„ํ‚คํƒ์ฒ˜

  • Docker in docker, Docker out of docker๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๋„์ปค์˜ ์•„ํ‚คํƒ์ฒ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ์ดํ•ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ

 

  • ๋„์ปค๋Š” ๋„์ปค ๋ฐ๋ชฌ์ด๋ผ๋Š” ์„œ๋น„์Šค์™€, ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ผ๋Š” ์„œ๋น„์Šค ๊ฐ„ Rest API ํ†ต์‹ ์œผ๋กœ ์ž‘๋™๋ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ํ„ฐ๋ฏธ๋„ shell๋กœ ์ž…๋ ฅํ•˜๋Š” ๋ชจ๋“  docker ๋ช…๋ น์–ด๋Š” docker client๋ฅผ ํ†ตํ•ด API ๋ช…๋ น์–ด ํ˜•ํƒœ๋กœ docker daemon์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.(/var/run/docker.sock)

๋„์ปค ๋ฐ๋ชฌ(daemon)

๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์˜ OS์— Docker๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด

ps aux | grep dockerd

Docker ๋ฐ๋ชฌ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ๋Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker daemon์€ Docker API๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  image, container, network, volume ๋“ฑ๊ณผ ๊ฐ™์€ Docker object๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ Docker ๋ฐ๋ชฌ์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ํ˜„์žฌ ์ ‘์†ํ•ด ์žˆ๋Š” ๋จธ์‹ ์˜ ๋ฐ๋ชฌ์— ์™ธ๋ถ€์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Docker ํด๋ผ์ด์–ธํŠธ(client)

๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ which ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด docker client ๋ช…๋ น์–ด๊ฐ€ ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

which docker

๋„์ปค ํด๋ผ์ด์–ธํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ docker ps์™€ ๊ฐ™์€ Docker ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. /usr/bin/docker๋Š” /var/run/docker.sock ์œ ๋‹‰์Šค ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด Docker ๋ฐ๋ชฌ์—๊ฒŒ ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. Docker ๋ฐ๋ชฌ์€ ์ด ๋ช…๋ น์–ด๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ๋ช…๋ น์–ด์— ํ•ด๋‹นํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ Docker ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

DooD(Docker out of Docker)

  • Docker Host ๋จธ์‹  ์œ„์— ์ž์‹ ๊ณผ ๋™์ผํ•œ(sibling) ๊ด€๊ณ„์˜ Docker container๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ container2, container3๋Š” container1์— ์ข…์†๋˜์ง€ ์•Š๊ณ  Host ๋จธ์‹ (docker demon์ด ์กด์žฌํ•˜๋Š” ์žฅ๋น„)์— ์ข…์†๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” Docker ํ˜ธ์ŠคํŠธ์™€ container1์˜ ๋ฐ๋ชฌ์ด ์†Œ์ผ“ ํ˜•ํƒœ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • DooD ํ˜•ํƒœ๋กœ container1์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด /var/run/docker.sock์„ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
docker run -v /var/run/docker.sock:/var/run/docker.sock ...

 


Dind(Docker in Docker)

  • Docker Host ๋จธ์‹ ์— ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋˜ ๋‹ค๋ฅธ ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
  • Container1(Dind ์ปจํ…Œ์ด๋„ˆ) ์œ„์— container4, container5๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Dind ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…๋ฆฝ์ ์ธ docker daemon ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Dind๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฏธ์ง€์™€ ์˜ต์…˜ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • privileged: Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ unprivileged ๋ชจ๋“œ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. privileged ๋ชจ๋“œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด Container ์•ˆ์—์„œ Host์˜ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
docker run --privileged โ€“it โ€“d --name some-docker -e docker:dind

โš ๏ธ ์ฃผ์˜!

  • privileged ๋ชจ๋“œ๋กœ ์‹คํ–‰์‹œํ‚ค๋ฉด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์žฅ์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปค๋„ ๊ธฐ๋Šฅ ๋Œ€๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Docker์—์„œ๋Š” privileged ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Dind ํ˜•ํƒœ๋ฅผ ๊ถŒ๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ ๋งˆ์น˜๋ฉฐ

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


์ฐธ๊ณ 

https://junstar92.tistory.com/169
https://velog.io/@weekbelt/๋„์ปค๋ฐ๋ชฌDocker-Daemon
https://pyojuncode.github.io/Docker-DinD,-DooD/
 

'์ž๋™ํ™” > Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CI/CD]Spring boot ํ”„๋กœ์ ํŠธ testContainer๋ฅผ ์‚ฌ์šฉํ•œ Gitlab-CI ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•ํ•˜๊ธฐ  (2) 2023.02.11
    '์ž๋™ํ™”/Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [CI/CD]Spring boot ํ”„๋กœ์ ํŠธ testContainer๋ฅผ ์‚ฌ์šฉํ•œ Gitlab-CI ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•ํ•˜๊ธฐ
    Becker
    Becker

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”