(자신 용) docker + code-server, cloud9에서 C# 환경 만들기

소개



이 기사 의 계속 같은 느낌입니다.
docker로 code-server를 구축하고 거기에서 C# 환경을 만들 수 있는지 시도해 보겠습니다.

code-server_1



다음과 같은 디렉토리를 만듭니다.
ls
> Dockerfile  code-server  docker-compose.yml  projects

Dockerfile과 docker-compose.yml은 이런 느낌입니다.
공식 docker-image를 사용하여 거기에 .net core를 install하고 있습니다.

Dockerfile

Dockerfile
FROM codercom/code-server:3.8.0

USER root

# Install wget and other module
RUN apt-get update && apt-get install -y \
    wget

# Install code-server plugin
# ※commandからのextension installは効かない?
RUN code-server --install-extension ms-dotnettools.csharp

# Install .NET5
ENV DOTNET_ROOT=/usr/share/dotnet
ENV PATH=/usr/share/dotnet:/root/.dotnet/tools:$PATH
# 以下の環境変数を変える必要あり
# 詳細1: https://github.com/dotnet/core/issues/2186
# 詳細2: https://github.com/dotnet/core/blob/master/Documentation/build-and-install-rhel6-prerequisites.md
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true

RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/a0487784-534a-4912-a4dd-017382083865/be16057043a8f7b6f08c902dc48dd677/dotnet-sdk-5.0.101-linux-x64.tar.gz \
    && wget -O dotnet_runtime.tar.gz https://download.visualstudio.microsoft.com/download/pr/6bea1cea-89e8-4bf7-9fc1-f77380443db1/0fb741b7d587cce798ebee80732196ef/aspnetcore-runtime-5.0.1-linux-x64.tar.gz \
    && dotnet_sha512='398d88099d765b8f5b920a3a2607c2d2d8a946786c1a3e51e73af1e663f0ee770b2b624a630b1bec1ceed43628ea8bc97963ba6c870d42bec064bde1cd1c9edb' \
    && echo "$dotnet_sha512  dotnet.tar.gz" | sha512sum -c - \
    && dotnet_runtime_sha512='fec655aed2e73288e84d940fd356b596e266a3e74c37d9006674c4f923fb7cde5eafe30b7dcb43251528166c02724df5856e7174f1a46fc33036b0f8db92688a' \
    && echo "$dotnet_runtime_sha512  dotnet_runtime.tar.gz" | sha512sum -c - \
    && mkdir -p "/usr/share/dotnet" \
    && mkdir -p "/usr/bin/dotnet" \
    && mkdir -p "/root/.dotnet/tools" \
    && tar zxf dotnet.tar.gz -C "/usr/share/dotnet" \
    && rm dotnet.tar.gz \
    && tar zxf dotnet_runtime.tar.gz -C "/usr/share/dotnet" \
    && rm dotnet_runtime.tar.gz \
    && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
    && dotnet help

USER coder



docker-compose.yml

docker-compose.yml
version: "3"
services:
  code:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      PUID: 1000
      PGID: 1000
      PASSWORD: password
    ports:
      - 20000:8080
    volumes:
      - ./projects:/home/coder/project
      - ./code-server:/home/coder/.local/share/code-server



시작합니다.
docker-compose up -d --build

URL에 액세스합니다.


Dockerfile의이 명령으로 C# 확장을 넣으려고합니다.
아무것도 들어 있지 않은 것 같아? 입니다.
터미널에서처럼 명령을 두드려도 UI에게 반영되지 않았습니다.
RUN code-server --install-extensions ms-dotnettools.csharp

어쩔 수 없기 때문에 확장 기능은 수동으로 넣습니다.
주였던 3개를 넣어 보았습니다.


적당한 프로젝트를 만들어 보겠습니다.
dotnet new console -o tutorial
ls
> Program.cs  tutorial.csproj

tutorial 폴더 아래에 파일을 추가합니다.
C# extensions를 사용할 수 있을 것 같은 분위기가 있습니다만 파일의 생성은 해 주지 않았습니다.


어쩔 수 없기 때문에 통상의 파일 작성으로 이름을 Calc.cs 로 합니다.
Program.cs와 Calc.cs를 다음 내용으로 만듭니다.

Calc.cs

Calc.cs
using System;

namespace tutorial2
{
    class Calc
    {
        public static double Add(double a, double b)
        {
            return a + b;
        }
    }
}




Program.cs

Program.cs
using System;
using tutorial2;

namespace tutorial
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var ret = Calc.Add(1, 3);
            Console.WriteLine($"Cal Result is {ret}");
        }
    }
}



터미널에서 실행해 봅니다.

실행할 수 있었습니다.

디버깅은 어떻습니까?
launch.json에 .Net Core Launch를 지정하고 중단 점을 두고 실행해보십시오.

