๐Ÿณ Docker study 3rd

Optimizing Kaggle Python Docker for Data Analysis

by Arielle


Docker Study

1. Setting up a Python analysis environment

Kaggle ํ”Œ๋žซํผ์—์„œ๋Š” โ€˜Kaggle GPU Imageโ€™๋ผ๋Š” GPU๋ฅผ ์ง€์›ํ•˜๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด ๋”ฅ๋Ÿฌ๋‹์— ํ•„์š”ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ๋ฅผ ๋“ค๋ฉด TensorFlow, PytTorch)์™€ ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ํ•œ๋ฒˆ์— ํŒจํ‚ค์ง€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฝค ์œ ์šฉํ•˜๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kaggle GPU๋Š” โ€˜Tesla T4 GPUโ€™ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ ๋’ค์—์„œ ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋„๋ก ํ•œ๋‹ค.

๋จผ์ € ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ Kaggle Github ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋œ๋‹ค. ๊ฒ€์ƒ‰์ฐฝ์— โ€˜kaggle python docker imageโ€™๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋ฉด Github ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‹จ์˜README ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์˜ ์ข…๋ฅ˜๋ฅผ โ€˜CPU-onlyโ€™, โ€˜GPUโ€™ ๋‘˜ ์ค‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์Œ.. ๋ง‰์ƒ ์ „์ฒด์ ์œผ๋กœ ๋‹ค ์‹ค์Šตํ•ด๋ณด๊ณ  ๋‚˜๋‹ˆ GPU๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒŒ, ์ถ”ํ›„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ๋” ์ด๋“์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ด ์ด์•ผ๊ธฐ๋„ ๋’ค์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ, โ€˜Dev Container Extensionโ€™์„ ์‚ฌ์šฉํ•˜๋ฉด .json ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š”๋ฐ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ™•์žฅ ํŒŒ์ผ์„ ์ปค์Šคํ…€ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๋•Œ GPU๋ฅผ ๋””ํดํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ๋กœ์ปฌ์˜ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š” ์ ์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, ์ „ ๋‹จ๊ณ„์—์„œ โ€˜CPU-onlyโ€™๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฑด ๋„ˆ๋ฌด ์‹œ์•ผ๊ฐ€ ์ข์•„์ง€๋Š” ๋Š๋‚Œ์ด ๋“ค๊ธฐ๋„ ํ•œ๋‹ค. ๋ฌผ๋ก  ์ด ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž์˜ ์„ ํƒ์ด๋‹ค! ๐Ÿ‘Š

Descriptive Alt Text

๋‚˜๋Š” โ€˜GPUโ€™ ๋งํฌ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด์™”๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“ค์–ด์™”์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์ผํ…๋ฐ, ์ด ํด๋ผ์šฐ๋“œ๋Š” Kaggle์˜ GPU ์ด๋ฏธ์ง€๋“ค์„ ๋ฒ„์ „ ๋ณ„๋กœ ์ •๋ฆฌํ•ด ๋†“์€ ํด๋”๋‹ค. ํ˜„ ์‹œ์ (24.10.11) ๊ธฐ์ค€ ๊ฐ€์žฅ ์ตœ์‹  ์ด๋ฏธ์ง€๋Š” v153์œผ๋กœ ๋‚˜๋Š” ์ด ์ด๋ฏธ์ง€๋ฅผ ๋‹น๊ฒจ(pull)์™”๋‹ค.

Descriptive Alt Text


๐Ÿ’ป Related Commands

โœ… ssh -i <~/.ssh/id_rsa.pem> @</code>

- ๊ฐ€์ƒ๋จธ์‹  ์„œ๋ฒ„ ์—ฐ๊ฒฐ

โœ… sudo usermod -aG docker </code>

- ํ˜„์žฌ ์‹œ์Šคํ…œ์—์„œ ํŠน์ • ์‚ฌ์šฉ์ž๋ฅผ Docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•˜๊ธฐ!

- usermod ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉ์ž์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ, -aG ์˜ต์…˜์€ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. (ํŒ€ ํ”„๋กœ์ ํŠธ ์‹œ, ์ด ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ์— ํŒ€์› ์ถ”๊ฐ€ ๊ฐ€๋Šฅ!)

โœ… docker pull </code>

