Vscode-docker: Dockerfile.* ํŒŒ์ผ ์—ฐ๊ฒฐ ์žฌ๊ฒ€ํ† 

์— ๋งŒ๋“  2020๋…„ 07์›” 05์ผ  ยท  27์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/vscode-docker

dockerfile.go ๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ #1908 ๋กœ ์ธํ•ด Dockerfile ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๊ฒฐ์ •์— ์š”์ ์ด #1907์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ํ„ฐ๋ฌด๋‹ˆ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Dockerfile ๊ฐ€ Unknown ๋กœ ์ธ์‹๋˜๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ go ํŒŒ์ผ์ด Dockerfile ๋กœ ์žฌ์ธ์‹๋˜๋ฉด VSCode๋Š” ์ด๋ฅผ Dockerfile ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ Format on save ๋ฅผ ์„ ํƒํ–ˆ์„ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”.) ์•„๋ž˜ ์Šคํฌ๋ฆฐ์ƒท์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด.

๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋˜๋Œ๋ฆฌ๊ณ  *.go ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. dockerfile ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋ฌด๊ฑฐ์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Dockerfile.* ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Annotation 2020-07-05 114338

P2 blocked

๋ชจ๋“  27 ๋Œ“๊ธ€

Dockerfile.*** ๋ผ๋Š” ์ด๋ฆ„์˜ ์‹ค์ œ Dockerfile์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด Dockerfile์ด ์•„๋‹Œ ์‚ฌ๋žŒ๋ณด๋‹ค ์••๋„์ ์œผ๋กœ(์•ฝ 50๋ฐฐ) ๋งŽ์•˜์œผ๋ฏ€๋กœ #1908์„ ์œ ์ง€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. settings.json์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    "files.associations": {
        "dockerfile.go": "go"
    }

๋‚˜๋Š” ์ด์Šˆ #1907์„ ์ฝ์—ˆ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Dockerfile.*** ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ Dockerfile.prod , Dockerfile.dev ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile.xxx ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์ถ”๊ฐ€ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๊ทธ๋ฃน์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์ด ์†Œ๊ทธ๋ฃน์„ ๋‹ค์น˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ Dockerfile.* ํŒจํ„ด์€ ๋‹ค๋ฅธ ํ™•์žฅ์ž์˜ ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ถฉ๋Œ์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค.

Dockerfile.prod , Dockerfile.dev ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub ๋ฐ ์›๊ฒฉ ์ธก์ •์—์„œ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ˆ˜๋ฐฑ ๊ฐ€์ง€ ํ™•์žฅ ๊ธฐ๋Šฅ์ด ๋๋‚˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ๋ก€๋ณ„๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ง€์† ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ Dockerfile.* ํŒจํ„ด์€ ๋‹ค๋ฅธ ํ™•์žฅ์ž์˜ ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ถฉ๋Œ์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”? ์–ธ์–ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ํ™•์žฅ์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ค๋‹ˆ๊นŒ?

์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”? ์–ธ์–ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ํ™•์žฅ์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ค๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด go extension ๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ $ dockerfile.go ๋Š” go file ๋กœ ์ธ์‹๋˜์ง€๋งŒ docker extension ์„ค์น˜ ํ›„ Dockerfile ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

๋ฌด์Šจ ๋ง์ธ์ง€ ์•Œ๊ฒ ๋‹ค. ์–ธ์–ด ์—ฐํ•ฉ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด dockerfile.go ๊ฐ€ Go ํŒŒ์ผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

๋ฌด์Šจ ๋ง์ธ์ง€ ์•Œ๊ฒ ๋‹ค. ์–ธ์–ด ์—ฐํ•ฉ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด dockerfile.go ๊ฐ€ Go ํŒŒ์ผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์ด์ง€๋งŒ ๋‹ค๋ฅธ ํ™•์žฅ์ž์—๋„ ์˜ํ–ฅ์„ ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด Dockerfile.* ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ Dockerfiles๋ฅผ ๊ณผ๋ถ„๋ฅ˜ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์›๊ฒฉ ์ธก์ •์—์„œ ๋ณธ ๊ฒƒ์—์„œ ์•ฝ 98%์— ๋น„ํ•ด Dockerfile์ด ์•„๋‹Œ Dockerfile.* ๋ผ๋Š” ์ด๋ฆ„์ด ์•ฝ 2%์˜€์Šต๋‹ˆ๋‹ค.

