Dev Container overview
Dev Container๋ ๋์ปค ์ปจํ ์ด๋๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ ๊ธฐ์ ์ ๋๋ค.
์ ๊ฐ ์ฆ๊ฒจ ์ฌ์ฉํ๋ Jetbrains์ IDE์ธ IntelliJ IDEA, Pycharm, RubyMind์์๋ Dev Container ๊ธฐ์ ์ ํ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑ, ์์ ๋ฐ ๋น๋ํ๊ณ ์คํํฉ๋๋ค.
Docker Compose๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ๋์ปค ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ฝ๊ฒ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Advantages
Dev Container๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ํ๊ฒฝ ์ผ๊ด์ฑ(Environment consistency)
- ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฑฐ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ ๋, Dev Container๋ ํ๋ก์ ํธ ์ฐธ์ฌ์์๊ฒ ๋์ผํ ์ค์ ์ ํตํด์ ๋์ผํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์ธ ์ฅ๋น์์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋์(It works on my machine)ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋น ๋ฅธ ํ๊ฒฝ ๊ตฌ์ฑ
- ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ์์ ์ ์ข ์ข ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค. Dev Container๋ ๋ช ๊ฐ์ง ์ค์ ํ์ผ๊ณผ ๋ช ๋ น์ด๋ง์ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ๋ณด์ ๋ฐ ๋
๋ฆฝ์ฑ
- Dev Container๋ ๋ก์ปฌ ์ด์์ฒด์ ์ ์์ ํ ๋ ๋ฆฝ๋์ด ์คํ๋ฉ๋๋ค. ์ฌ์ฉํ๊ณ ์๋ ๊ฐ๋ฐ ๋๊ตฌ์์ ํธํ์ฑ ๋ฌธ์ ์์ด ์๋ก์ด ๊ธฐ์ ์ ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
- ์ฌ์ด ์ ์ง๋ณด์์ ์
๋ฐ์ดํธ
- ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ๊ฐ๋ฐ ๋๊ตฌ์ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ด ๋จ์ํ๊ณ ํธ๋ฆฌํฉ๋๋ค.
- ์๊ฒฉ ๊ฐ๋ฐ
- ๋์ปค ์ปจํ ์ด๋๋ ๋ก์ปฌ ๋จธ์ ๊ณผ ๋จ์ด์ง ์๊ฒฉ ๋จธ์ ์์๋ ์คํ๋ ์ ์์ต๋๋ค. Dev Container๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ๋จธ์ ์์ ์คํ๋๋ ๋์ปค ์ปจํ ์ด๋๋ฅผ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Prerequisites
1. Jetbrains IDE ์ค์น
์๋ ์ฃผ์์ ๋ฐฉ๋ฌธํ์ฌ ํ์ํ IDE๋ฅผ ์ค์นํฉ๋๋ค.
Community Edition์์๋ Dev Containers ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
2. Docker ์ค์น
์ ๋ MacOS๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, Docker Desktop์ ์ค์นํ์์ต๋๋ค.
Colima๋ ์ง์๋์ง ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.
์๋ ์ฃผ์์ ๋ฐฉ๋ฌธํ์ฌ Docker Desktop์ ์ค์นํฉ๋๋ค.
Start Dev Container from IDE welcome screen
์ฌ๊ธฐ์๋ IntelliJ Ultimate 2024.3 ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํฉ๋๋ค.
IntelliJ๋ฅผ ์ต์ด๋ก ์คํํ์ ๋ ๋ํ๋๋ Welcome to IntelliJ IDEA์์ ์ด๊ธฐ ๊ตฌ์ฑ์ ์์ํ๊ฒ ์ต๋๋ค.
๊ทธ ์ธ์ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Dev Container ์ค์ ํ์ผ ์์ฑ ๋ฐ ์คํ
- ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์
.devcontainer
ํด๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ ๋ด๋ถ์devcontainer.json
ํ์ผ์ ์์ฑํฉ๋๋ค. ํด๋น ํ์ผ์ ํตํด์ ์ค์ Dev Container๋ฅผ ์ค์ ํฉ๋๋ค.{ "name" : "Test Dev Container" , "service": "spring-project" , "build": { "dockerfile": "Dockerfile" } , "remoteUser": "root" , "postCreateCommand": "java --version" , "customizations" : { "jetbrains": {"backend": "IntelliJ"} } }
-
Welcome Screen์์ Remote Development ๋ ธ๋๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
์ ํ ๊ฐ๋ฅํ ์ต์ ์ค์์ Dev Containers๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
์๋กญ๊ฒ ์ด๋ฆฐ ํ์ด์ง๊ฐ ์ด๋ฆฝ๋๋ค. ๋ก์ปฌ์์ ์คํ๋๊ณ ์๋ ๋์ปค ์์ง๊ณผ ์๋์ผ๋ก ์ปค๋ฅ์ ์ ๋งบ์ต๋๋ค.
๋ง์ฝ ์ปค๋ฅ์ ์ด ๋งบ์ด์ง์ง ์์๋ค๋ฉด, ๋์ปค ์์ง์ด ์ ๋๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํ์ธ์. -
Dev Container์์ ์ฌ์ฉํ ๋ฐฑ์๋ IDE๋ฅผ ์ ํํ์ธ์.
์ฌ๊ธฐ์์๋ IntelliJ IDEA๋ฅผ ์ฌ์ฉํฉ๋๋ค. -
์๋จ์ VSC๋ ๋ก์ปฌ์์ ์ฌ์ฉํ ํ๋ก์ ํธ๋ฅผ ์ ํํ๋ ํญ์ด ์กด์ฌํฉ๋๋ค. ์ด ๋ฌธ์์์๋ ๋ก์ปฌ ํ๋ก์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํฉ๋๋ค.
Path to devcontainer.json
ํ๋์ 1๋ฒ์์ ์์ฑํ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๊ณBuild Container and Continue
๋ฒํผ์ ํด๋ฆญํ์ฌ ์คํํฉ๋๋ค.
References
jetbrains.com
containers.dev