์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Spark SQL
- disk spill
- colab
- Dag
- topic
- Spark ์ค์ต
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- off heap memory
- ๋น ๋ฐ์ดํฐ
- Kafka
- backfill
- redshift
- etl
- KDT_TIL
- k8s
- Spark Partitioning
- Docker
- DataFrame Hint
- Spark
- Airflow
- spark executor memory
- Speculative Execution
- mysql
- Salting
- Spark Caching
- Kubernetes
- SQL
- aws
- CI/CD
- AQE
- Today
- Total
JUST DO IT!
๊ฐ๋จํ Docker ์ด๋ฏธ์ง ๋ง๋ค์ด์ Docker hub์ ๋ฃ๊ณ ์ค์ตํด๋ณด๊ธฐ - TIL230612 ๋ณธ๋ฌธ
๊ฐ๋จํ Docker ์ด๋ฏธ์ง ๋ง๋ค์ด์ Docker hub์ ๋ฃ๊ณ ์ค์ตํด๋ณด๊ธฐ - TIL230612
sunhokimDev 2023. 6. 13. 02:01๐ KDT WEEK 11 DAY 1 TIL
- Docker ์ค์ต
- ๋ฆฌ๋ ์ค
- ์ฐ๋ถํฌ
- MySQL
Airflow ์ธก๋ฉด์์ ๋ฐ๋ผ๋ณด๋ Docker
Airflow ์ด์์์ ์ด๋ ค์
DAG์ ์๊ฐ ๋ง์์ง๋ฉด ๋ฐ์ดํฐ ํ์ง์ด๋ ๋ฐ์ดํฐ ๋ฆฌ๋์ง ์ด์ ๋ฑ ์ธ์๋ ๋ค๋ฅธ๋ ๋ฐ์ํ๋๋ฐ,
DAG ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถฉ๋, Worker๋ถ์กฑ, Worker ์๋ฒ๋ค์ ๊ด๋ฆฌ์ ํ์ฉ๋ ์ด์ ๋ฑ์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ฐ ์ด์๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, Docker์ K8s๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
- ํ์คํฌ๋ DAG ์ฝ๋๋ฅผ Docker Image๋ก ๋ง๋ค์ด์ Docker Container ํํ๋ก ์คํ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ์ถฉ๋ ๋ฐฉ์ง
- ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ์ ๋์ผํ๊ฒ ์ ์ง ๊ฐ๋ฅ
- Airflow Worker๋ฅผ K8s(๊ณต์ฉ ์๋ฒ ํด๋ฌ์คํฐ)์์ ํ์ํ ๋๋ก ๋์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉ
- ์ ์ฉ ์๋ฒ๋ฅผ Airflow์์ ํ ๋นํ์ง ์๊ณ Container Orchestration ์๋น์ค๋ฅผ ํตํด ํ ๋นํด์ ์ฌ์ฉํ๊ณ ๋ฆฌํดํ๋ค.
์ผ๋ฐ์ ์ผ๋ก Docker์ K8s์ ํด๋นํ๋ Airflow Operator๋ Airflow Executor๋ฅผ ์ฌ์ฉํ๋ค.
(Docker Operator, KubernetesPodOperator, KubernetesExecutor, CeleryKubernetesExecutor, LocalKubernetesExecutor)
Airflow Executor
Task๋ค์ ๊ด๋ฆฌํ๊ณ ์คํํ๋ ์ญํ ์ ์ํ ( ๋ณ๋ ฌ or ์ผ๋ ฌ ?)
์ข ๋ฅ
- Sequential Executor : ๋ํดํธ๋ก ์ค์น๋๋ฉฐ, Sqlite์ ๊ฐ์ ์ฑ๊ธ์ค๋ ๋ DB์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- Local Executor : ๋ค์์ ์ค๋ ๋๋ฅผ ์ง์ํ๋ PostgreSQL, MySQL ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ณ๋ ฌ๊ฐ๋ฅ, Airflow ๋ง์คํฐ ๋ ธ๋์์์ task ์คํ
- Celery Executor : ์คํ๋ task๋ค์ Celery ํ์ ๋ฃ์ด Worker ๋ ธ๋๋ก ๋ถ์ฐํ์ฌ ์คํ
- Kubernetes Executor : K8s ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ task๋ค์ ๋
๋ฆฝ๋ ํ๊ฒฝ(๋น๋ฆฐ ํ๊ฒฝ)์์ ์ฌ์ฉ > Task๋ฅผ Docker Image๋ก ๊ตฌํํ์
- Kubernetes Executor๋ CeleryKubernetesExecutor์ LocalKubernetesExecutor๊ฐ ์กด์ฌํ์ฌ ํผํฉํ์ฌ ์ฌ์ฉ๋ ๊ฐ๋ฅํ๋ค.
Docker์ ๋ํด์ ์ ์ TIL๋ก ๊ธ์ ์ ์ ์ ์ด ์๋ค.
Docker๋ ๊ฐ๋จํ ๋งํ๋ฉด ์ํํธ์จ์ด๋ฅผ ์ผ๊ด๋๊ฒ ๋น๋ํ๊ณ ์คํํ๊ณ ๋ฐฐํฌํ๊ธฐ ์ํ ํจํค์ง ํ๋ซํผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Docker ์ค๋ช ๋งํฌ : https://sunhokimdev.tistory.com/30
Docker๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์, ๊ฐ์ฅ ๋ง์ด ๋น๊ต๋๋ Virtual Machine๊ณผ ์ฐจ์ด์ ์ ์์๋ณด์.
Virtual Machine VS Docker
๋ ๋ค ์ํํธ์จ์ด๋ฅผ ์คํํ๊ธฐ ์ํ ๋ ๋ฆฝ์ ์ด๊ณ ๋ถ๋ฆฌ๋ ๊ณต๊ฐ์ ์ ๊ณตํ๋ค.
VM
- ๋ค์์ ์ํํธ์จ์ด๋ฅผ ๊ฐ VM๋จ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๊ฐ๋ฅ
- ๊ฐ VM์ ์์ ๋ง์ OS๋ฅผ ํ์๋ก ํ๋ฏ๋ก ์ ๋ฃ OS์๋ ๋น์ฉ์ด ๋ค๊ณ , ์์๋ ๋ง์ด ์ฌ์ฉํจ.
Docker
- ๋ค์์ ์ํํฌ์์ด๋ฅผ ๊ฐ Container๋จ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๋ฉฐ, ๋ค์์ Container๋ฅผ ์คํ ๊ฐ๋ฅํ๋ค.
- Host OS๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ณ๋ ๋น์ฉ๋ ์๊ณ , ๋น ๋ฅด๊ฒ ์คํ๋จ
- Host OS๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Cross-platform Compatibility๋ฅผ ํญ์ ์ง์ x
- ๋ง์ ์์ Container๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฝ์ง ์๋ค. > K8s ์ฌ์ฉ
๐ฅ Docker ์ค์ต
1. Docker File ์์ฑ + ์ฝ๋ ํ์ผ ์์ฑ
๋จผ์ ์ฌ์ฉํ ๋์ปค ์ด๋ฏธ์ง ์ด๋ฆ์ผ๋ก ํด๋๋ฅผ ํ๋ ์์ฑํ๊ณ , Docker File์ ์์ฑํ๋ค.
node๋ฅผ ๊ธฐ๋ณธ ์ํํธ์จ์ด๋ก ์ฌ์ฉํ๊ณ , ์ํ์ธ์ด๋ผ๋ ๊ฒฝ๋ํ ๋ฆฌ๋ ์ค๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ app.js๋ฅผ ์คํํ๋ ๊ฐ๋จํ ๋์ปคํ์ผ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ ๋ฌธ์ฅ์ ํ๋ ์ถ๋ ฅํ app.js๋ ์ถ๊ฐํด์ฃผ์๋ค.
console.log("Hello Docker!");
2. Docker Image ์์ฑ
ํฐ๋ฏธ๋์ ์์ฑํ๋ ํด๋๋ก ์ด๋ํ๊ณ , ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
docker build --platform linux/amd64 -t hello-world-docker .
ํ์ฌ ํด๋์ hello-world-docker ์ด๋ฆ์ ๋์ปค๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด์ด๋ค.
--platform linux/amd64 ์ต์ ์ ํตํด ๋ฆฌ๋ ์ค amd64๋ฅผ ๋ฒ ์ด์ค๋กํ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํด์ผํ๋ค.
์ด ๋ช ๋ น์ด๊ฐ ์์ผ๋ฉด ๋งฅ์ ๊ฒฝ์ฐ ARM ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ก ๋ง๋ค์ด์ ธ ์ผ๋ฐ ๋ฆฌ๋ ์ค์์๋ ๋์๊ฐ์ง ์๋๋ค.
-t๋ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ์ต์ ์ผ๋ก, ์ด๋ฏธ์ง ์ด๋ฆ ๋ค์ ์ฝ๋ก ์ ์ฐ๊ณ ๋ฒ์ ์ด๋ฆ์ ๊ธฐ์ ํ์ง๋ง ๊ธฐ์ ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก latest ๋ฒ์ ์ผ๋ก ๋ฑ๋ก๋๋ค.
๋น๋๊ฐ ์๋ฃ๋๋ฉด ์์ฑํ๋ ์ด๋ฏธ์ง ์ด๋ฆ์ผ๋ก ๋์ปค๋ฅผ ์คํ์์ผ๋ณด์.
์ฒ์ ๋์ปค๋ฅผ ์คํํ ๋๋ run ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค.
docker run hello-world-docker
๊ทธ๋ฆฌ๊ณ ๋ค์์ ๋ช ๋ น์ด๋ก ์์ฑ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ํ์ธํ ์ ์๋ค.
docker image ls
3. Docker hub์ Repo ๋ง๋ค๊ธฐ
๋์ปค ํ๋ธ์ ๋ด๊ฐ ๋ง๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ๊ฒ์ด๋ค.
์๋ ์ฌ์ดํธ์์ ๊ณ์ ์ด ์๋ค๋ฉด ๊ฐ์ ํด์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ฐ์ ๊ณผ์ ์ด ๊น๋ค๋กญ์ง๋ ์์๋ค.
Docker hub : https://hub.docker.com/
๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ์๋จ ํญ์์ Repositories๋ฅผ ํด๋ฆญํ๋ฉด ๋ค์ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
๊ฑฐ๊ธฐ์ ์ฐ์ธก ์๋จ Create repository ๋ฒํผ์ ํด๋ฆญํด์ Repo๋ฅผ ํ๋ ์์ฑํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด ์ด๋ฆ์ ๋ค์์คํ์ด์ค์ Repo ์ด๋ฆ์ ๋ฑ๋กํ์.
๋๋ ํด๋์ด๋ฆ๊ณผ ๋๊ฐ์ด ์ง์ด์ฃผ์๋ค.
์ฐธ๊ณ ๋ก ๋์ปค๋ Private๋ฅผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ์์ด ์ ํด์ ธ์๋ค๊ณ ํ๋ค.
4. Docker hub์ ๋ด Docker Image ๋ฃ๊ธฐ
๋ฑ๋กํ๋ ค๋ ๋์ปค ์ด๋ฏธ์ง์ ํ๊ทธ(๋ณ์นญ)์ ์๊น ๋ง๋ค์๋ Repo์ด๋ฆ์ผ๋ก ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
docker tag ํ์ฌ์ด๋ฏธ์ง์ด๋ฆ DockerRepo์ด๋ฆ
DockerRepo์ด๋ฆ์ ๊ฒฝ์ฐ ๋ค์์คํ์ด์ค/Repository์ด๋ฆ ์ ํํ๋ก ๋ฃ์ด์ฃผ๋ฉด๋๋ค.
๋์ ๊ฒฝ์ฐ sunhokimdev/hello-world-docker ๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ docker image ls๋ก ์์ฑ๋ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ํ์ธํด๋ณด๋ฉด tag๋ก ๋ง๋ ๋ณ์นญ์ ์ด๋ฏธ์ง๊น์ง ํ์ธํ ์ ์๋ค.
๋ณ์นญ๋ง ๋ค๋ฅด์ง ๋๊ฐ์ ๋์ปค ์ด๋ฏธ์ง๋ผ๋ ๊ฒ์ ์์ผ๋ฉด ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ํฐ๋ฏธ๋์์ Docker hub์ ๋ก๊ทธ์ธํ ๊ณ์ ์ ๋ฑ๋กํด์ผํ๋ค.
docker login --username=๋์ปคํ๋ธ๊ณ์ ์ด๋ฆ
ํด๋น ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋์ค๋, ๋์ปค ํ๋ธ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ๋ฉด ๋๋ค.
์ด์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋์ปค ํ๋ธ์ ๋ฃ์ผ๋ฉด ๋๋ค!
docker push DockerRepo์ด๋ฆ
DockerRepo์ด๋ฆ์ ์๊น tag ๋ช ๋ น์ด๋ก ๋ง๋ ๋์ปค ์ด๋ฏธ์ง ๋ณ์นญ๊ณผ ๊ฐ์ผ๋ฏ๋ก ๊ทธ ์ด๋ฏธ์ง๊ฐ ๋ค์ด๊ฐ๋ค.
์ด์ ๋์ปค ํ๋ธ ์น์์ ํ์ธํด๋ณด๋ฉด.. ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
5. ๋ด Docker Image๊ฐ ์ ์ ๋์ํ๋์ง ํ์ธ
๋ค์์ผ๋ก ๊ฐ์ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ ๋ด ๋์ปค ์ด๋ฏธ์ง๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํด๋ณผ ์ ์๋ค.
๋์ปค๊ฐ ์ค์น๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์ 4์๊ฐ๋์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ์ฌ์ดํธ๊ฐ ์๋ค.
๋ด ๋์ปค ํ๋ธ ๊ณ์ ๊ณผ ์ฐ๊ฒฐํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
https://labs.play-with-docker.com/
๋ก๊ทธ์ธํ๊ณ Start ๋ฒํผ์ ํด๋ฆญํด์ ์ง์ ํ๋ฉด, ์ผ์ชฝ ํญ์์ ADD NEW INSTANCE ๋ฒํผ์ผ๋ก ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋ค์.
๊ทธ๋ฌ๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ ๊ฒ์ ํฐ๋ฏธ๋์ด ๋์จ๋ค.
ํฐ๋ฏธ๋์์ ๋ด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์๋ณด์.
docker pull DockerRepo์ด๋ฆ
์์ฑํ๋ ๋์ปค Repo์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ docker run DockerRepo์ด๋ฆ ์ผ๋ก ๋์์ ํ์ธํด๋ณด๋ฉด..
์ ์์ ์ผ๋ก ๊ตฌ๋๋ ๊ฒ์ ํ์ธํ๋ค!
๋์ปค์์ ์ฐ๋ถํฌ ์ฌ์ฉํด๋ณด๊ธฐ
์ฐ๋ถํฌ๋ฅผ ๋์ปค์ ์ค์นํด๋ณด๊ณ ์ฌ์ฉํด๋ณด๋ ์ค์ต์ ํด๋ณด์๋ค.
์ฐ๋ถํฌ๋ ๊ณต์ ์ด๋ฏธ์ง๋ผ ๋ฐ๋ก ๋ค์์คํ์ด์ค๋ ๋ฒ์ ์ด๋ฆ์ด ์์ด์ ๊ทธ๋ฅ ubuntu ํ๋ฉด ์์๋ฃ๋๋ค.
docker run ubuntu # ์ฐ๋ถํฌ ์ค์น
docker ps - a # ๋์ปค ํ์ธ ๋ช
๋ น์ด, -a ๋ ์ฃฝ์ ๋์ปค๊น์ง ํ์ธํ๋ ์ต์
์ด๋ค.
docker run -it ubuntu # ์์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ ์ฐ๋ถํฌ ๋์ปค ์ปจํ
์ด๋ ์์ผ๋ก ์ง์
apt update # apt๋ฅผ ๋จผ์ ์
๋ฐ์ดํธํด์ผ nano๊ฐ ์ค์น๋๋ค.
apt install nano # nano ์ค์น
nano๊ฐ ์ค์น๋๊ณ , nano ๋ฅผ ์ ๋ ฅํด์ ์ ์๋ํ๋์ง ํ์ธํด๋ณธ๋ค.
์ ์์ ์ผ๋ก nano๊ฐ ๋์ํ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
nano๋ apt remove nano๋ก ์ญ์ ๊ฐ๋ฅํ๋ค.
๋์ปค์์ MySQL ์ฌ์ฉํด๋ณด๊ธฐ
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด MySQL 8.0์ ๋ค์ด๋ก๋๋ฐ๊ณ , ์คํํ ์ ์๋ค.
docker pull mysql/mysql-server:8.0
docker run --name=mysql_container mysql/mysql-server:8.0
--name ์ต์ ์ ์ฃผ๋ฉด Container ID๋ฅผ ๋์ ํ ์ด๋ฆ์ ์ ํด์ค ์ ์๋ค.
๋ค์์ logs์ exec ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋ ๊ท์ฐฎ๊ฒ Container ID ํ์ธ์์ด ์๋ก ๋ง๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
MySQL์ ์ง์ ์ฌ์ฉํ๊ธฐ ์ ์ MySQL์ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํ๋ฐ, ์ด๊ฒ ๋ก๊ทธ์ชฝ์ ์ ์ฅ๋์ด ์์ด์ ์ง์ ํ์ธํด์ผํ๋ค.
docker logs mysql_container 2>&1 | grep GENERATED
์๋์ฐ์ ๊ฒฝ์ฐ grep์ด ์๋ findstr ์ ๋์ ๋ฃ์ด์ฃผ๋ฉด ์์์ ์ฐพ์์จ๋ค.
๋น๋ฐ๋ฒํธ๋ฅผ ๋ณต์ฌํด๋๋ฉด ์๋์์ ๋ก๊ทธ์ธํ ๋ ์ฌ์ฉํ๊ฒ ๋๋ค.
-uroot ์ต์ ์ผ๋ก ๋ฃจํธ ์ ์ ๋ก mysql ์์ ์ ์ํ๋ค.
-p๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ฒ ๋ค๋ ์ต์ ์ด๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ผ๋ผ๊ณ ๋์ค๋ฉด ๋ณต์ฌํด๋์๋ ๋ฌธ์ฅ์ ๋ฃ์ด ๋ก๊ทธ์ธํ๋ฉด ๋๋ค.
docker exec -it mysql_container mysql -uroot -p
๋ค์์๋ ์ด ๋์ปค์์ MySQL์ ์ด์ฉํด์ ์์ ํด๋ณด๋ ์ค์ต์ ํด๋ณธ๋ค.