VSCode์˜ ํ•œ๊ณ„๋กœ ์ธํ•ด ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜์€ ์—†์ง€๋งŒ ๋‚ด๊ฐ€ ๋ณธ ์ˆ˜๋ฐฑ ๊ฐ€์ง€ ๋ณ€ํ˜•์„ ๊ฐ๊ฐ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ํ˜„์‹ค์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(์–ธ์–ด ์—ฐ๊ฒฐ ์„ค์ •)์ด ๊ฐ๊ฐ์— ๋Œ€ํ•ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2% ๋Œ€์‹  98%์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆซ์ž ์™ธ์— ๊ณ ๋ คํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

dockerfile.go ์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์— ๋Œ€ํ•ด ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ์€ go file ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์ž๊ฐ€ .go ์ด๋ฏ€๋กœ Dockerfile ๋กœ ์ทจ๊ธ‰ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ dockerfile.prod ๋ฅผ ๋งŒ๋“ค ๋•Œ vscode๊ฐ€ Dockerfile ํ˜•์‹์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. Dockerfile.prod ๊ฐ€ Dockerfile ์˜ ๊ณต์‹ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Dockerfile ๋ฅผ ์‰ฝ๊ฒŒ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž๋™ ํ˜•์„ฑ ์—†์ด go file ๋ฅผ ์“ฐ๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด dockerfile์ด FROM ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— First Line Pattern ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด firstLine ์†์„ฑ์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

