Theia IDE .Net Core - Dockerfile auf Github
Seit gestern "30.10.2019" gibt es eine neue Gabelung von Theia auf GitHub) IDE von mir. In dieser Verzweigung befindet sich jetzt eine neue Docker-Datei, die alle vorhandenen Programmiersprachen enthält und die Befehlszeilentools von .Net Core implementiert. Es ist jetzt sehr einfach, das integrierte Terminal zum Ausführen von Dotnet-Befehlen wie "Dotnet New Webapp" oder "Dotnet Add Migration" und "Dotnet Run" auszuführen.
Die Dockerfile
Wenn Sie auch Theia IDE .Net Core verwenden möchten, können Sie einfach meine Gabel klonen und die Docker-Datei verwenden. Wie dies funktioniert, finden Sie in der beigefügten Datei Readme.md. Letztendlich müssen Sie den Container nur mit "Docker Build" erstellen.
docker build . -t theiaide/theia-full-dotnet:latest
docker run -it --init -p 3000:3000 -v "$(pwd):/home/project" theiaide/theia-full-dotnet:latest
Alternativ können Sie die Docker-Datei lokal ohne Git erstellen. Hier ist die Docker-Datei für Theia IDE .Net Core
FROM ubuntu:18.04
ENV DEBIAN_FRONTEND noninteractive
#Common deps
RUN apt-get update && apt-get -y install curl xz-utils wget gpg apt-transport-https software-properties-common
RUN wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb
RUN add-apt-repository universe
RUN apt-get update && apt-get -y install dotnet-sdk-2.2
#Install node and yarn
#From: https://github.com/nodejs/docker-node/blob/6b8d86d6ad59e0d1e7a94cec2e909cad137a028f/8/Dockerfile
# gpg keys listed at https://github.com/nodejs/node#release-keys
RUN set -ex \
&& for key in \
4ED778F539E3634C779C87C6D7062848A1AB005C \
B9E2F5981AA6E0CD28160D9FF13993A75599653C \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
77984A986EBC2AA786BC0F66B01FBB92821C587A \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
; do \
gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
gpg --batch --keyserver pool.sks-keyservers.net --recv-keys "$key" || \
gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \
gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \
done
ARG NODE_VERSION=10.15.3
ENV NODE_VERSION $NODE_VERSION
RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
&& case "${dpkgArch##*-}" in \
amd64) ARCH='x64';; \
ppc64el) ARCH='ppc64le';; \
s390x) ARCH='s390x';; \
arm64) ARCH='arm64';; \
armhf) ARCH='armv7l';; \
i386) ARCH='x86';; \
*) echo "unsupported architecture"; exit 1 ;; \
esac \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
&& curl -SLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
ENV YARN_VERSION 1.13.0
RUN set -ex \
&& for key in \
6A010C5166006599AA17F08146C2130DFD2497F5 \
; do \
gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
gpg --batch --keyserver pool.sks-keyservers.net --recv-keys "$key" || \
gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \
gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \
done \
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
&& gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
&& mkdir -p /opt/yarn \
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \
&& rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz
#Developer tools
## Git and sudo (sudo needed for user override)
RUN apt-get -y install git sudo
#LSPs
##GO
ENV GO_VERSION 1.11.4
ENV GOPATH=/usr/local/go-packages
ENV GO_ROOT=/usr/local/go
ENV PATH $PATH:/usr/local/go/bin
ENV PATH $PATH:${GOPATH}/bin
RUN curl -sS https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz | tar -C /usr/local -xzf - && \
go get -u -v github.com/nsf/gocode && \
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs && \
go get -u -v github.com/ramya-rao-a/go-outline && \
go get -u -v github.com/acroca/go-symbols && \
go get -u -v golang.org/x/tools/cmd/guru && \
go get -u -v golang.org/x/tools/cmd/gorename && \
go get -u -v github.com/fatih/gomodifytags && \
go get -u -v github.com/haya14busa/goplay/cmd/goplay && \
go get -u -v github.com/josharian/impl && \
go get -u -v github.com/tylerb/gotype-live && \
go get -u -v github.com/rogpeppe/godef && \
go get -u -v golang.org/x/tools/cmd/godoc && \
go get -u -v github.com/zmb3/gogetdoc && \
go get -u -v golang.org/x/tools/cmd/goimports && \
go get -u -v sourcegraph.com/sqs/goreturns && \
go get -u -v github.com/golang/lint/golint && \
go get -u -v github.com/cweill/gotests/... && \
go get -u -v github.com/alecthomas/gometalinter && \
go get -u -v honnef.co/go/tools/... && \
go get -u -v github.com/sourcegraph/go-langserver && \
go get -u -v github.com/derekparker/delve/cmd/dlv && \
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
#Java
RUN apt-get update && apt-get -y install openjdk-8-jdk maven gradle
#C/C++
# public LLVM PPA, development version of LLVM
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic main" > /etc/apt/sources.list.d/llvm.list && \
apt-get update && apt-get install -y clang-tools-10 clangd-10 clang-tidy-10 && \
ln -s /usr/bin/clangd-10 /usr/bin/clangd && \
ln -s /usr/bin/clang-tidy-10 /usr/bin/clang-tidy
#Python 2
RUN apt-get update && apt-get install -y python python-pip && \
pip install python-language-server;
#PHP
RUN apt-get -y install php curl php-cli php-mbstring unzip
# https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md
# https://linuxconfig.org/how-to-install-php-composer-on-debian-linux
RUN curl -s -o composer-setup.php https://getcomposer.org/installer \
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
&& rm composer-setup.php
#Ruby
RUN apt-get -y install ruby ruby-dev zlib1g-dev && \
gem install solargraph
# Rust
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
ENV USER root
RUN curl -fsSL https://sh.rustup.rs | sh -s -- -y \
&& rustup update \
&& rustup component add rls rust-src rust-analysis
## User account
RUN adduser --disabled-password --gecos '' theia && \
adduser theia sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers;
RUN chmod g+rw /home && \
mkdir -p /home/project && \
mkdir -p /usr/local/cargo && \
mkdir -p /usr/local/go && \
mkdir -p /usr/local/go-packages && \
chown -R theia:theia /usr/local/cargo && \
chown -R theia:theia /usr/local/go && \
chown -R theia:theia /usr/local/go-packages && \
chown -R theia:theia /home/theia && \
chown -R theia:theia /home/project;
#Theia
##Needed for node-gyp, nsfw build
RUN apt-get update && apt-get install -y python build-essential
USER theia
ARG version=latest
WORKDIR /home/theia
ADD $version.package.json ./package.json
ARG GITHUB_TOKEN
# using "NODE_OPTIONS=..." to avoid out-of-memory problem in CI
RUN yarn --cache-folder ./ycache && rm -rf ./ycache && \
NODE_OPTIONS="--max_old_space_size=4096" yarn theia build
EXPOSE 3000
ENV SHELL /bin/bash
ENV GOPATH=/home/project
ENV PATH=$PATH:$GOPATH/bin
ENTRYPOINT [ "yarn", "theia", "start", "/home/project", "--hostname=0.0.0.0" ]