- Docker ์ด๋ฏธ์ง€๋ฅผ Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ๋‹ค์šด๋ฐ›๊ธฐ!


Descriptive Alt Text


2. Setting Up a Remote Development Environment

2.1 Connecting to a virtual machine via remote method

๊ฐ€์ƒํ™˜๊ฒฝ์— ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์—์„œ ์ถ”๊ฐ€๋กœ Remote ๋ฐฉ์‹์œผ๋กœ ์ƒˆ๋กœ์šด ์œˆ๋„์šฐ๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒ๋จธ์‹ ์— ์ ‘์†ํ–ˆ๋‹ค. (โ€™Docker study 2ndโ€™ ์ฐธ๊ณ )

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

๋‚˜๋Š” FROM ๋ช…๋ น์–ด๋กœ ์–ด๋–ค ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์—์„œ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์—ˆ๋‹ค. gcr.io/kaggle-gpu-images/python:v153 ์„ ์„ค์ •ํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์ด๋ฏธ ์•ž์„  โ€˜1. Setting up a Python analysis environmentโ€™ ์—์„œ v153์„ ์ด๋ฏธ ๋‹ค์šด ๋ฐ›์€ ๋‚ด์—ญ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ„ฐ๋ฏธ๋„์—์„œ sudo docker images ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ฌดํŠผ ์ด๋ ‡๊ฒŒ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ Dockerfile์—์„œ ์„ค์ •ํ•œ ํ›„ RUN ๋ช…๋ น์–ด๋กœ ์ดpip install yfinance ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ๋นŒ๋“œํ•ด ์ฃผ์—ˆ๋‹ค. (๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ถ”๊ฐ€ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์—ฌ๊ธฐ์„œ ๋นŒ๋“œํ•ด ์ฃผ๋ฉด ๋จ!)

Descriptive Alt Text


๐Ÿ›œ [์ ‘์† ์ˆœ์„œ ์š”์•ฝ] open a remote window โ†’ Connect to Tunnel โ†’ GitHub โ†’ kaggle-linux-gpu-vm(๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„) โ†’ โ€˜kaggle-python-gpu-envโ€™ ํด๋” ์ƒ์„ฑ โ†’ ๊ทธ ์•ˆ์— โ€˜Dockerileโ€™ ํŒŒ์ผ ์ƒ์„ฑ(์ž๋™์œผ๋กœ Docker intelligence ์ ์šฉ ๋˜๋Š” ๊ฒƒ ํ™•์ธ!)


2.2 Setting up the environment using the Dev Container Extension

๋‹ค์Œ์œผ๋กœ Dev Container๋ฅผ ์ด์šฉํ•ด ์ถ”๊ฐ€๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด์ฃผ์—ˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ ์ด์ „ ์— ์ƒ์„ฑํ•œ ํด๋” (โ€˜kaggle-python-gpu-envโ€™)๋กœ ์ ‘๊ทผ ํ›„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.๐Ÿšจ ($cd ์ฒ˜๋Ÿผ ํ˜„์žฌ ๋‚ด๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋ผ๋Š” ๋œป์ž„!)


โ—๏ธ [์„ ํ–‰ ์ž‘์—…] Dev Container Extension, Remote Tunnel Extension์ด ๊ฐ€์ƒ๋จธ์‹  & ๋กœ์ปฌ์— ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ.


Editing on kaggle-linux-gpu-vm(์ขŒ์ธก ํ•˜๋‹จ ํŒŒ๋ž‘์ƒ‰ remote)์„ ํด๋ฆญ ํ›„ โ€˜Add Dev Container Configuration Filesโ€ฆโ€™๋กœ ๋“ค์–ด๊ฐ€ ์ฃผ์—ˆ๋‹ค.

Descriptive Alt Text

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์˜ต์…˜ ์ฐฝ์ด ๋‚˜์˜ค๋Š”๋ฐ โ€˜From โ€˜Dockerfileโ€™โ€™์„ ์„ ํƒํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Descriptive Alt Text

์ดํ›„ ๋‚˜์˜ค๋Š” ์ถ”๊ฐ€ ์˜ต์…˜์ฐฝ์€ ๊ทธ๋ƒฅ ๋‘๊ณ  ok๋ฅผ ๋ˆŒ๋Ÿฌ ์„ค์ •์„ ๋๋‚ด๋ฉด ๋œ๋‹ค.