perl extension ๋Š” ์ฒซ ๋ฒˆ์งธ ์ค„ ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(https://github.com/microsoft/vscode/blob/7a5bca9fafbbb23de289179be95e9c4832540c02/extensions/perl/package.json#L23).

์‹ค์ œ๋กœ ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด dockerfile์ด FROM ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— First Line Pattern ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœํ–‰์„ ๋ฌด์‹œํ•˜๊ณ  ์„ ํ–‰ ๊ณต๋ฐฑ์„ ๊ณ ๋ คํ•˜๋ฉด Dockerfile์€ ์ฃผ์„(๋˜๋Š” ํŒŒ์„œ ์ง€์‹œ๋ฌธ), ARG ๋ช…๋ น ๋˜๋Š” FROM ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  package.json First Line Property ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Annotation 2020-07-06 234920

๊ฐœํ–‰์„ ๋ฌด์‹œํ•˜๊ณ  ์„ ํ–‰ ๊ณต๋ฐฑ์„ ๊ณ ๋ คํ•˜์—ฌ Dockerfile์€ ์ฃผ์„(๋˜๋Š” ํŒŒ์„œ ์ง€์‹œ๋ฌธ), ARG ๋ช…๋ น ๋˜๋Š” FROM ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ถˆํ–‰ํžˆ๋„ First Line Property ๋Š” ์ฃผ์„์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์กฐ์‚ฌ๋ฅผ ์ข€ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. firstLine ์†์„ฑ์€ filenamePatterns ์™€ ํ•จ๊ป˜ OR๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ํŒŒ์ผ์ด filenamePatterns OR firstLine ์™€ ์ผ์น˜ํ•˜๋ฉด Dockerfile๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ถฉ๋Œํ•˜๋Š” filenamePattern ๊ฐ€ ์ผ์น˜ํ•˜๋ฉด Dockerfile ๋Œ€์‹  ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, FROM alpine ๋กœ ์‹œ์ž‘ํ•˜๋Š” "test.py"๋Š” Python ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

"firstLine": "\\s*([Ff][Rr][Oo][Mm].+|#.*|[Aa][Rr][Gg].+)" ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ํ–‰ ๊ณต๋ฐฑ์ด ํ—ˆ์šฉ๋˜๋ฉฐ FROM ... , ARG ... , #comments ๋ฐ #parser=directives ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

"Dockerfile.*" ์—ฐ๊ฒฐ์ด ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ Dockerfile๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ:

๋„์ปคํŒŒ์ผ.ํ…Œ์ŠคํŠธ:

FROM alpine
# Because the first line matches
    from alpine
# Because the first line matches
# The language server does warn about lowercase
    #a leading comment with leading whitespace
FROM alpine
# Because the first line matches
    # a leading comment with different leading whitespace
FROM alpine
# Because the first line matches
#fake=parserdirective
FROM alpine
# Because the first line matches
ARG test
FROM alpine
# Because the first line matches
ARG #blah--the language server correctly flags this as an error
FROM alpine
# Because the first line matches

๋„์ปค ํŒŒ์ผ:

using namespace std;
// Because the file name matches "Dockerfile"

Dockerfile๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ:

๋„์ปคํŒŒ์ผ.py:

print('hello world')
# Because the file name matches "*.py" from Python

Dockerfile๋กœ ์ž˜๋ชป ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ:

๋„์ปคํŒŒ์ผ.ํ…Œ์ŠคํŠธ:

FROM alpine
# No match on the first line, because it is blank

๋„์ปคํŒŒ์ผ.py:

FROM alpine
# Because the file name matches "*.py" from Python

@rcjsuen @simpleapples (๋˜ํ•œ @chrisdoherty4 ๊ฐ€ #1907์„ ์ฒ˜์Œ ์—ด์—ˆ์„ ๋•Œ๋ถ€ํ„ฐ)

์„ธ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ด ๋•Œ ์ฒซ ๋ฒˆ์งธ ์ค„๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  ์ผ์น˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋œ "Dockerfile.*" ํŒŒ์ผ์€ ํƒญ์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด ๋•Œ๊นŒ์ง€ ์ƒˆ ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "Dockerfile.test"๋ผ๋Š” ๋นˆ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์—ด๋ฉด Dockerfile๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ดˆ์•ˆ ์ž‘์„ฑ์— ๋„์›€์ด ๋˜๋Š” ์ธํ…”๋ฆฌ์„ผ์Šค๋„ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค). "FROM alpine"์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด๋ฉด ์ด์ œ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.
  • ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” "Dockerfile.*" ํŒŒ์ผ ์ด๋ฆ„์€ ์–ธ์–ด ๋˜๋Š” ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ Dockerfile(๋งˆ์ง€๋ง‰์—์„œ ๋‘ ๋ฒˆ์งธ ์˜ˆ)๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์–ธ์–ด์˜ filenamePattern ์™€ ์ผ์น˜ํ•˜๋Š” "Dockerfile.*"์€ ํ•ญ์ƒ ํ•ด๋‹น ์–ธ์–ด๋กœ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค(๋งˆ์ง€๋ง‰ ์˜ˆ). ์˜ˆ๋ฅผ ๋“ค์–ด "Dockerfile.py"๋Š” ์œ ํšจํ•œ Dockerfile์ธ ๊ฒฝ์šฐ์—๋„ Python ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋“ค ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”? ์ €๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ์ ์ด ์กฐ๊ธˆ ๋” ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ Dockerfile.* ์ด๋ฆ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ๋Š” ๋‚˜์—๊ฒŒ ์•„์ฃผ ์‚ฌ์†Œํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@bwateratmsft Dockerfile.sh ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

#!/bin/sh
docker build .

์…ธ ์ฃผ์„ ๊ตฌ๋ฌธ์€ # ๊ฐ€ ์žˆ๋Š” Docker ๋ฐ Python๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋ ๊นŒ์š”?

๋‹ค๋“ค ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”? ์ €๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ์ ์ด ์กฐ๊ธˆ ๋” ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ Dockerfile.* ์ด๋ฆ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ๋Š” ๋‚˜์—๊ฒŒ ์•„์ฃผ ์‚ฌ์†Œํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@bwateratmsft ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‡ผ์ปค๋ฐ์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” dockerfile.xxx ๋ฅผ filenamePattern ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. firstLine ๋งค์น˜๋Š” ํ”Œ๋žœ B๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#comment ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ์˜ ๊ฒฝ์šฐ dockerfile๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @rcjsuen ์ด ๋งํ–ˆ๋“ฏ์ด ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋„ˆ๋ฌด ๋งŽ์€ ์œ ํ˜•์˜ ํŒŒ์ผ์„ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” dockerfile.xxx๋ฅผ filenamePattern์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ธด ๊ผฌ๋ฆฌ์ธ #1907์—์„œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ฐ’์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์œ„ 10๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์—ฌ์ „ํžˆ ์ˆ˜๋ฐฑ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„์ง Dockerfile.* ๊ฐ€ ๋งŽ์€ ๋ฌธ์ œ์ธ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด @simpleapples ์˜ ์›๋ž˜ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉํ•ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ ˆ๋Œ€์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ํ•ด๋‹น ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ด์ „์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด ๋ฌธ์ œ( Dockerfile.* ๋Š” Dockerfile์ด ์•„๋‹ˆ์ง€๋งŒ ์ธ์‹๋จ)๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” ์ด์ „ ๋ฌธ์ œ( Dockerfile.* ๊ฐ€ Dockerfile์ด์ง€๋งŒ ์ธ์‹๋˜์ง€ ์•Š์Œ)๋ณด๋‹ค ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. . ๋˜ํ•œ, ๋‚˜๋Š” ์—ฌ์ „ํžˆ dockerfile.go ๋ฐ ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ๋ฐ˜ํŒจํ„ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์›๋ž˜ ํ‹ฐ์ผ“์„ ์˜ฌ๋ ธ์„ ๋•Œ ๊ฐ„๋‹จํžˆ ๊ธฐ์—ฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค(๋ณธ์งˆ์ ์œผ๋กœ @bwateratmsft ๋ฅผ ์—์ฝ”).

์ด๋ฆ„ ๋ณ€๊ฒฝ ๋˜๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ ๋ผ์ธ์œผ๋กœ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” 1๊ฐ€์ง€ ๊ฒฝ์šฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์™„ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@simpleapples , dockerfile.go๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ„์† ์ด๋™ํ•˜๊ณ  ๋‹ค์‹œ๋Š” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋กœ ์™„๋ฒฝํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ํŒŒ์ผ ํ™•์žฅ์ž๊ฐ€ ์—†๋Š” ํŠน์ˆ˜ ํŒŒ์ผ ์œ ํ˜•์ด๊ณ  VSCode๋Š” $# filenameMatch xxx.* ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. filenameMatch .

๋”ฐ๋ผ์„œ #1908์—์„œ ๋‚˜๋จธ์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฃผ์žฅํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bwateratmsft ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ผ๋‹จ ์—ด์–ด๋‘๊ณ  ๊ณ„์† ์ƒ๊ฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์•„๋งˆ๋„ ํƒ€ํ˜‘์˜ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„ ํŒจํ„ด, ์ฒซ ๋ฒˆ์งธ ์ค„ ํŒจํ„ด ๋ฐ MIME ์œ ํ˜•์˜ ์กฐํ•ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ๊ธฐ. ejs ํŒŒ์„œ๊ฐ€ ์•„๋‹Œ Dockerfile.* ๊ทœ์น™์— ์˜ํ•ด ์„ ํƒ๋˜๋Š” Dockerfile.ejs.t ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์„ค์ • json์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

{
    "files.associations": {
        "Dockerfile.ejs.t": "ejs"
    }
}

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ด ์„ค์ •์„ ํŒ€๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜•

๋‚ด ์„ค์ • json์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

{
    "files.associations": {
        "Dockerfile.ejs.t": "ejs"
    }
}

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ด ์„ค์ •์„ ํŒ€๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜•

@TigerC10 ํ”„๋กœ์ ํŠธ์˜ .vscode/settings.json ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์—†๋‚˜์š”?

https://github.com/microsoft/vscode/issues/105590 ์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ํŠน์ • ์˜ˆ์™ธ(์˜ˆ Dockerfile.go )๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Dockerfiles _์žˆ๋Š”_ ๊ณ ์œ ํ•œ ํŒŒ์ผ ์ด๋ฆ„์˜ ์ˆ˜๋Š” ๋งŽ์•˜์ง€๋งŒ Dockerfiles _์—†๋Š”_ ์ˆ˜๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์•„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค Dockerfile.go ๊ฐ€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ํ”ํ•œ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ธ์–ด ๋ถ„๋ฅ˜ ์ •ํ™•๋„๊ฐ€ ์ƒ๋‹นํžˆ ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” dockerfile.go ๊ฐ€ Dockerfile ๋กœ ์ž˜๋ชป ์‹๋ณ„๋œ ํ›„ Change Language Mode ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ธ์–ด๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ๊ฐ€ ์™„์ „ํžˆ ์—‰๋ง์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ https://github.com/microsoft/vscode/issues/105590 ์ด ๊ฑฐ๋ถ€๋˜๋ฉด ์ด๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค. Dockerfile.* ๋ฅผ Dockerfile๋กœ ์ธ์‹ํ•˜์—ฌ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ์ „๋žต์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์œผ๋ฉด ์žฌ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@segevfiner Visual Studio Code ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@rcjsuen ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ ๊ธฐ์กด ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐ ์˜ฌ๋ฐ”๋ฅธ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•„๋Š” ์‚ฌ๋žŒ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