๐ก ๋ค์ด๊ฐ๋ฉฐ
- 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

๋์ปค ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ํต์ ํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ docker ps์ ๊ฐ์ Docker ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- /usr/bin/docker๋ /var/run/docker.sock ์ ๋์ค ์์ผ์ ์ฌ์ฉํด Docker ๋ฐ๋ชฌ์๊ฒ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํฉ๋๋ค.
- Docker ๋ฐ๋ชฌ์ ์ด ๋ช ๋ น์ด๋ฅผ ํ์ฑํ๊ณ ๋ช ๋ น์ด์ ํด๋นํ๋ ์์ ์ ์ํํฉ๋๋ค.
- ์ํ ๊ฒฐ๊ณผ๋ฅผ 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 |
---|