2024. 5. 1. 03:36ใComputerScience/DockerKubernetes
Chap5. Docker Introduction
- ๋์ปค๋ ๊ตฌ๊ธ์ด ๋ง๋ SW ์๋๋ค. ‘Solomon Hykes’ ํ์ด์ฝ 2013์์ ๋ฐํ
- 2013๋ , ๋์ปค๊ฐ Go ์ธ์ด๋ก ์ง ์๊ฐ, ์ฟ ๋ฒ๋คํฐ์ค ๋ฑ์ฅ (Go) -> ๋ sw๊ฐ ์ถ์๋๋ฉฐ Go ์ธ์ด๊ฐ ์ธ์ ๋ฐ์
- ๋์ปค๋ ๊ฑฐ์ ๋๋ถ๋ถ์ ํ๋ซํผ ์์ ์ฌ๋ผ๊ฐ๋ค + ์คํ์์ค / ํ๋ซํผ์ ๋
๋ฆฝ์ ์ผ๋ก SW๋ฅผ ๋๋ฆด ์ ์๋ค
-> OS์ ๋ฌด๊ดํ๊ฒ ๋์ปค ์์์ ์ดํ๋ฆฌ์ผ์ด์
์ ์ง๋ฉด ๋๋ค, infrastructure ๊ณผ ๋ฌด๊ดํ๊ฒ ์ง๋ฉด ๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ํ๋ฏ์ด infrastructure๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค, infrastructure as code (IaC)
- ์คํํ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋์, ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ์ํ ๋์ปค ํ์ผ ์ฝ๋, ์ด๋ ๊ฒ ์ฝ๋ ํ์ผ์ด 2๊ฐ ํ์ํ๋ค.
* Immutable Infrastructure using ‘Dockerfile’
- ๋ด๊ฐ ํ์ํ ํ๊ฒฝ์ ๋์ปค ํ์ผ๋ก ์์ฑ (๋ด๊ฐ ํ์ํ ๊ฐ๋ฐํ๊ฒฝ ์์ฒญ) -> ๋์ปค ํ์ผ์ ๋น๋ํ๋ฉด ๋์ปค ์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ง๋ค.
- ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๋ฅผ ํ์ํ ๋, ํ์ํ ๋งํผ ์คํํ๋ฉด ๋์ปค ์ปจํ ์ด๋ // ๋์ปค ํ์ผ์ด IaC
* ๋์ปค๋ฅผ ์ฌ์ฉํ๋ ์ด์ (๋์ปค์ ์ฅ์ )
* Flexible - ๋์ปค ํ์ผ๋ก ๋ณต์กํ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ๋จํ๊ฒ ์ธํ ๊ฐ๋ฅ
* Lightweight - guestOS ์์ด hostOS๋ง ์์ด๋ OK
* Interchangeable – ์ฆ์ ์ ๋ฐ์ดํธ, ๋ค์ด๊ทธ๋ ์ด๋ ์ฉ์ดํ๋ค.
* Docker Image – executable package including everything needed to run an application
- Infrastructure as Code - ์ฝ๋, path ๋ฑ ํ๊ฒฝ๋ณ์, configuration file ๋ฑ ๋์ปค ์ด๋ฏธ์ง ์์ ๋ด์์ ํ๋ฒ์ ์ค์นํ๊ณ , ์ง์ด๋ค.
* Docker Container – a runtime interface of an image -> ์ด๋ฏธ์ง๋ฅผ ์คํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์์ ์ปจํ ์ด๋๊ฐ ๋จ (์ธ์คํด์ค ๊ฐ๋ )
- ์ด๋ฏธ์ง ์์ฒด๋ ์ ์๋ ํ์ผ (ํด๋์ค, ์ค๊ณ๋ ๊ฐ๋ ) ์ด๊ฑธ ์คํํด์ผ ํจ -> ์คํ ์ ๋์ํ๋ ์ธ์คํด์ค๊ฐ ์ปจํ ์ด๋
- ์ธ์คํด์ค๋ฅผ ํ์ํ ๋ ํ์ํ ๋งํผ ์คํํ๋ ๊ฒ / CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน์
* Sharing Immutable Infrastructures – Docker Hub - 350๋ง๊ฐ์ ๋์ปค ์ดํ๋ฆฌ์ผ์ด์ , ๊ทธ ์ค ํ๋๊ฐ ์ฐ๋ถํฌ
- registry - ์ด๋ฏธ์ง ์ ์ฅ์ / ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ง๋ค์ด ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋จ
- ์น์๋ฒ๋ฅผ ๋๋ฆฌ๋ ํ๊ฒฝ์ NGINX - ์ด๋ฏธ ๊ตฌํ๋์ด ์์ / ํ์ํ ๋ ํ์ํ ๋งํผ ์ปจํ ์ด๋๋ก ๋์์ ์ฐ๊ณ , ๊น๋ํ๊ฒ ์ง์ฐ๋ฉด ๋จ
* docker run hello-world - ์ด ์ปดํจํฐ์๋ hello world ์ต์ ๋ฒ์ ์ด ์๋ค
- ๋์ปค ๋ฐ๋ชฌ์ด ์๋์ผ๋ก ์ธํฐ๋ท์ ์ ์ํด์ ๋์ปค ํ๋ธ์์ ์ฐพ์ -> ๋์ปค ๋ฐ๋ชฌ์ด ์ปจํ ์ด๋๋ฅผ ์คํ์ํจ๋ค
- ๋์ปค ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ด, ํฐ๋ฏธ๋์ ๊ธ์จ๋ฅผ ๋์
* VM๊ณผ ์ปจํ ์ด๋์ ํฐ ์ฐจ์ด์ – VM์ ์ ์์ ๋๊ธฐ ์ ๊น์ง๋ ํญ์ ์ด์์๋ค.
- But ์ปจํ ์ด๋๋ ๋ช ๋ น์ ์คํํ๊ณ , ๋ช ๋ น์ด ์ข ๋ฃ๋๋ฉด ์ปจํ ์ด๋๋ ์ฃฝ๋๋ค. ์ถ๋ ฅ์ด ๋๋๋ฉด ํด๋น ์ปจํ ์ด๋์ ๋ชฉ์ ์ ๋๋จ
* docker run -it ubuntu bash / interactive terminal - ์ฐ๋ถํฌ ๋ด๋ถ์ bash(์ ธ)๋ฅผ ์คํ์์ผ๋ผ
-> ๋งคํจํ ์์์ ๋ฆฌ๋ ์ค๋ก ํ๋กฌํํธ๊ฐ #์ผ๋ก ๋ฐ๋๋ค (id๋ root๋ก ๋จ)
+ ์ด๋ฏธ์ง ์์์ ์ปจํ ์ด๋๊ฐ ๋๋๊น, ์ง์ธ ๋๋ ์ด๋ฏธ์ง๋ณด๋ค ์ปจํ ์ด๋ ๋จผ์ ์ง์๋ผ
* Ubuntu - ์๋๋ ์ค์น๊ฐ ๊น๋ค๋ก์ด ์ฐ๋ถํฌ -> ๋์ปค๋ก ํธ๋ฆฌํ๊ฒ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์คํํ ์ ์๋ค.
docker pull ubuntu // ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ชจ๋, ์๋ฒ์ฒ๋ผ ๋๋๋ก ๋ฐ๋ชฌ์ผ๋ก ์คํ (-d)
docker container run -it -d –-rm –-name ubuntuos ubuntu:latest // ์ฐ๋ถํฌOS ์ปจํ ์ด๋ ์์ bash ํ๋ก๊ทธ๋จ์ it๋ก ์คํ
docker exec -it ubunyuos /bin/bash
docker container ls
docker image ls
* Alpine Linux - ์ฐ๋ถํฌ๋ ๊ธฐ๋ฅ ๊ฑฐ์ X, ์ํ์ธ์ busy box
– ์ธ ๋งํ ๋ช ๋ น์ด ๋ง์ but ๋ณด์ ์ด์๊ฐ ์๋ค, ๋งค์ฐ ๊ฐ๋ณ๋ค
docker pull alpine
docker container run -it -d —rm –-name alpineos alpine:latest // ์ด๋ฏธ์ง๋ฅผ ๊ฐ๊ณ ์์ผ๋, ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ์ค
docker exec -it alpineos /bin/ash // bash ๋์ ash shell
Chap6. Docker Overview
- Community Edition CE – ํ์๋ฒ์ ๋ฌด๋ฃ, ์คํ์์ค / ๊ธฐ์ ์ด๋ผ๋ฉด EE ์ ๋ฃ ๋ฒ์
* Docker Engine - ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ , ์คํํ๊ณ ๊ฐ์ ธ์ค๋, ๋์ปค์ ๊ฐ์ฅ ํต์ฌ SW
- ๋์ปค ํ์ผ์ ์ ์ํ ์ธํ๋ผ๋ค์ ๋น๋ํด์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ๋ฌ๋ํด์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ ๋ค.
- ์ปจํ ์ด๋๊ฐ ์ ๋์๊ฐ๋์ง check ๋ฑ ์ปจํ ์ด๋์ lifecycle์ process, ์ ๋ฐ์ ์ธ ๊ฒ๋ค์ ์คํํ๊ณ ๊ด๋ฆฌํ๋ค.
*** Docker์ 3๋ ์์ – ์๋ฒ, CLI, ์ด๋ฅผ ์ฐ๊ฒฐํ๋ rest API
* ์๊ฒฉ์ง์ ์๋ docker daemon (engine) / ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ฒ๊ฐ ๋์ปค ๋ฐ๋ชฌ
- ๋๋ CLI๋ก ํ์ดํํ์ฌ ์ถ์ฒ์ ์๋ ์๋ฒ(๋ฐ๋ชฌ)์ rest API๋ก ์ ์(๋คํธ์ํฌ)๊ฐ๋ฅ // docker engine๊ณผ docker CLI๋ ๋ ๋ฆฝ
- ๋์ ์ด์ด์ฃผ๋ ํต์ (REST API) / HTTP ํต์ ํ๋กํ ์ฝ์ ์ํด ์ฌ์ฉํ ๋ช ๋ น์ด
* CRUD ๊ธฐ๋ฐ์ DB์ HTTP(ํต์ ) get ๋ฑ 4๊ฐ ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐํด์, DB์ ์ฐ๋๋๋ ๊ธฐ์ ์ด rest // ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์์ด restful API
* Docker Daemon – CLI or ๋ค๋ฅธ ๋ฐ๋ชฌ์ด ๋ณธ์ธ์๊ฒ ์ด๋ ํ ์์ฒญ์ ํ๋์ง ๋ฃ๊ณ ์๋ค. ๋ค๋ฅธ ์ปดํจํฐ์ ๋ฐ๋ชฌ ๊ฐ ํต์ ๋ ๊ฐ๋ฅ
* Docker Client – Command line interface (CLI) – give instruction to the Docker Engine
- ์น์ ํด๋ผ์ด์ธํธ – ์๋ฒ ์ํคํ ์ฒ์ ์ ์ฌํ๋ค (์น์ด ์๋๊ธด ํจ) - ๋์ปค ํด๋ผ์ด์ธํธ๋ ๋์ปค ์์ง์๊ฒ ๋ณธ์ธ์ด ํ์ํ ๊ธฐ๋ฅ๋ค ์์ฒญ
* Docker Desktop – GUI ์ ๋ณด์ด๊ธฐ๋ง ํ๋์ด๊ณ , ์ฌ์ค์ ๋ค ์ชผ๊ฐ์ ธ ์๋ค.
* Docker Registries - ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํจ – ๊ณต๊ฐ๋ public registry์ ๋ด๋ถ์์ ์ฌ์ฉํ๋ private registry๋ก ๊ตฌ๋ถ
- docker pull – ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๋ ๊ฒ / docker run - ์ด๋ฏธ์ง ์คํ / docker push - ์ด๋ฏธ์ง๋ฅผ ํ๋ธ์ ์ฌ๋ฆฌ๋ ๊ฒ
* Docker Ecosystem
์์์ ์๋๊น์ง ์์ผ๋ก ํ์ดํํ ๋ช ๋ น X ํ๋ก๊ทธ๋จ์ผ๋ก ์๋ํ๋ ์ ์์
CI - ์ปดํ์ผ, ๋น๋๊น์ง / CD - ์ด์ฉํ์ด ํ๋ deployment๊น์ง ์ฌ๋์ ๊ฐ์ ์ต์ํ
DevOps - ๋น ๋ฅธ ์๊ฐ ์์ ๊ฐ๋ฐ, ์์ ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํ๊ธฐ ์ํด
- ๊ฐ๋ฐ์ ์ปดํจํฐ์์ image๋ฅผ registry์ ์ฌ๋ฆฌ๋ ๊ฒ์ docker push / Code๋ฅผ ์ฌ๋ฆฌ๋ ๊ฑด git push
+ ์ด๋ฏธ์ง ์์ ๋ฃ์ ์ฝ๋๊ฐ git push ๋์์ด ๋๋ ๊ฒ + Docker file (infrastructure as a code) - ์ปจํ ์ด๋๋ฅผ ๋ง๋๋ ์ฝ๋
- ์ด๋ ๊ฒ ์์ค์ฝ๋๊ฐ ๋์ด ๋์ค๋ ๊ฒ / ๋ ๋ค Git-hub์ ์ฌ๋ฆฐ๋ค.
* image๊ฐ debug / production level์์ ๋ง๋ค์ด์ง ์ ์์
- ๊ฐ๋ฐ or ์ด์ํ์ด release version์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์์
- ์ฑ๋ฅ or ๊ธฐ๋ฅ ์ค์ฌ (dev) vs ์์ ์ฑ (ops) - ๋์ ๊ด์ ์ด ๋ค๋ฆ
+ ํ ๋์ ๋์ปค ๋ฐ๋ชฌ ์์์, ์ฌ๋ฌ ์ปจํ ์ด๋ ๋์ธ ์ ์์
- CPU ๊ฐ์์ ๋ฌด๊ดํ๊ฒ ์๊ธฐ O (VM์ CPU 4๊ฐ๋ผ๋ฉด 3๊ฐ๋ง ๊ฐ๋ฅ)
- ํธ์คํธ๊ฐ ์์ฒ ์๋ง๋๊ฐ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ฐ๋ถ์ ๋ฑ์ฅํ ์ค์ผ์คํธ๋ ์ดํฐ Orchestrator
* Underlying Technologies of Docker - ๋์ปค๋ ๊ณ GO ์ธ์ด๋ก ๋ง๋ฆ / ๋ฆฌ๋ ์ค/์ ๋์ค ์ปจ์ ๊ณผ ์ ์ฌ - ์ปจํ ์ด๋ ๋ณ ๊ทธ๋ฃน ๋ถ๋ฆฌ
* Namespaces - ์์ด์ง ์๋๋ก ๋ถ๋ฆฌํ๋ namespace ๊ธฐ์ ์ฌ์ฉ / VM์์๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ ์ปจํ ์ด๋๋ ๋์ผํ๊ฒ ์ฌ์ฉ
- ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ ๋ฆฝ์ ์ธ ์ปดํจํฐ์ธ ๊ฒ์ฒ๋ผ ์๋ ๊ฒ, ์ปจํ ์ด๋ ๋ณ ๊ณต๊ฐ์ด ์ค๋ณต๋์ง ์๋๋ก namespace ๋ถ๋ฆฌ
* Control Groups – cgroups - ์ ๊ทผ ๊ถํ ๊ทธ๋ฃน - virtual machine์ฒ๋ผ ์๊ฒผ๋ค / ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋์ด ๋น์ทํ๋ค
- container ๊ฐ์๋ ์ต๋ํ ์ถฉ๋์ด ์๋๋ก ์ ํํ์ฌ resource management
* Getting started – docker run -d -p 80:80 docker/getting-started
-d ๋ฐ๋ชฌ – ์๋ฒ์ฒ๋ผ / -p ํฌํธ - ๋ด๋ถ์ ์ธ๋ถ ip address๊ฐ ๋ค๋ฅด๋ค (NAT/PAT)
- port address translation (PAT) ๋ฐ๊นฅ๋ ์์ชฝ๋ 80์ ์ค๋ค๋ ์๋ฏธ - ์ปจํ ์ด๋๊ฐ ๋จ๋ฉด ์น ๋ธ๋ผ์ฐ์ ์ (localhost:80) ์ ์ ๊ฐ๋ฅ
+ ls -> ์ด์์๋ ๊ฒ๋ค๋ง ๋ธ / ls all -> ์คํ๋์๋๋ฐ, ์๊ณ ์๋ ์ ๋ค๋ ๋ค ์ ๋ถ ๋ค ๋ฌ๋ค.
+ ์น๋ธ๋ผ์ฐ์ get / curl – ๊ฐ๋จํ HTTP methods / ๋ ํ์ฅ๋ pip / python import requests ํ์ด์ฌ ๋ชจ๋
Chap7. Docker Hub & Dockerfile
* Docker hub – sharing immutable infrastructures - ๋จ์ด ๋ง๋ ๋ค๋ฅธ high quality container ์ด๋ฏธ์ง๋ค์ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
Ex) python ๊ฐ๋ฐ ํ๊ฒฝ์ด ์ด๋ฏธ ๋ค ๊ฐ์ถฐ์ง ๊ฒ - ํ๋ซํผ์ ๋ฌด๊ดํ๊ฒ, immutableํ๊ฒ ํ๊ฒฝ์ ๊ตฌ์ถํ์ฌ, ๋ด ํ์ด์ฌ SW ๋๋ฆฌ๊ธฐ ๊ฐ๋ฅ
* Dockerfile - ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ํ์ผ, ๊ณ ์ ๋ช ์ฌ ๋์ปคํ์ผ - ์๋๋ถํฐ ์๊น์ง ์ฐจ๊ณก์ฐจ๊ณก ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์๋ ๊ฒ (๋ ์ด์ด)
- ๋์ปค ํ์ผ์ด infrastructure as a code์ ๋๋ช ์ฌ
5๊ฐ์ ๋ช ๋ น์ && and๋ก ๋ฌถ์ - ์ด๊ฒ ํ ์ค ๋ช ๋ น -> RUN ๋ช ๋ น์ด๋ ํ ๋ฒ ์คํ๋จ
FROM RUN ENTRYPOINT // ์ด๋ฐ ๋นจ๊ฐ ๋ช ๋ น์ด๋ค์ ์์ธ๋ค -> ๊ฐ์ ์ ํ์ด ์์ - ์ด๊ฑธ ๋ ์ด์ด๋ผ๊ณ ํ๋ค.
๋๋ฌด ๋ง์ผ๋ฉด ๋์์ด ์ ๋จ, only 20~30๊ฐ
๊ฐ์ ธ์จ ์ฐ๋ถํฌ ์์ผ๋ก ๋ค์ด๊ฐ์ ํ์ด์ฌ ์ค์น
entrypoint ์ถ์ ๊ตฌ like cpp์ main func / ๋น๋ํด์ ์คํํ๊ณ , ์ต์ด์ ์ง์ ์ง์
FROM python:3 // FROM – creates a layer from the Python3 Docker Image
COPY . /app // COPY – adds files from your Docker client’s current dir to /app
CMD [ “python”, “/app/myapp.py” ] // CMD – specifies what command to run within the container
# myapp.py์๋ print(“Hello, World!”) ํ ์ค ๋ค์ด๊ฐ ์์
* Dockerfile Execution
docker build -t myapp . // . current directory ์๋ฏธํ๋ ์
docker run -it –-rm –-name py3 myapp // ํ์ดํ์ py3 ์ผ๋ก ์ค, —rm์ ์ง์๋ฒ๋ฆฌ๋ ์๋ฏธ
* Docker Container Lifecycle - ์ฃผ๋ก start, stop ์ฌ์ฉ
- docker container ls -a -q (or -aq) // ๋์ค์ ์ฌ๋ฌ ์ปจํ ์ด๋ ์ค ๋์๋ก ํน์ ์ปจํ ์ด๋๋ง ๋ฉ์ถ๊ณ ์ถ์ ๋, ๋งจ ์์ ๋์๋ง ์ถ๋ ฅ
- docker system prune // ์ด๋ฏธ์ง, ์ปจํ ์ด๋, ๋ณผ๋ฅจ, ์บ์ ๋ฑ ์น ๋ค ์ง์๋ฒ๋ฆฌ๋๊ฒ prune
* docker image rm -f $(docker image ls -aq) // ์ด๋ฏธ์ง ์น ๋ค ์ง์ฐ๊ณ ์ถ์ ๋, ๋์ ๋ฝ์์ ์ ๋ถ ์ง์ธ ์ ์์
Chap8. Build and Push Images
- ์ง์ ์์ ๋ก ์ฃผ์ด์ง ๋์ปค ํ์ผ์ ์ดํดํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด๋ณด์ –> nginx ์์
* Dockerfile
FROM ubuntu:latest
RUN apt-get update // RUN - ๋ด๊ฐ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ์์์ ์คํ
RUN apt-get install -y nginx // ์ฆ, ์ฐ๋ถํฌ ์์์ ํด๋น ๋ช ๋ น์ด ์คํ
RUN echo “this is a ubuntu container”
WORKDIR /etc/nginx
CMD [“nginx”, “-g”, “daemon off;”]
EXPOSE 80 // port address 80 ์ฌ์ฉํด์ ์ธ๋ถ์ ํต์
docker build –tag myubuntu:1.0 . // ์ ์ ํ๋ ์ฐ๋ ๊ฒ - ๋ด๊ฐ ์๋ ์์น / ํ์ฌ directory ์๋ฏธ
// ์ฆ ์ง๊ธ ์๋ ๊ณณ์ ๋์ปค ํ์ผ๋ก๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค๋ ๋ป
docker run --name myubuntu-nginx -d -p 4000:80 myubuntu:1.0
docker stats // stats - ์ผ๋ง๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฐ๊ณ ์๋์ง ๋ณผ ์ ์๋ค.
* port address translation PAT - ์ปจํ ์ด๋๊ฐ 80๋ฒ ํฌํธ๋ฅผ ์ฐ๊ฒ ๋ค - ์ปจํ ์ด๋ ์์ ์ด์ผ๊ธฐ
- ๋ฐ๊นฅ์์ ์ ์ํ๋ ค๋ฉด ์ธ๋ถ ํฌํธ์์ mapping ํ์ / ์ธ๋ถ์์ 4000์ผ๋ก ์ ๊ทผํ๋ฉด, ๋ด๋ถ์์ 80์ผ๋ก ๋ฐ๋๋ค.
+ PAT ์ด์ : ํ๋์ IP ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ๋ด๋ถ ํธ์คํธ ์ฌ์ฉ ๊ฐ๋ฅ // http://localhost:4000 -> ๋ด๋ถ 80์ผ๋ก ๊ฐ
Chap9. Docker Compose - ๋ ์ด์์ ์๋ก ๋ค๋ฅธ ์ปจํ ์ด๋๋ค์ด ํต์ ํ๋ฉฐ ์๋น์ค๋ฅผ ์ด๋ฃธ
- ๋ณต์ ๊ฐ์ ์ปจํ ์ด๋์ ๋ํ ํ์ผ์ ๋ง๋ ๋ค => ๋์ปค ์ปดํฌ์ฆ ํ์ผ (์ํ์ผ) / ๊ธฐ์กด ๋์ปค ํ์ผ์ 1๊ฐ์ ์ด๋ฏธ์ง์ ๋ํ ํ์ผ
*** Docker Services
– ์ต์ข ์ดํ๋ฆฌ์ผ์ด์ ํ๋ - ์ ํ๋ธ / ์ด๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๊ฐ์ ๋ถํ ๊ฐ์ ์๋น์ค๋ค์ด ๋ชจ์ฌ์, ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํจ
ex) ๋น๋์ค๋ค ์ ์ฅํ๋ DB ์๋น์ค / ๋น๋์ค ํ์ง์ ์กฐ์ ํ๋ ์๋น์ค / ์ฌ์ฉ์์๊ฒ ์คํธ๋ฆฌ๋ฐ ์์ ์ ํ๋ ํ๋ก ํธ์๋ ์๋น์ค
ex2) ๋ฐฑ์๋ ๊ตฌ์กฐ - 1) ๋ก๋๋ฐธ๋ฐ์ 2) DB 3) Logic server + 4) ๋ฐฑ์๋ ์ค ํ๋ก ํธ์๋ - ์ต์ด์ request๋ฅผ ๋ฐ์์ฃผ๋ ์
- ๊ฐ๊ฐ์ ์๋น์ค๋ค์ ๋ณ๋์ ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ – ๋ณต์กํ ํ๋์ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ, ์๊ฒ ์ชผ๊ฐ์ง ์๋น์ค๋ค๋ก ๋ง๋๋ ๊ฒ
* ํ๋์ ์๋น์ค๋ ํ๋์ ์ด๋ฏธ์ง์ ๋งคํ์ด ๋๋ค. ์ด ์๋น์ค๋ฅผ (๊ฐ์ ๊ธฐ๋ฅ์ ํ๋) ๋ช ๊ฐ์ ์ปจํ ์ด๋๋ก ๋์ธ ๊ฒ์ธ์ง ๊ฒฐ์ /
- scaling: ์๋น์ค์ ๋ํ ์ปจํ ์ด๋ ๊ฐ์๋ฅผ ํ์ํ ๋งํผ ๋์ด๊ณ , ์ค์ผ ์ ์๋ค.
*** Docker Compose - ๋ ์ด์์ ์ด๋ฏธ์ง๋ก ๋ฌถ์ธ ์ ๋ค์ ๋ ผ๋ฆฌ์ ์ธ ํ ๊ทธ๋ฃน์ฒ๋ผ ๋ฌถ์ด์ ์คํํ๊ณ , ๊ด๋ฆฌํ๋ค.
Dockerfile ์ฒ๋ผ ์ฌ๊ธฐ์๋ docker-compose.yml (์ํ์ผ) - ๋ ์ด์์ ์ปจํ ์ด๋๋ฅผ ๋์ฐ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํด๋น ํ์ผ์ ์คํ
compose up - ์ํ์ผ์ ๋ค์ด๊ฐ multi-container๋ค์ ์น ๋์ฐ๋ ๋ช ๋ น์ด / compose down – stop all services
+ ๋์ปค ๋ฐ์คํฌํ์ผ๋ก ํ ๋ฒ์ ์๋์ผ๋ก ๊น๋ฆฌ์ง๋ง, ํ๋์ฉ ์ชผ๊ฐ์ ๋ณ๋ ์ค์น๋ ๊ฐ๋ฅํ๋ค.
* ํ๋์ ๋์ปค ์ปดํฌ์ฆ๋ก ๋์ด ๋ ์ปจํ ์ด๋๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํด ์ค - IP Address ์ฌ์ฉ X / Prefix (์ด๋ฆ) cattle mode
+ DNS - ์ด๋ฆ์ ํตํด node๋ค์ ๋ง๋ค์ด ์ค - ์์์ IP Address ์ฌ์ฉํ๊ฒ ๋ฐ๊ฟ, ์ฆ ๋คํธ์ํฌ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
* How to create docker compose files – docker-compose.yml ์ํ์ผ ์์ฑ
version: ‘3.7’ // TAP ๋ง๊ณ , ๋ ์นธ ์ฉ ์ผ์ผ์ด ํด๋ผ
service:
web: // web / database - ์ด ์ด๋ฆ ์ค์
image: nginx // ์ด๋ฏธ์ง๋ nginx / redis
database:
image: redis
+ 1๋ฒ์ด 2๋ฒ ์๋น์ค๋ณด๋ค ๋จผ์ ๋ฐ๊บผ๋ ๋ณด์ฅ์ X, ๊ฐ๋จํ๊ฒ๋ sleep์ผ๋ก ์ฌ์ธ ์ ์์
- ๋ณดํต ์ด๋ด ๊ฒฝ์ฐ, 2๋ฒ์ด ๋จผ์ 1๋ฒ์๊ฒ hello ๋ณด๋ด๊ณ , world ๋ฐ์ผ๋ฉด (heartbeat) ์๋ฒ ์ด์์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด ๋ค์ด๊ฐ๋ค.
+ port address translation, ์คํ ๋ฆฌ์ง์ ๊ด๋ จ๋ volumes + environment์์ system params ์ค์ ๊ฐ๋ฅ
* Cattle mode in docker compose - Container ์ค๋ฆฌ์ง๋(working dir, ํด๋) ์ด๋ฆ - web (์๋น์ค ์ด๋ฆ) – 1, 2, 3 …
-> ํด๋น ์๋น์ค์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ฌ ๊ฐ ๋ฐ ์ ์์ – ์ด๋ Cattle mode๋ก 1, 2, 3 ์ด๋ ๊ฒ ๋ช ๋ช ๋๋ค.
- ์ปจํ ์ด๋ db-1๊ฐ web-1์ ์ ์ํ๊ณ ์ถ๋ค๋ฉด, http://web-1 ๋ผ๊ณ ์ฐ๋ฉด ์๋ฒ์ ์ ์ํ ์ ์์!
Ex) Container lecture09-sources-web-1 / Container lecture09-sources-database-1
* docker compose down ์คํ ์ ์ฃผ์ํ ์ – upํ ์์น, ์ฆ yml ํ์ผ์ด ์๋ ๊ณณ์์ ๋ช ๋ น์ด ์คํํด์ผ ํ๋ค.
Ex) ports: “8000:80” - ๋ฐ๊นฅ์์ ๋ค์ด๊ฐ ๋ 8000 / ๋ด๋ถ ํฌํธ๋ 80 - curl๋ก localhost:8000์ ๋ถ์ ์ ์์
- NAT/PAT – Network and Port Address Translation - ์ธ๋ถ์์๋ NAT/PAT๋ก ๋ฒ์ญ๋ ๋ฒํธ ์ฌ์ฉ
* YAML - JSON๊ณผ ์ ์ฌํ key-value์ map chain, ๋ฐ์ดํฐ์ ํํ๋ฅผ ์ ์ํ๋ ์ธ์ด
- Configuration files, Log files, Cross-language data sharing ๋ฑ ๋ค์ํ ๊ณณ์ ํ์ฉ๋๋ format
+ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์์ผ๋ก ํ๋ ํ์๋ ๋์ค์ ๋ค ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์๋ ์์ฑ – ์ธ๊ฐ์ด ๊ฐ์ ํ์ง ์๋๋ก ex) pyyaml
docker-compose.yml
- ๋ฐ๊นฅ์์ 8001๋ก ์ ๊ทผํ๋ฉด worker 1 ์ปจํ ์ด๋ ๋ด๋ถ์ 80๋ฒ ํฌํธ
- 8002๋ worker2 ์ปจํ ์ด๋ ๋ด๋ถ์ 80๋ฒ ํฌํธ * ์๋ก ๋ค๋ฅธ ์๋น์ค, ์ฆ ๋ค๋ฅธ ์ด๋ฏธ์ง
- curl http://worker1:80
- curl http://worker2:80
*** curl๋ก IP or domain ์์ญ์ ์ฐ๋ฆฌ๊ฐ ๋ถ์ฌํ ์ด๋ฆ(worker1, 2)์ ์ฃผ๋ฉด 80๋ฒ ํฌํธ๋ก ๋ถ๊ธฐ ๊ฐ๋ฅ (์ด๊ฒ ์ ์ผ ์ค์)
+ docker compose up -d --scale manager=4
- ์ค์ผ์ผ ์ต์ ์ ์ฌ์ฉํ์ฌ ๋งค๋์ ๋ฅผ 4๊ฐ ๋์๋ณผ ์ ์๋ค. ํ์ํ ๋ ํ์ํ ๋งํผ ์ปจํ ์ด๋ ์๋ฅผ ํค์ฐ๋ ๊ฒ
Chap10. Docker Storage – ์ ์ฅ ๊ณต๊ฐ, ์คํ ๋ฆฌ์ง์ ๋ํ ์ด์ผ๊ธฐ
* ์ปจํ ์ด๋์ ํ์ผ์ ์ ์ฅํ ๋์ ๋ฌธ์ - ์ปจํ ์ด๋๋ ์ง์์ ์ด์ง ์์ง๋ง, ๋ฐ์ดํฐ๋ ์ด๋๊ฐ์ ์ ์ฅ๋์ด์ผ ํ๋ค.
- ์ปจํ ์ด๋ ๋ด๋ถ writable layer ๊ฐ๋ฅํ๋, OS๋ณ ๊ตฌํ์ ๋๋ฆฌ๊ณ ๋ณต์กํจ -> ๊ถ์ฅ X. volumes๊ณผ bind mounts ์ฌ์ฉ์ ๊ถ์ฅ
- ์ปจํ ์ด๋ ๋ฐ๊นฅ์ & ์ปดํจํฐ ์์ ์๋ ์คํ ๋ฆฌ์ง๋ฅผ ์๋ฏธ
- ๋ฌผ๋ก ์ปจํ ์ด๋ ์์๋ ์คํ ๋ฆฌ์ง๊ฐ ์์ ์ ์๋ค (VM์ฒ๋ผ) but ์ปจํ ์ด๋๋ ๊ทธ๋ฌ๋ ค๊ณ ๋ง๋ ๊ฒ์ด ์๋๋ค.
+ ์๋ ๋ชฉ์ - ํ๋ก๊ทธ๋จ์ ์ํ๋ ๋งํผ ์คํํ๊ณ , ํ์ ์์ ์ง์ฐ๋ ๊ฑด๋ฐ, ์ด ๋ชฉ์ ๊ณผ ๋ง์ง ์์
* Storing files in the host machine – volume, bind mount ๋ ๋ค ์ปจํ ์ด๋ or ์ปดํจํฐ ์ ์์ด ์ฃฝ์ด๋ ์ด์์๊ธด ํจ
(1) bind mount
์ปจํ ์ด๋ ๋ฐ / HOST ์ปดํจํฐ ํ์ผ์์คํ - ํ์์ ์ผ๋ก ์กด์ฌํ๋ ๋์คํฌ
์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋, ์ปจํ ์ด๋์ ์๊ด์์ด ์กด์ฌํ๋ ํ์ผ๋ค
+ OS์์ ์ ์ฅ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋ง์ดํธ๋ผ๊ณ ํจ
(2) volume - docker area – part of the host filesystem managed by Docker
- ๋์ปค๊ฐ ๋์๊ฐ๊ธฐ ์ํ ์์ ๋ฆฌ๋ ์ค ๋ฑ ๋์ปค๊ฐ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ์ง ์์ผ๋ฉฐ ์ฌ์ฉํ๋ ๊ณต๊ฐ
- ์ฌ๊ธด ์ฌ์ฉ์๊ฐ ์๋๋ผ, ๋์ปค๊ฐ ์ฌ์ฉํ๋ ค๊ณ ๋ง๋ ๊ฒ (read๋ ๊ฐ๋ฅํ์ง๋ง, ์ฌ์ฉ์ ์ ๊ทผ ๋ฐ write ์์น X)
- ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ volume์ ๋์์ ๊ณต์ ํ ์ ์๋ค. ์๋ก ๋ค๋ฅธ ์ปจํ ์ด๋๋ค์ด ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ, ์ปจํ ์ด๋๊ฐ ์ฃฝ์ด๋ ๋ณผ๋ฅจ์ O
- docker volume create / docker volume prune
* docker volume create myvol-1 // create ๋์ inspect ๋ช ๋ น์ด๋ฅผ ํตํด ๋ณผ๋ฅจ ๋ด๋ถ์ ์ธ๋ถ ์ ๋ณด ๋ณผ ์ O
(3) tmpfs mounts - temporal file system - RAM, ๋ฉ๋ชจ๋ฆฌ - ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์น ์์ ๋์คํฌ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ
- ๋งค์ฐ ๋น ๋ฅธ ์๋ but ์์ ๋ฐ์ดํฐ๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅ, ์ปจํ ์ด๋ or ์ปดํจํฐ ์ฃฝ์ผ๋ฉด ๊ฐ์ด ์ฌ๋ผ์ง, only Linux
* Jenkins – ์ ํจ์ค
- CI/CD๋ก ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋๋ ์๋ํ ๋๊ตฌ - ์ธ๋ถ์์ ํต์ ์ ์ํด์ ํฌํธ๊ฐ ๋ ๊ฐ ์ด๋ ค์ผ ํจ
- docker pull jenkins/jenkins:lts-jdk11
- docker run -p 8080:8080 -p 50000:50000 -v myvol-1 :/var/jenkins_home jenkins/jenkins:lts-jdk11
-> http://localhost: 8080 – ๋์ ํค ๊ฐ์ ํตํด ์ ํจ์ค ์ค์น ๊ฐ๋ฅ
- docker container stop {jenkins container ID} - ์ปจํ ์ด๋๋ ์ฃฝ์์ง๋ง, ๋ณผ๋ฅจ์ ๊ทธ๋๋ก ์ ์ฅ๋จ (myvol-1)
+ ์๋ก ๋ค๋ฅธ ๋ ์ปจํ ์ด๋์์ ํ๋์ volume์ ๋์์ ๊ณต์ ํ ์ ์๋ค.
* docker-compose up์ ํตํด yaml ์ํ์ผ ์ ์ง์ ๋๋ฆฌ๋ฉด, ์ผ๋ จ์ ์์ผ๋ก ์์ฑํ ์ฝ๋๋ค ํ๋ฐฉ์ ์คํ ๊ฐ๋ฅ (์ด๊ฒ ์ฐ๋ ์ด์ )
Chap11. Docker Machine - ๋ณต์์ ๋ฌผ๋ฆฌ์ ์ธ / ๋ ผ๋ฆฌ์ ์ธ ๋์ปค ์คํํ๊ฒฝ์ ๋ง๋๋ ๊ฒ
- Docker machine ๋์ปค ๋จธ์ - ๋์ปค๊ฐ ๋์๊ฐ๋ ๊ฐ์๋จธ์ ์ ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ - ์ฌ๋ฌ ๋์ ์ปดํจํฐ์ ๋์์ ๋ฟ๋ฆฌ๋ ๊ฒ
- ๋์ปค๊ฐ ์คํ๋๋๋ก Virtual hosts ์ด์ํด์ฃผ๋ ์๊ฒฉ ๊ด๋ฆฌ ํด / ์ง๊ธ๊น์ง๋ ํ ๋์ ์ปดํจํฐ ์์์ ์ปจํ ์ด๋ & ์คํ ๋ฆฌ์ง
-> ์ด์ ๋ ์ฌ๋ฌ ์ปดํจํฐ๋ค์ ๋ฌถ์ด์, ๋ชจ๋ host machine์์, ์๊ฒฉ์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด ๋์ปค ๋จธ์
+ ๋์ปค ๋จธ์ ์ ๊ธฐ๋ณธ ๋ชจ๋๊ฐ virtual box๋ก VM์ ๋์ฐ๊ณ , ๊ทธ ์์ ๋์ปค๋ฅผ ๋์ฐ๋ ๊ฒ
* Docker Machine to Docker Engine - ์ฐ๋ฆฌ๊ฐ CLI๋ก ๋ช ๋ น ์คํ - ๋ด ์ปดํจํฐ์์ ๋์์ง ๋์ปค ๋ฐ๋ชฌ ์๋ฒ์ REST API๋ก ์ ์
- ๋ฐ๋ผ์ ๋ค๋ฅธ ์ปดํจํฐ์ ๋์ปค ์๋ฒ์ HTTP ๊ธฐ๋ฐ์ ํต์ ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ์ธ์ ๋ ๊ฐ๋ฅํ๋ค.
- docker-machine create --driver virtualbox myvm1 // driver๋ฅผ virtualbox ๋ง๊ณ ๋ค๋ฅธ ๊ฒ๋ OK
- ๋์ปค ๋จธ์ ์ VM์ ๋ง๋ค๊ณ - ๋ฆฌ๋ ์ค๋ฅผ ์ค์นํ๊ณ , ๋์ปค๋ฅผ ์ค์นํ๊ณ , ํ์ํ ํ๊ฒฝ์ ์ค์นํ๊ณ , ์๊ฒฉ ์ ์์ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ
Ex) docker-machine stop myvm1 / docker-machine start myvm1 / docker-machine rm myvm1 – ์๊ฒฉ์ผ๋ก ๋์ปค ๋จธ์ control
* ssh - secure shell - ์๊ฒฉ์ ์๋ ์ปดํจํฐ์ ์ํธํ๋ ํต์ ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด, ssh ํ๋ก๊ทธ๋จ ์ฌ์ฉ
Ex) ๊ธฐ์กด: docker version ์๊ฒฉ: docker-machine ssh default docker version
+ docker-machine env default - ์ง๊ธ๋ถํฐ ์น๋ ๋ช ๋ น์ ssh default ์์ด๋, ์๊ฒฉ์ ์๋ ์ปดํจํฐ๋ก ๋ณด๋ด์ค
- restful API๋ฅผ ํตํด ๋์ปค CLI๊ฐ ์๊ฒฉ์ผ๋ก๋ถํฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ // -u : undo๋ฅผ ํตํด ๋ค์ ๋์์ฌ ์ ์์
- docker-machine ls -> ๋ด๊ฐ ์ง๊ธ ํ์ดํํ๋ ๋ช ๋ น์ด ๋์ฒด ๋๊ตฌํํ ๊ฐ? / ์ฌ๋ฌ ๊ฐ ์ค ํ๋๋ง * (์๊ฒฉ์ผ๋ก ๋ณด๋ด์ง๋ ํ๊ฒ)
'ComputerScience > DockerKubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Dockerfile WebSocket Client/Server Build (0) | 2024.05.16 |
---|---|
[Docker] Cpp Boost WebSocket Client/Server (0) | 2024.05.09 |
[Docker] ์ค๊ฐ๊ณ ์ฌ ์ ๋ฆฌ(1) (1) | 2024.05.01 |
[Docker] Ubuntu Docker-machine ์ค์น (0) | 2024.04.30 |
[Docker] M1 Docker-machine Error, Ubuntu ์ค์น (0) | 2024.04.17 |