Descriptive Alt Text


2.3 Differences between Dockerfile and devcontainer.json

๊ทธ๋Ÿฌ๋ฉด .json ํŒŒ์ผ์ด ํ•˜๋‚˜ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด ํŒŒ์ผ์€ Dev Container Extension์„ ์„ค์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ์ปจํ…Œ์ด๋„ˆ ์ปค์Šคํ…€/์˜ต์…˜ ์ฐฝ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์‚ฌ์‹ค ๋‚˜๋Š” ์ด ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ •๋ฆฌ๊ฐ€ ์•ˆ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ โ€˜2.1 Connecting to a virtual machine via remote methodโ€™ ์—์„œ ์ด๋ฏธ Dockerfile์„ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€๋กœ ์ด .json ํŒŒ์ผ์—์„œ ๋ฌด์—‡์„ ๋˜ ์„ค์ • ํ•˜๋ผ๋Š” ๊ฑด์ง€ ๋ชจํ˜ธํ–ˆ๋‹ค.

Descriptive Alt Text

๐Ÿ“‚ย Dockerfile?

#๋ถ•์–ด๋นต ํ‹€์„ ๋งŒ๋“œ๋Š” ๋ ˆ์‹œํ”ผ

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

A. ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์„ค์ •: ๋ถ•์–ด๋นต์„ ๋งŒ๋“ค ๋•Œ ์–ด๋–ค ๋ง›์˜ ๋ฐ˜์ฃฝ์„ ์“ธ์ง€ ์ •ํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ Python์ด๋‚˜ Ubuntu ๊ฐ™์€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค!

B. ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜: ๋ถ•์–ด๋นต ๋ฐ˜์ฃฝ์— ํ•„์š”ํ•œ ์žฌ๋ฃŒ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค! ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ถ•์–ด๋นต ๋ฐ˜์ฃฝ์— ์ดˆ์ฝœ๋ฆฟ ์นฉ์„ ๋„ฃ๋“ฏ, ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค!

C. ์‹คํ–‰ ๋ช…๋ น์–ด: ๋ถ•์–ด๋นต์ด ์™„์„ฑ๋œ ํ›„์— ์–ด๋–ป๊ฒŒ ๊ตฌ์šธ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผœ์กŒ์„ ๋•Œ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ• ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค! ์˜ˆ๋ฅผ ๋“ค์–ด ๋ถ•์–ด๋นต์„ ๊ตฝ๋Š” ์˜จ๋„์™€ ์‹œ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋žจ ์—ญ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋  ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค!

๐Ÿ‘‡ย Dockerfile example

FROM python:3.9  # Python 3.9์ด ๊น”๋ฆฐ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉ
WORKDIR /app  # ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ /app์œผ๋กœ ์„ค์ •
COPY . /app  # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์˜ /app ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ
RUN pip install -r requirements.txt  # ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
CMD ["python", "app.py"]  # Python์œผ๋กœ app.py ์‹คํ–‰

๐Ÿ“‚ย devcontainer.json?

#์„ฑ์ˆ˜๋‚˜ ํ™๋Œ€์—์„œ ๋ถ•์–ด๋นต ๊ฐ€๊ฒŒ๋ฅผ ์„ธํŒ…ํ•  ๋•Œ ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์„ ์•Œ์•„์„œ ์„ค์ •ํ•ด์ฃผ๋Š” ํŒŒ์ผ

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

  • ์—๋””ํ„ฐ ์„ค์ •: ํ™๋Œ€๋‚˜ ์„ฑ์ˆ˜์—์„œ ๋ถ•์–ด๋นต ํŒŒ๋Š” ๊ฐ€๊ฒŒ๋งˆ๋‹ค ํ•„์š”ํ•œ ์žฅ๋น„๋ฅผ ์ž๋™์œผ๋กœ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ใ„ดVS Code์—์„œ ์“ธ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•ด์ค€๋‹ค!
  • ํฌํŠธ ์„ค์ •: ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌํŠธ๋ฅผ ์—ด์–ด์ค€๋‹ค!
  • ์ถ”๊ฐ€ ๋ช…๋ น์–ด ์‹คํ–‰: ์ถ”๊ฐ€ ์ž‘์—…(๋ช…๋ น์–ด)์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค!

