1
3

More than 3 years have passed since last update.

(自分用)docker+code-server、cloud9でC#環境作ってみる

Posted at

はじめに

この記事の続きみたいな感じです。
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にアクセスします。
image.png

DockerfileのこのコマンドでC#の拡張機能を入れたつもりなのですが
どうも入っていないみたい?です。
ターミナルから同じようにコマンドを叩いてもUIの方には反映されませんでした。

RUN code-server --install-extensions ms-dotnettools.csharp

仕方ないので拡張機能は手動で入れます。
主だった3つを入れてみました。
image.png

適当なプロジェクトを作ってみます。

dotnet new console -o tutorial
ls
> Program.cs  tutorial.csproj

tutorialフォルダ以下にファイルを追加します。
C# extensionsが使えそうな雰囲気があるのですがファイルの生成はしてくれませんでした。
image.png

仕方ないので通常のファイル作成で名前を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}");
        }
    }
}

ターミナルから実行してみます。
image.png
実行できました。

デバッグはどうでしょうか?
launch.jsonに.Net Core Launchを指定し、ブレークポイントを置いて実行してみます。

???以下のようなエラーがDEBUG CONSOLEに表示されます。
image.png

このURLを見てみると、デバッガーはMicrosoftのIDEでないと動作しないライセンスになっているみたいです。
code-serverでのissueにも挙がっていて独自デバッガー?でやる方法しかないみたいです。。。
issueもライセンスの問題により標準デバッガーは使えないという事で閉じられていました。

code-server_2

linuxserver/code-serverにDotNetCoreを入れて有志の方が作った
imageがあったのでそっちも乗っけておきます。

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にアクセスします。
image.png

code-server同様に適当なプロジェクトをターミナルから作って試します。
割愛しますが、code-server同様dotnet runまでちゃんとできました。
cloud9はインテリセンスやヒストリーがちゃんと効くのでいいですね。

デバッグはどうでしょうか?
ブレークポイントは置けますがRunnerをどう作るのかわからず断念しました。。。
image.png
AWS Cloud9の方だとできるみたいですがこっちだとどうなのでしょうね?

結論

web-ide自体は有用で便利だと思いますが
構築後にも周辺知識が必要だったり、拡張機能がうまく効かない等で本格的な開発はまだ難しそうという印象を受けました。
もっとレベルの高い人だと出来るのでしょうが私ではちょっと。。。
現状は大人しくwindows+visual studioでC#の開発を行うのがやはり無難でしょうか。
ただ、docker+code-server or cloud9でpythonとかの記事はちらほらあるのでそっちだと問題なく使えるのでしょうか。
気が向いたらpython+αで試してみたいと思いました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3