WSL2+VSCode+Docker Desktop

windows10과 VSCode로 Windows상의 폴더로 작업을 하면서 Docker를 이용한 디버그 개발이 가능하게 되었으므로 설정까지의 흐름을 적어 둡니다.
windows의 환경을 개발 툴의 인스톨로 더러워지는 것이 없어져 깨끗이 해, 워크 폴더마다 개발 환경을 바꿀 수가 있게 됩니다.

WSL2를 사용하기 위해 Windows10 2004로 업그레이드(이미 Windows10 2004의 경우 건너뛰기)





Linux 커널 업데이트



PowerShell을 열고 기존 배포를 WSL2로 설정



먼저 이미 설치된 Linux 배포판을 WSL2로 설정합니다.

확인
wsl --list --verbose

변경
wsl -set-version Ubuntu*** 2



Docker Desktop을 WSL2 base engine으로 설정 (Docker Desktop이 포함되어 있지 않으면 설치)





VSCode Extension에서 "Remote Development"를 설치합니다. (Remote WSL, Remote Containers, Remote SSH 팩)





VSCode 컨테이너 구성 파일(.devcontainer/devcontainer.json)



디버그 환경 이미지의 Docker 파일을 지정하고 컨테이너에서 localhost로 전달할 포트를 지정합니다.
  • "dockerFile"로 개발 환경의 Docker 이미지를 지정한 Dockerfile
  • "forwardPorts"로 로컬로의 포트 포워드 지정

  • 아래 예제에서는 컨테이너에 localhost : 80으로 액세스 할 수 있습니다.
        // For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
        // https://github.com/microsoft/vscode-dev-containers/tree/v0.122.1/containers/docker-existing-dockerfile
        {
            "name": "Existing Dockerfile",
            // Sets the run context to one level up instead of the .devcontainer folder.
            "context": "..",
            // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
            "dockerFile": "../remotedev/Dockerfile",
            // Set *default* container specific settings.json values on container create.
            "settings": { 
                "terminal.integrated.shell.linux": null
            },
            // Add the IDs of extensions you want installed when the container is created.
            "extensions": [],
            // Use 'forwardPorts' to make a list of ports inside the container available locally.
            "forwardPorts": [80]
            // Uncomment the next line to run commands after the container is created - for example installing curl.
            // "postCreateCommand": "apt-get update && apt-get install -y curl",
            // Uncomment when using a ptrace-based debugger like C++, Go, and Rust
            // "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
            // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker.
            // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ],
            // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
            // "remoteUser": "vscode"
    }
    

    VSCode 시작 설정 (.vscode/launch.json)


    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Launch",
                "type": "go",
                "request": "launch",
                "mode": "auto",
                "program": "${workspaceRoot}",
                "env": {
                },
                "args": [],
                "buildFlags": "-tags=debug",
                "args": [],
                "showLog": true
            },
            {
                "name": "Remote",
                "type": "go",
                "request": "launch",
                "mode": "remote",
                "remotePath": "/go/src/app", 
                "program": "${workspaceRoot}",
                "env": {
                },
                "args": [],
                "buildFlags": "-tags=debug",
                "showLog": true
            }        
        ]
    }
    
    

    작업 폴더/remotedev/Dockerfile (아래 이미지는 개인 Docker 이미지 때문에 존재하지 않습니다)
    FROM golang-aws-alpine:1.13-devel
    

    프라이빗 환경에 Docker 레지스트리가 있으면 개발 환경을 라이브러리화해 갈 수 있게 되어 편리합니다.

    VSCode의 원격 탐색기에서 컨테이너 시작





    컨테이너 측의 go 확장 기능 사용



    좋은 웹페이지 즐겨찾기