μλ νμΈμ μ¬λ¬λΆ,
μ΄ νμ₯μ΄ μ»¨ν μ΄λμ λν λλ²κΉ κΈ°λ₯μ μΆκ°νλ PRμ νμ©νλμ§ μκ³ μΆμ΅λλ€...
μ²μμ μμ΄λμ΄λ (μ¬λ¬) 컨ν μ΄λμμ νΈμ€ν λλ .Net Core μ ν리μΌμ΄μ μ λλ²κ·Ένλλ‘ νλ κ²μ΄λ©° λλ²κ±°λ κ²°κ΅ μλ₯Ό λ€μ΄ node.jsμ κ°μ λ€λ₯Έ μ νμ μ ν리μΌμ΄μ μ μ§μνλλ‘ νμ₯λ μ μμ΅λλ€.
μ΄ κ²½μ° μ²μμλ .Net Core λΆλΆμμ μμ νκ³ λμ€μ λ€λ₯Έ κΈ°μ μλ₯Ό μν΄ νμ₯ν μ μμ΅λλ€.
μμ΄λμ΄λ μ°λ¦¬κ° VS2017μμ κ²½νν κ²κ³Ό μ μ¬ν κ²μ λ§λ€κ³ μ΄κΈ° λ컀 ββνμΌμ μΆκ°ν μ μλ λ컀 λꡬ(μ΄ νμ₯μ μ΄λ―Έ λ§€μ° κΈ°λ³Έμ μ)λ₯Ό λ§λ€κ³ λ컀(μμ±) νμΌμμ μ 체 μΈνλΌλ₯Ό λ§λ λ€μ 첨λΆνλ κ²μ λλ€. λλ²κ±°.
μ΄λ»κ² λ€λ¦¬λμ?
κ°μ¬ ν΄μ
@galvesribeiro PRμ μΈμ λ νμμ λλ€! μ λ VS2017 κ²½νμ μ΅μνμ§ μμΌλ―λ‘ μ΄ νμ₯ κΈ°λ₯μ κ°μ νλ λ°©λ²μ λν νΌλλ°±/μκ°μ κ΅μ₯ν κ²μ λλ€.
@lostintangentλ , λΉ λ₯Έ λ΅λ³ κ°μ¬ν©λλ€.
μ΄ κ²μλ¬Όμ μ΄ν΄λ³΄μμμ€ https://blogs.msdn.microsoft.com/webdev/2016/11/16/new-docker-tools-for-visual-studio/
Visual Studioμμ μ΄λ»κ² μλνλμ§ λ³΄μ¬μ€λλ€. κΈ°λ³Έμ μΌλ‘ νλ‘μ νΈ λλ μ루μ
μ λ§μ°μ€ μ€λ₯Έμͺ½ λ²νΌμΌλ‘ ν΄λ¦νκ³ Docker μ§μμ μΆκ°ν©λλ€. μΆκ°λλ©΄ F5 ν€λ₯Ό λλ₯΄κΈ°λ§ νλ©΄ λͺ¨λ "λ§λ²"μ΄ λ°μνκ³ λμ 컨ν
μ΄λμ λλ²κ±°κ° μ°κ²°λ©λλ€. VS2017μμλ docker-compose
μλ리μ€μμ μ€νλλ μ¬λ¬ 컨ν
μ΄λλ μ§μνλ―λ‘ λμΌν μμ± νμΌμ μ¬λ¬ 컨ν
μ΄λ λΆλΆμ λμμ λλ²κ·Έν μ μμ΅λλ€...
λ Έλμ κ²½μ° νμ₯μ μ¬μ΄νΈ λ° λλ²κ±° ν¬νΈλ₯Ό λͺ¨λ μ΄κ³ λλ²κ·Έ μ€μμΉλ‘ λ Έλλ₯Ό μ€ννλ docker-compose.debug.yml νμΌμ μμ±ν©λλ€. μ¬μ μ€ν μμ μΌλ‘ yml νμΌμμ docker-compose upμ μ€ννμ¬ λλ²κ·Έ νλ‘μΈμ€λ₯Ό μλνν μ μμΌλ©° κ·Έλ¬λ©΄ VS Codeκ° μ΄μ μ°κ²°ν μ μμ΅λλ€.
C#μ κ²½μ° λμΌν ν¨ν΄μ μ¬μ©ν μ μμ΅λλ€. μ¬λ°λ₯Έ μμ νμΌμΈ docker-compose.debug.ymlμ μμ±ν λ€μ launch.jsonμ μ°κ²°ν©λλ€.
@lostintangent μ¬κΈ°μμ λ΄ μ μ₯μλ₯Ό 보μμμ€: https://github.com/spboyer/dockerdebugapp
μ¬κΈ°μλ κΈ°λ³Έ μ΄λ―Έμ§μ μ μ ν λλ²κ·Έ μμ± μ΄λ―Έμ§κ° μμ΄ λλ²κ±°λ₯Ό VS Codeμ μ°κ²°ν©λλ€. .NET Coreμ©μΌλ‘ μ΄λ¬ν νμΌμ μμ±νλ €λ©΄ νμ₯μ λ³κ²½ν΄μΌ ν©λλ€.
μμν!
μ¬λ¬λΆ, λ°©κΈ docker-composeλ₯Ό μλ‘ μ€λͺ νμ΅λλ€. κ·νμ μ κ·Ό λ°©μμ μ루μ μ΄ μκ³ μ°κ²°ν λ¨μΌ 컨ν μ΄λκ° μλ λ¨μΌ νλ‘μ νΈμ μ ν©ν©λλ€. μμ΄λμ΄λ F5 ν€λ₯Ό λλ₯΄κ³ docker-compose νμΌ λ΄μ λͺ¨λ μλΉμ€μ λλ²κ±°λ₯Ό μ°κ²°νλ κ²μ λλ€.
μ¬λ¬ λ²μ μλμ μ€λ₯ λμ VSCodeμ κΈ°λ₯ λΆμ‘±μ μ΅μ νκΈ° μν΄ μ€ν¬λ¦½νΈ/ν΄νΉμ μμ‘΄νμ§ μλ λ λμ λ°©λ²μ μ°Ύμμ΅λλ€.
λ€μμ μ루μ
μμ€μ μν docker-compose.yml
.
version: '3.1'
services:
repository-api:
image: repository-api:debug
build:
context: ./src/QUBIX.Repository.API/bin/PublishOutput/
dockerfile: Dockerfile.debug
ports:
- "10200:10200"
environment:
- ASPNETCORE_ENVIRONMENT=Development
volumes:
- ./src/QUBIX.Repository.API/bin/PublishOutput/:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
depends_on:
- repository-silo
repository-silo:
image: repository-silo:debug
build:
context: ./src/QUBIX.Repository.Silo/bin/PublishOutput/
dockerfile: Dockerfile.debug
environment:
- QUBIX_REPOSITORY_MBR_CS
volumes:
- ./src/QUBIX.Repository.Silo/bin/PublishOutput/:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
repository-reader-silo:
image: repository-reader-silo:debug
build:
context: ./src/QUBIX.Repository.Reader.Silo/bin/PublishOutput/
dockerfile: Dockerfile.debug
environment:
- QUBIX_REPOSITORY_READER_MBR_CS
- QUBIX_REPOSITORY_READER_DOCDB_EP
- QUBIX_REPOSITORY_READER_DOCDB_KEY
volumes:
- ./src/QUBIX.Repository.Reader.Silo/bin/PublishOutput/:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
Dockerfile.debug
.
FROM microsoft/dotnet:1.1-sdk-msbuild
ENV NUGET_XMLDOC_MODE=skip
ARG CLRDBG_VERSION=VS2015U2
WORKDIR /clrdbg
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
unzip \
&& rm -rf /var/lib/apt/lists/* \
&& curl -SL https://raw.githubusercontent.com/Microsoft/MIEngine/getclrdbg-release/scripts/GetClrDbg.sh --output GetClrDbg.sh \
&& chmod 700 GetClrDbg.sh \
&& ./GetClrDbg.sh $CLRDBG_VERSION \
&& rm GetClrDbg.sh
WORKDIR /app
ENTRYPOINT ["tail", "-f", "/dev/null"]
μ¬λ¬ μλΉμ€κ° μμ§λ§ κ·Έ μ€ μ΄λ κ²λ λλ²κ±° ν¬νΈκ° μ΄λ € μμ§ μμ΅λλ€. DockerFile.debug
κΈ°λ³Έμ μΌλ‘ 컨ν
μ΄λλ₯Ό μμνκ³ μ§μ
μ μ μ’
λ£ μμ΄ κ·Έλλ‘ μ μ§ν©λλ€. λν λ€μ΄λ‘λ getclrdbg.sh
ν©λλ€ (ν¬ν¨ν΄μΌ κ·Έλ, λ΄κ° κ·Έλ¬Ό ν΅μ¬ SDK λͺ¨λ Windows λ° Linux 컨ν
μ΄λλ₯Ό μκ° λλ²κ±°λ₯Ό μ€μΉνλ €λ©΄ clrdbg
). λ³Όλ₯¨μ /app
μ νλ‘μ νΈ μΆλ ₯ ν΄λμ 맀νλκ³ docker-composeμ μ λ¬λ©λλ€.
ν루μ ν λ² νλ‘μ νΈ μμ
μ μμν λ μ루μ
λλ ν 리μ docker-compose up -d
ν°λ―Έλμ μ½λλ€. ENV vars, μ΄λ―Έμ§ λ±κ³Ό κ°μ΄ 컨ν
μ΄λ μ체μμ 무μΈκ°λ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ°κ° μλλ©΄ 컨ν
μ΄λλ₯Ό λ νμκ° μμ΅λλ€. κ·Έλ μ§ μμΌλ©΄ μ 체 μμ± νλ‘μ νΈκ° νμ μΌμ Έ μμ΄μΌ ν©λλ€. (μ²μμ΄λΌλ©΄ docker-compose build
λ₯Ό μ€ννμ¬ μ΄λ―Έμ§λ₯Ό λΉλν©λλ€.)
λͺ¨λ 컨ν μ΄λκ° μ€ν μ€μ΄λ©΄ 컨ν μ΄λλ₯Ό λλ²κ·Ένλλ‘ VSCodeλ₯Ό ꡬμ±ν΄μΌ ν©λλ€.
μ΄κ²μ λ΄ tasks.json
.
{
"version": "0.1.0",
"isShellCommand": true,
"command": "dotnet",
"args":[],
"tasks": [
{
"taskName": "publish",
"args": [
"${workspaceRoot}/QUBIX-Repository.sln", "-c", "Debug", "-o", "bin/PublishOutput"
],
"isBuildCommand": true,
"problemMatcher": "$msCompile"
}
]
}
build
λμ publish
μμ΅λλ€. κ·Έ μ΄μ λ .Net Core λΉλκ° λͺ¨λ μ’
μμ±μ μΆλ ₯ ν΄λμ λ£μ§ μκΈ° λλ¬Έμ
λλ€. λ°λΌμ clrdbg
컨ν
μ΄λ λ΄λΆμμλ μμ² μ μ°Έμ‘°λ μ΄μ
λΈλ¦¬λ₯Ό μ°Ύμ μ μμ΅λλ€.
μ΄μ μ΄κ²μ λ΄ launch.json
.
{
"version": "0.2.0",
"configurations": [
{
"name": "Repository-Silo",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/QUBIX.Repository.Silo.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/QUBIX.Repository.Silo"
},
"pipeTransport": {
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i qubixrepository_repository-silo_1 /clrdbg/clrdbg --interpreter=mi"
]
}
},
{
"name": "Repository-API",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/QUBIX.Repository.API.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/QUBIX.Repository.API"
},
"pipeTransport": {
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i qubixrepository_repository-api_1 /clrdbg/clrdbg --interpreter=mi"
]
}
},
{
"name": "Repository-Reader-Silo",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/QUBIX.Repository.Reader.Silo.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/QUBIX.Repository.Reader.Silo"
},
"pipeTransport": {
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i qubixrepository_repository-reader-silo_1 /clrdbg/clrdbg --interpreter=mi"
]
}
},
{
"name": "Repository-Reader-API",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/QUBIX.Repository.Reader.API.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/QUBIX.Repository.Reader.API"
},
"pipeTransport": {
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i qubixrepository_repository-reader-api_1 /clrdbg/clrdbg --interpreter=mi"
]
}
}
]
}
μ§κΈ μ¬κΈ°μμ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μμ΅λκΉ? publishOutputμ΄ μ»¨ν
μ΄λμ /app
μ 맀νλλ€λ κ²μ κΈ°μ΅νμλκΉ? λ°λΌμ docker-compose.yml
μ μλ κ° μλΉμ€/νλ‘μ νΈμ λν΄ μμ ꡬμ±μ΄ μμ΅λλ€. μ΄ μμ ꡬμ±μ΄ νλ μΌμ docker exec
λ₯Ό ν΄λΉ μλΉμ€μ 컨ν
μ΄λλ‘ νΈμΆνκ³ clrdbg
νΈμΆνλ κ²μ
λλ€. μ΄λ₯Ό μ¬μ©νμ¬ μ»¨ν
μ΄λ λ΄λΆμ μ격 λλ²κ±°μ λλ²κ±°κ° λ μ ν리μΌμ΄μ
( /app
맀νλ¨)μ μμνκ³ μ»΄ν¨ν°μμ .Net Core λλ²κ±°λ₯Ό λ§λ€μ΄ μ¬κΈ°μ μ°κ²°ν μ μμ΅λλ€. dllμ λλ²κ±° λ΄λΆμ μ격μΌλ‘ λ°°ν¬λκΈ° λλ¬Έμ μμ€ λ§΅ 맀κ°λ³μλ μμ€κ° μ΄λμ μλμ§ λλ²κ±°μ μλ €μ€λλ€.
μ΄λ° μμΌλ‘ λλ²κ±° μΈμ
μμ μ€μ§λ₯Ό λλ₯΄λ©΄ μ’
λ£λλ λͺ
λ Ήμ μ 체 컨ν
μ΄λ μμ²΄κ° μλλΌ μ격 λλ²κ±°μ μ ν리μΌμ΄μ
μ μμν docker exec
μ
λλ€. F5 ν€λ₯Ό λλ₯Ό λλ§λ€ 컨ν
μ΄λλ₯Ό κ³μ λ€μ λΉλνλ κ²λ³΄λ€ ν¨μ¬ λΉ λ₯΄κ² λ°λ³΅ν μ μμ΅λλ€.
_μΈλΆ μ€ν¬λ¦½νΈλ νμ₯ κΈ°λ₯μ΄ μ ν μλ€λ μ μ μ μνμΈμ. VSCode, C# νμ₯ λ° Docker μ€μΉλ§ μμΌλ©΄ λ©λλ€._
μλ²½νκ² μλν©λλ€! π:λ°°μ‘:
μ΄μ λ¨μ π
docker exec
λ₯Ό μ¬μ©νμ¬ μλΉμ€ λ΄μ νΉμ 컨ν
μ΄λλ₯Ό μ§μ λμμΌλ‘ μ§μ ν©λλ€(μ qubixrepository_repository-reader-api_1
λ§μ§λ§ νλͺ©μ compound
μμ ꡬμ±μ μλνμ§ μμΌλ©° μλνλλΌλ docker-compose
μ’
μμ± μ²΄μΈμ μ μΈνλ depends_on
λ₯Ό μ‘΄μ€νμ§ μμΌλ―λ‘ νλμ μλΉμ€κ° μμλκΈ° μ μ μμν μ μμ΅λλ€. μ’
μμ±).μνλ κ²½ν:
docker-compose.yml
νμΌμ λ§λ€κ³ νμμ κ°μ΄ μ΄λ―Έμ§μ μλΉμ€λ₯Ό μ€λͺ
ν©λλ€.dotnet build
λ μ루μ
μμ€μμ λ°μdocker-compose
μ
λ°μ΄νΈκ° μλμ§ νμΈνκ³ μ
λ°μ΄νΈκ° μκ³ μλΉμ€κ° μ€ν μ€μ΄λ©΄ 무μνκ³ μ€ννμ§ λ§μμμ€. κ·Έλ μ§ μμΌλ©΄ docker-compose build
λ° docker-compose up
κ° νΈμΆλ©λλ€.docker-compose ps
λ ꡬμ±λ λͺ¨λ νλ‘μ νΈμ λͺ¨λ 컨ν
μ΄λλ₯Ό κ°μ Έμ€κ³ κ° νλ‘μ νΈμ λλ²κ±°λ₯Ό μ°κ²°ν©λλ€.λ§μ΄ λλμ μ¬λ¬λΆ? μ°λ¦¬λ μ΄λ»κ² κ·Έ κ²½νμ λ¬μ±ν μ μμ΅λκΉ?
κ°μ¬ ν΄μ!
@galvesribeiro
λ€μ€ μλΉμ€ λλ²κΉ
μ λ§€μ° μ μ©ν©λλ€. μμ μ½λκ° μμ΅λκΉ?
@Shawn-Fan λ€μ€ μλΉμ€λ λΆννλ κΈ°λ³Έμ μΌλ‘ λλ²κ±°μμ μ§μνμ§ μλ κ²μ λλ€. λμΌν μλΉμ€μ λ€μ€ μΈμ€ν΄μ€λ λ§μ°¬κ°μ§μ λλ€(μ§μ μΌλ‘ λΆμ°λ μμ© νλ‘κ·Έλ¨μμ λ§€μ° μ μ©ν¨).
μ΄ λ¬Έμ μ λ΄ λ¨κ³λ₯Ό λ°λ₯΄λ©΄ docker-compose up -d
μμ λͺ¨λ λλ²κ·Έ 컨ν
μ΄λλ₯Ό μμν λ€μ κ° μλΉμ€μ λν΄ VSμ λλ²κ·Έ μΉμ
μμ κ° λλ²κ±°λ₯Ό μ€νν μ μμ΅λλ€.
λλ μ¬μ ν MSFTλ₯Ό μ¬μ©νμ¬ μ¦μ μ¬μ© κ°λ₯ν μ¬λ¬ μλΉμ€μ μ¬λ¬ μΈμ€ν΄μ€μ λλ²κ±°λ₯Ό μ°κ²°ν μ μμ΄μΌ νλ€κ³ μκ°ν©λλ€. λ΄κ° ν κ²μ λλ²κ±° μ νμ ν΄κ²°νκΈ° μν ν΄νΉμ΄μμ΅λλ€.
@galvesribeiro
λ§μ λμμ μ£Όμ
μ κ°μ¬ν©λλ€. λ¦κ²λΌλ κ°λ³Όκ²......
Windowsμ© VS 2017μ κ½€ μ μλνμ§λ§ Macμμ Visual Studio μ½λλ₯Ό μ¬μ©νμ¬ Dockerμμ μμ
νλ €κ³ ν©λλ€(Macμ© Visual Studioλ VS 2017μμ μ μλνκΈ°λ₯Ό λ°λλλ€).
VS2017κ³Ό Macμ© VS λͺ¨λ Docker λλ²κΉ κ²½νκ³Ό κ΄λ ¨νμ¬ VSCodeμ λμΌν μ νμ΄ μμ΅λλ€...
λ¨Όμ μ¬κΈ°μμ 곡μ ν μμΈν μ 보μ λν΄ @galvesribeiro μκ² κ°μ¬λ립λλ€. μ λ§ λμμ΄ λμμ΅λλ€.
vscodeμμ aspnetcore 2.0μ λλ²κ·Ένλ €λ μ¬λλ€μ μν΄ Dockerfile + launch.jsonμ μ½κ°λ§ μμ ν΄μΌ νμ΅λλ€.
μ€μ: <> μ¬μ΄μ λͺ¨λ νλͺ©μ μ±μ λ°μ΄ν°λ‘ μ±μμΌ ν©λλ€.
{
"version": "0.2.0",
"configurations": [
{
"name": "<Just_Another_Name_For_Your_Launch_Conf>",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "publish",
"cwd": "/app",
"program": "/app/<Your_AppName_Here>.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/<your_project_folder_here>"
},
"pipeTransport": {
"pipeProgram": "docker",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"exec -i <your_containername_here>"
],
"quoteArgs": false,
"debuggerPath": "/vsdbg/vsdbg"
}
}
]
}
μ¦κ±°μ΄ λλ²κΉ !
@galvesribeiro - νλ₯ν μμ , 곡μ ν΄ μ£Όμ μ κ°μ¬ν©λλ€. μ°μ°ν μλΉμ€ νλ‘μ νΈ μ€ νλμ μμ Dockerfileμ΄ μμ΅λκΉ? μ μ₯μ API
κ°μ¬ ν΄μ
νμ
@mmacneil κ°μ¬ν©λλ€. λλ²κ·Έ μ΄λ―Έμ§λ μ¬κΈ°μ κ²μν μ΄λ―Έμ§μ
λλ€. λ°νμ μ΄λ―Έμ§λ λ³Έμ§μ μΌλ‘ microsoft/dotnet λ°νμ μ μ© μ΄λ―Έμ§μμ μμλ λΉ μ΄λ―Έμ§μ΄λ©° μ§μ
μ μ λ©μ§ νλͺ© μμ΄ dotnet myProject.dll
μ
λλ€.
κ°μ¬ν©λλ€ @galvesribeiro , κ·Έκ²μ μλ―Έκ° μμ΅λλ€. λλ λ€λ₯Έ κ³³μμ μΈκΈν κ²μ²λΌ Dockerfile.debugμ λ°νμ μ΄λ―Έμ§λ₯Ό λ³ν©νκ³ μλ€κ³ μκ°νμ§λ§ μ΄ κ²½μ° λλ²κ·Έ λ° λ°νμμ μν 2κ°μ λ³λ 컨ν μ΄λκ° μμμ μ μ μμ΅λλ€.
@philiphoff κ°
@galvesribeiro μ£μ‘ν©λλ€. μ κ° μ‘°κΈ μμκ° κ² κ°μ΅λλ€. PRμ΄ master
λ³ν©λμμ§λ§ μμ§ λ¦΄λ¦¬μ€λμ§ μμμ΅λλ€.
μ λ©μ§λ€. μ μ΄λ Insiders λΉλμμλ 곧 μ μ©λκΈ°λ₯Ό λ°λλλ€. λ΄ λ°κ²¬μ λ€μ λ³΄κ³ ν κ²μ λλ€. κ°μ¬ ν΄μ!
iOSμ© Outlook λ€μ΄λ‘λ https://aka.ms/o0ukef
λ³΄λΈ μ¬λ: ν립 νΈν μλ¦Ό @github.com
λ³΄λΈ λ μ§: 2018λ
10μ 19μΌ κΈμμΌ μ€ν 6:07:29
λ°λ μ¬λ: Microsoft/vscode-docker
μ°Έμ‘°: Gutemberg Ribeiro; μΈκΈνλ€
μ λͺ©: Re: [Microsoft/vscode-docker] λλ²κ·Έ 컨ν
μ΄λ(#56)
@galvesribeiro https://github.com/galvesribeiro μ£μ‘ν©λλ€. μ κ° μ‘°κΈ μμκ° κ² κ°μ΅λλ€. PRμ΄ λ§μ€ν°μ λ³ν©λμμ§λ§ μμ§ λ¦΄λ¦¬μ€λμ§ μμμ΅λλ€.
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ
λλ€.
μ΄ μ΄λ©μΌμ μ§μ νμ νκ±°λ GitHub https://github.com/Microsoft/vscode-docker/issues/56#issuecomment-431499291 μμ νμΈνκ±°λ μ€λ λ https://github.com/notifications/unsubscribe-auth/λ₯Ό μμκ±°ν©λλ€.
@galvesribeiro , PR #500μ λ°λΌ μ΄ λ²κ·Έλ₯Ό μ’ λ£ν©λλ€. λ¬Έμ κ° λ°μνλ©΄ μ λ²κ·Έλ₯Ό μ κ³ νμΈμ. :-)
λ©μ§ @PrashanthCorp μ½μν λλ‘ ν μ€νΈν μκ°μ΄ μμμ΅λλ€. VSCodeμ λ¦΄λ¦¬μ€ λΉλλ‘ κ°λ κΈΈμ μ°Ύμμ΅λκΉ? κ·Έκ²μ μ μ νκ² μ¬μ©νλ λ°©λ²μ λν λ¬Έμ/κ°μ΄λκ° μμΌλ©° 무μμ κΈ°λν΄μΌ ν©λκΉ?
κ°μ¬ ν΄μ!
@galvesribeiro https://github.com/Microsoft/vscode-docker#debugging -net-core-previewλ₯Ό μ΄ν΄λ³΄μΈμ. κ°μ¬ν©λλ€!
cc @ννΈν
@StephenWeatherford κ°μ¬
λ°©κΈ λ³΄μμ§λ§ ... κ·Έλ¬λ μ¬μ ν λ¨μΌ 컨ν μ΄λ λλ²κ·Έμμ μ΄λ €μμ κ²ͺκ³ μμ΅λλ€. ( μμ± λλ kubernetes μ§μ μμ ...
κ°μ₯ μ μ©ν λκΈ
μ¬λ¬λΆ, λ°©κΈ docker-composeλ₯Ό μλ‘ μ€λͺ νμ΅λλ€. κ·νμ μ κ·Ό λ°©μμ μ루μ μ΄ μκ³ μ°κ²°ν λ¨μΌ 컨ν μ΄λκ° μλ λ¨μΌ νλ‘μ νΈμ μ ν©ν©λλ€. μμ΄λμ΄λ F5 ν€λ₯Ό λλ₯΄κ³ docker-compose νμΌ λ΄μ λͺ¨λ μλΉμ€μ λλ²κ±°λ₯Ό μ°κ²°νλ κ²μ λλ€.
μ¬λ¬ λ²μ μλμ μ€λ₯ λμ VSCodeμ κΈ°λ₯ λΆμ‘±μ μ΅μ νκΈ° μν΄ μ€ν¬λ¦½νΈ/ν΄νΉμ μμ‘΄νμ§ μλ λ λμ λ°©λ²μ μ°Ύμμ΅λλ€.
λ€μμ μ루μ μμ€μ μν
docker-compose.yml
.Dockerfile.debug
.μ¬λ¬ μλΉμ€κ° μμ§λ§ κ·Έ μ€ μ΄λ κ²λ λλ²κ±° ν¬νΈκ° μ΄λ € μμ§ μμ΅λλ€.
DockerFile.debug
κΈ°λ³Έμ μΌλ‘ 컨ν μ΄λλ₯Ό μμνκ³ μ§μ μ μ μ’ λ£ μμ΄ κ·Έλλ‘ μ μ§ν©λλ€. λν λ€μ΄λ‘λgetclrdbg.sh
ν©λλ€ (ν¬ν¨ν΄μΌ κ·Έλ, λ΄κ° κ·Έλ¬Ό ν΅μ¬ SDK λͺ¨λ Windows λ° Linux 컨ν μ΄λλ₯Ό μκ° λλ²κ±°λ₯Ό μ€μΉνλ €λ©΄clrdbg
). λ³Όλ₯¨μ/app
μ νλ‘μ νΈ μΆλ ₯ ν΄λμ 맀νλκ³ docker-composeμ μ λ¬λ©λλ€.ν루μ ν λ² νλ‘μ νΈ μμ μ μμν λ μ루μ λλ ν 리μ
docker-compose up -d
ν°λ―Έλμ μ½λλ€. ENV vars, μ΄λ―Έμ§ λ±κ³Ό κ°μ΄ 컨ν μ΄λ μ체μμ 무μΈκ°λ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ°κ° μλλ©΄ 컨ν μ΄λλ₯Ό λ νμκ° μμ΅λλ€. κ·Έλ μ§ μμΌλ©΄ μ 체 μμ± νλ‘μ νΈκ° νμ μΌμ Έ μμ΄μΌ ν©λλ€. (μ²μμ΄λΌλ©΄docker-compose build
λ₯Ό μ€ννμ¬ μ΄λ―Έμ§λ₯Ό λΉλν©λλ€.)λͺ¨λ 컨ν μ΄λκ° μ€ν μ€μ΄λ©΄ 컨ν μ΄λλ₯Ό λλ²κ·Ένλλ‘ VSCodeλ₯Ό ꡬμ±ν΄μΌ ν©λλ€.
μ΄κ²μ λ΄
tasks.json
.build
λμpublish
μμ΅λλ€. κ·Έ μ΄μ λ .Net Core λΉλκ° λͺ¨λ μ’ μμ±μ μΆλ ₯ ν΄λμ λ£μ§ μκΈ° λλ¬Έμ λλ€. λ°λΌμclrdbg
컨ν μ΄λ λ΄λΆμμλ μμ² μ μ°Έμ‘°λ μ΄μ λΈλ¦¬λ₯Ό μ°Ύμ μ μμ΅λλ€.μ΄μ μ΄κ²μ λ΄
launch.json
.μ§κΈ μ¬κΈ°μμ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μμ΅λκΉ? publishOutputμ΄ μ»¨ν μ΄λμ
/app
μ 맀νλλ€λ κ²μ κΈ°μ΅νμλκΉ? λ°λΌμdocker-compose.yml
μ μλ κ° μλΉμ€/νλ‘μ νΈμ λν΄ μμ ꡬμ±μ΄ μμ΅λλ€. μ΄ μμ ꡬμ±μ΄ νλ μΌμdocker exec
λ₯Ό ν΄λΉ μλΉμ€μ 컨ν μ΄λλ‘ νΈμΆνκ³clrdbg
νΈμΆνλ κ²μ λλ€. μ΄λ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λ λ΄λΆμ μ격 λλ²κ±°μ λλ²κ±°κ° λ μ ν리μΌμ΄μ (/app
맀νλ¨)μ μμνκ³ μ»΄ν¨ν°μμ .Net Core λλ²κ±°λ₯Ό λ§λ€μ΄ μ¬κΈ°μ μ°κ²°ν μ μμ΅λλ€. dllμ λλ²κ±° λ΄λΆμ μ격μΌλ‘ λ°°ν¬λκΈ° λλ¬Έμ μμ€ λ§΅ 맀κ°λ³μλ μμ€κ° μ΄λμ μλμ§ λλ²κ±°μ μλ €μ€λλ€.μ΄λ° μμΌλ‘ λλ²κ±° μΈμ μμ μ€μ§λ₯Ό λλ₯΄λ©΄ μ’ λ£λλ λͺ λ Ήμ μ 체 컨ν μ΄λ μμ²΄κ° μλλΌ μ격 λλ²κ±°μ μ ν리μΌμ΄μ μ μμν
docker exec
μ λλ€. F5 ν€λ₯Ό λλ₯Ό λλ§λ€ 컨ν μ΄λλ₯Ό κ³μ λ€μ λΉλνλ κ²λ³΄λ€ ν¨μ¬ λΉ λ₯΄κ² λ°λ³΅ν μ μμ΅λλ€._μΈλΆ μ€ν¬λ¦½νΈλ νμ₯ κΈ°λ₯μ΄ μ ν μλ€λ μ μ μ μνμΈμ. VSCode, C# νμ₯ λ° Docker μ€μΉλ§ μμΌλ©΄ λ©λλ€._
μλ²½νκ² μλν©λλ€! π:λ°°μ‘:
μ΄μ λ¨μ π
docker exec
λ₯Ό μ¬μ©νμ¬ μλΉμ€ λ΄μ νΉμ 컨ν μ΄λλ₯Ό μ§μ λμμΌλ‘ μ§μ ν©λλ€(μqubixrepository_repository-reader-api_1
λ§μ§λ§ νλͺ©μcompound
μμ ꡬμ±μ μλνμ§ μμΌλ©° μλνλλΌλdocker-compose
μ’ μμ± μ²΄μΈμ μ μΈνλdepends_on
λ₯Ό μ‘΄μ€νμ§ μμΌλ―λ‘ νλμ μλΉμ€κ° μμλκΈ° μ μ μμν μ μμ΅λλ€. μ’ μμ±).μνλ κ²½ν:
docker-compose.yml
νμΌμ λ§λ€κ³ νμμ κ°μ΄ μ΄λ―Έμ§μ μλΉμ€λ₯Ό μ€λͺ ν©λλ€.dotnet build
λ μ루μ μμ€μμ λ°μdocker-compose
μ λ°μ΄νΈκ° μλμ§ νμΈνκ³ μ λ°μ΄νΈκ° μκ³ μλΉμ€κ° μ€ν μ€μ΄λ©΄ 무μνκ³ μ€ννμ§ λ§μμμ€. κ·Έλ μ§ μμΌλ©΄docker-compose build
λ°docker-compose up
κ° νΈμΆλ©λλ€.docker-compose ps
λ ꡬμ±λ λͺ¨λ νλ‘μ νΈμ λͺ¨λ 컨ν μ΄λλ₯Ό κ°μ Έμ€κ³ κ° νλ‘μ νΈμ λλ²κ±°λ₯Ό μ°κ²°ν©λλ€.λ§μ΄ λλμ μ¬λ¬λΆ? μ°λ¦¬λ μ΄λ»κ² κ·Έ κ²½νμ λ¬μ±ν μ μμ΅λκΉ?
κ°μ¬ ν΄μ!