??? 다음과 같은 오류가 DEBUG CONSOLE에 표시됩니다.


이 URL 를 살펴보면 디버거는 Microsoft의 IDE가 아니면 작동하지 않는 라이센스가 되어 있는 것 같습니다.
code-server에서의 issue 에도 거론되고 있어 자체 디버거? 로 하는 방법 밖에 없는 것 같습니다. . .
issue도 라이센스의 문제에 의해 표준 디버거는 사용할 수 없다고 하는 것으로 닫혀 있었습니다.

code-server_2


linuxserver/code-server 에 DotNetCore를 넣어 유지하는 쪽이 만들었다
이미지 가 있었으므로 그쪽도 타고 둡니다.
git clone https://github.com/ptr727/VSCode-Server-DotNetCore.git
cd VSCode-Server-DotnetCore
docker-compose up -d # 起動

cloud9



덤으로 cloud9에서도 시도해 보겠습니다.

Dockerfile과 docker-compose.yml은 이런 느낌입니다.linuxserver/cloud9 에 DotNetCore를 넣는 형태로 해 보았습니다.

Dockerfile

Dockerfile
FROM linuxserver/cloud9:version-1.27.4

RUN mkdir -p /code/projects

# Install wget
RUN apt-get update \
    # Install wget
    && apt-get install -y wget

# Install .NET5
ENV DOTNET_ROOT=/usr/share/dotnet
ENV PATH=/usr/share/dotnet:/root/.dotnet/tools:$PATH
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true

RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/a0487784-534a-4912-a4dd-017382083865/be16057043a8f7b6f08c902dc48dd677/dotnet-sdk-5.0.101-linux-x64.tar.gz \
    && wget -O dotnet_runtime.tar.gz https://download.visualstudio.microsoft.com/download/pr/6bea1cea-89e8-4bf7-9fc1-f77380443db1/0fb741b7d587cce798ebee80732196ef/aspnetcore-runtime-5.0.1-linux-x64.tar.gz \
    && dotnet_sha512='398d88099d765b8f5b920a3a2607c2d2d8a946786c1a3e51e73af1e663f0ee770b2b624a630b1bec1ceed43628ea8bc97963ba6c870d42bec064bde1cd1c9edb' \
    && echo "$dotnet_sha512  dotnet.tar.gz" | sha512sum -c - \
    && dotnet_runtime_sha512='fec655aed2e73288e84d940fd356b596e266a3e74c37d9006674c4f923fb7cde5eafe30b7dcb43251528166c02724df5856e7174f1a46fc33036b0f8db92688a' \
    && echo "$dotnet_runtime_sha512  dotnet_runtime.tar.gz" | sha512sum -c - \
    && mkdir -p "/usr/share/dotnet" \
    && mkdir -p "/usr/bin/dotnet" \
    && mkdir -p "/root/.dotnet/tools" \
    && tar zxf dotnet.tar.gz -C "/usr/share/dotnet" \
    && rm dotnet.tar.gz \
    && tar zxf dotnet_runtime.tar.gz -C "/usr/share/dotnet" \
    && rm dotnet_runtime.tar.gz \
    && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
    && dotnet help



docker-compose.yml

docker-compose.yml
version: "3"
services:
  code:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
      - GITURL=https://github.com/linuxserver/docker-cloud9.git #optional
      - USERNAME=user #optional
      - PASSWORD=password #optional
    ports:
      - 50000:8000
    volumes:
      - ./projects:/code/projects
      - ./docker.sock:/var/run/docker.sock #optional




URL에 액세스합니다.


code-server 마찬가지로 적당한 프로젝트를 터미널에서 만들어 시험해 봅니다.
할애합니다만, code-server 처럼 dotnet run 까지 제대로 할 수 있었습니다.
cloud9는 인텔리센스나 히스토리가 제대로 효과가 있기 때문에 좋네요.

디버깅은 어떻습니까?
브레이크 포인트는 둘 수 있지만 Runner를 어떻게 만들지 모르겠다고 단념했습니다. . .

AWS Cloud9 쪽이라고 할 수 있는 것 같습니다만 이쪽이면 어떨까요?

결론



web-ide 자체는 유용하고 편리하다고 생각합니다.
구축 후에도 주변 지식이 필요하거나 확장 기능이 잘 되지 않는 등으로 본격적인 개발은 아직 어려울 것 같은 인상을 받았습니다.
보다 레벨이 높은 사람이라고 할 수 있겠지만 나에서는 조금. . .
현재는 어른스럽고 windows+visual studio에서 C# 개발을 하는 것이 역시 무난할까요?
다만, docker+code-server or cloud9로 python라든지의 기사는 얼마 안되어 있으므로 그쪽이라면 문제 없게 사용할 수 있을까요.
마음이 가면 python + α로 시도하고 싶었습니다.

좋은 웹페이지 즐겨찾기