๐Ÿ‘‡ย devcontainer.json example

{
  "name": "Python Dev Container",  # ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„
  "dockerFile": "./Dockerfile",  # Dockerfile์„ ์‚ฌ์šฉ
  "settings": {
    "python.pythonPath": "/usr/local/bin/python"  # Python ๊ฒฝ๋กœ ์„ค์ •
  },
  "extensions": [  # VS Code์—์„œ ์„ค์น˜ํ•  ํ™•์žฅ ๊ธฐ๋Šฅ
    "ms-python.python",
    "ms-toolsai.jupyter"
  ],
  "forwardPorts": [5000],  # ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋กœ์ปฌ๋กœ ์—ด์–ด์ค„ ํฌํŠธ
  "postCreateCommand": "pip install -r requirements.txt"  # ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด
}

๐Ÿ‘‡ย summary

Dockerfile vs devcontainer.json
ํ•ญ๋ชฉ Dockerfile devcontainer.json
๋ชฉ์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • (๋„๊ตฌ, ํ™•์žฅ ๊ธฐ๋Šฅ ๋“ฑ)
์‚ฌ์šฉ ์œ„์น˜ ํ”„๋กœ๋•์…˜, ํ…Œ์ŠคํŠธ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ฃผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ (VS Code์™€ ํ•จ๊ป˜)
์„ค์ • ๋‚ด์šฉ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€, ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜, ์‹คํ–‰ ๋ช…๋ น์–ด ํฌํŠธ ์„ค์ •, VS Code ํ™•์žฅ ๊ธฐ๋Šฅ, ์ถ”๊ฐ€ ๋ช…๋ น์–ด

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ devcontainer.json์€ Dockerfile์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์„ฑ์ˆ˜๋‚˜ ํ™๋Œ€์—์„œ ๋ถ•์–ด๋นต ๊ฐ€๊ฒŒ๋ฅผ ์„ธํŒ…ํ•  ๋•Œ ๋ถ•์–ด๋นต ํ‹€(Dockerfile)์€ ๋™์ผํ•˜์ง€๋งŒ ๊ฐ€๊ฒŒ ํ™˜๊ฒฝ(devcontainer.json)์€ ๊ฐ๊ธฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด Dockerfile์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ , devcontainer.json์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ ํ™˜๊ฒฝ์—์„œ ํŽธํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„๊ตฌ๋ฅผ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๊ฑธ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด์ œ ์ด ๋ถ€๋ถ„์—์„œ ๋”์ด์ƒ ํ—ค๋งค๋Š” ์ผ์€ ์—†์„ ๊ฒƒ์ด๋‹ค!

์•„๋ž˜ ์‚ฌ์ง„์€ ์ฐธ๊ณ ์‚ฌํ•ญ์ธ๋ฐ, ์ด๋ ‡๊ฒŒ .json ํŒŒ์ผ์— extension์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๊ฐ€์„œ โ€˜Copy Extension IDโ€™๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค!

Descriptive Alt Text


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

์ถ”๊ฐ€๋กœ 3์ฃผ์ฐจ ์Šคํ„ฐ๋””์™€ ๊ด€๋ จํ•ด์„œ Bench Mark ํฌ์ŠคํŒ…๋„ ์—…๋กœ๋“œ ๋˜์–ด ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ์—ด์‹ฌํžˆ ๊ณ ์ƒํ•˜๋ฉฐ ๋„์ปค๋ฅผ ๋นŒ๋“œํ•ด๋ณด๊ณ  ์žˆ๋Š”๋ฐ, ์ง„์งœ ์ด๊ฒŒ ๋กœ์ปฌ๊ณผ ๊ฐ€์ƒ๋จธ์‹  ์‚ฌ์ด์—์„œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ฐจ์ด๋‚˜๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ถ„๋“ค๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์กฐ๊ธˆ์ด๋ผ๋„ ๊ถ๊ธˆํ•จ์ด ๋“ ๋‹ค๋ฉด โ€˜Docker study 3 [Bench Mark]โ€™๋ฅผ ์ด์–ด์„œ ๋ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค!


Reference

Tags: DockerAutonomous_DrivingNVIDIAAzureCloudPython

Subscribe via RSS