GithubHelp home page GithubHelp logo

wsl2-docker-for-win's Introduction

WSL2 Docker on Windows

Back in July, Docker announnced that with WSL2, they could create a more native Linux experience for Docker on Windows, and in so doing, opened up the door for that experience to work on Windows 10 Home.

Docker does have a wsl2 tech preview, but as of the time of this writing, you can't install it on Windows 10 Home.

Well, I got impatient, and started tinkering, and wouldn't you know, I got it working.

This repository will start as a document of the steps I took, and hopefully evolve into a simple script to allow automation of this setup.

Prerequisites

Usage

So here's the thing. Once I got everything up and runing, I found I had absolutely no need to install the native windows docker client! I wound up mapping \\wsl$\Ubuntu1 to my U: drive, and automounting root = / in /etc/wsl.conf on Ubuntu (Installation step 1).

As a result, I can now navigate to U: in windows explorer or my editor of choice to open and edit files in the Ubuntu filesystem, including files on any mapped Windows drive.

For example, I have a 240G SSD mounted as Y drive, and that is exclusively where I have my source code.

Now, I can open VSCode on Windows, and create a new project at Y:/example_project, and those files will be accessible inside Ubuntu at /y/example_project.

In VSCode I set my default terminal as the Ubuntu bash terminal, (require the new Windows Terminal), and cd /y/example_project.

I can now edit files on windows or on Linux, and use docker run -v $PWD:/app and it will mount the files I'm editing in windows, into the docker container that is running on Linux. The same concept works with any Windows drive. I could have created my project at C:\Users\username\example_project and cd /c/Users/username/example_project in my terminal.

This is the same experience you get with docker on its native platform (Linux), without having to use some tiny VM emulation layer, and having to deal with samba mounts and passwords to share your C drive for the windows docker client. WSL gives you seamless integration with Ubuntu, including exposing ports on localhost between the two kernels.

Therefore, installing the docker client on Windows is completely optional! (I included the steps below anyways, since you might have your own reasons for wanting low-level powershell docker integration)

Installation

  1. Add wsl.conf to Ubuntu
  2. Install Docker on Ubuntu
  3. Configure Docker on Ubuntu
  4. (Optional) Set docker env vars on Windows
  5. (Optional) Install docker client on Windows
  6. (Optional) Install docker-compose on Windows

Add wsl.conf to Ubuntu

Save the following file as /etc/wsl.conf on your Ubuntu host:

[automount]
root = /
options = "metadata"

This will mount all of your mapped drives to a corresponding letter in the root of your Ubuntu filesystem. This is what will allow you the "native" experience of editing file on Windows and running them from your windows or ubuntu terminals.

Install Docker on Ubuntu

This step is mostly going to follow the Docker Installing on Ubuntu docs, with one major exception. The current Ubuntu distro from Microsoft doesn't use systemd, so you'll have to start/stop docker with sudo service docker {start|stop|restart|status}.

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl \
    gnupg-agent software-properties-common

Then add dockers gpg key and verify it matches shown fingerprint

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
$ sudo apt-key fingerprint 0EBFCD88
    
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]

Add the edge docker repository. (stable will probably work, but I suspect less errors with WSL2 on windows will happen on edge)

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   edge"

Ensure you are about to install from teh Docker repo instead of default Ubuntu repo:

$ sudo apt-cache policy docker-ce

// you should see output similar to:
docker-ce:
  Installed: (none)
Cadidate: 5:19.03.4~3-0ubuntu-bionic
Version table:
  ... (a bunch of versions listed)

Install Docker and peer packages

sudo apt install docker-ce docker-ce-cli containerd.io

Configure Docker on Ubuntu

In order for the docker command on the windows host to run "natively", we'll need to use the daemon running in WSL to allow connections from the Windows Host.

Since Windows Build 18945, services on the WSL machine are automatically exposed to localhost on the Windows side, and vice-versa.

There is probably a startup script that can be run to figure out what the IP of the Windows Host is from the Linux machine, but I haven't gotten that far yet, so for now, we'll just set the daemon to listen to unix:// and optionally tcp://0.0.0.0:2375.

If you don't intend to use the docker command from powershell or a windows terminal, and map the wsl as a network drive, you can remove the host entry from the example below to increase security.

Create the following /etc/docker/daemon.json file in WSL machine:

{
    "hosts": ["unix://", "tcp://0.0.0.0:2375"],
    "experimental": true
}

Start the docker daemon

sudo service docker start

Set docker env vars on Windows

Open up your Environment Variables in Windows, and add the following entries under the System Environment Variables section:

Env Var Value Required/Optional
DOCKER_HOST tcp://localhost:2375 Required
DOCKER_CLI_EXPERIMENTAL enabled Optional
DOCKER_API_VERSION 1.40 Optional

Install docker client on Windows

  1. Download the docker client from the following url, substituting for the release you want:
https://dockermsft.blob.core.windows.net/dockercontainer/docker-19-03-1.zip
  1. Unzip the contents of the docker-19.03-1.zip to C:\Program Files\Docker (new directory) Note: Make sure that the docker.exe is at C:\Program files\Docker\docker.exe

  2. Add C:\Program Files\Docker to the System PATH Environment Variable

  3. Run refreshenv in Powershell and you should now be able to run docker version!

You should see output similar to below:

Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf583a
 Built:             Fri Oct 18 15:54:09 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf583a
  Built:            Fri Oct 18 15:52:40 2019
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Install docker-compose on Windows

Using chocolatey is the easiest for this one:

$ choco install docker-compose

Notes

*1 Make sure you use the name of the distro as listed in the output of the wsl -l command

wsl2-docker-for-win's People

Contributors

dfredell avatar longlivechief avatar tashrifbillah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wsl2-docker-for-win's Issues

VS Code Server for WSL closed unexpectedly when open docker desktop

2020-06-21 03:48:27.131] Resolving wsl+docker-desktop, resolveAttempt: 1
[2020-06-21 03:48:27.203] Starting VS Code Server inside WSL (docker-desktop)
[2020-06-21 03:48:27.203] Extension version: 0.44.4, Windows build: 19041. Multi distro support: available. WSL path support: enabled
[2020-06-21 03:48:27.376] Probing if server is already installed: C:\Windows\System32\wsl.exe -d docker-desktop -e sh -c "[ -d ~/.vscode-server/bin/cd9ea6488829f560dc949a8b2fb789f3cdc05f5d ] && printf found || ([ -f /etc/alpine-release ] && printf alpine-; uname -m)"
[2020-06-21 03:48:27.616] Probing result: found
[2020-06-21 03:48:27.617] Server install found in WSL
[2020-06-21 03:48:27.619] Launching C:\Windows\System32\wsl.exe -d docker-desktop sh -c '"$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" cd9ea6488829f560dc949a8b2fb789f3cdc05f5d stable .vscode-server 0 ' in c:\Users\nithi.vscode\extensions\ms-vscode-remote.remote-wsl-0.44.4}
[2020-06-21 03:48:27.989] Setting up server environment: Looking for /root/.vscode-server/server-env-setup. Not found.
[2020-06-21 03:48:27.989] WSL version: 4.19.104-microsoft-standard docker-desktop
[2020-06-21 03:48:27.989] WSL2-shell-PID: 1005
[2020-06-21 03:48:27.989] Starting server: /root/.vscode-server/bin/cd9ea6488829f560dc949a8b2fb789f3cdc05f5d/server.sh --port=0 --use-host-proxy --enable-remote-auto-shutdown
[2020-06-21 03:48:28.061] /root/.vscode-server/bin/cd9ea6488829f560dc949a8b2fb789f3cdc05f5d/server.sh: line 12: /root/.vscode-server/bin/cd9ea6488829f560dc949a8b2fb789f3cdc05f5d/node: not found
[2020-06-21 03:48:28.062] VS Code Server for WSL closed unexpectedly.
[2020-06-21 03:48:28.062] For help with startup problems, go to
[2020-06-21 03:48:28.062] https://code.visualstudio.com/docs/remote/troubleshooting#_wsl-tips

Add docs for autostarting docker service

I've been able to create a /etc/sudoers.d/docker.sudoers file with the content:

%docker ALL=(root) NOPASSWD: /etc/init.d/docker start stop restart status

Which allows me to run:

wsl service start docker

To start the docker service. The next option from here is probably to create a Task to run this command after user logs in.

Either way, need to document the 2 steps above, and the steps for auto-starting via Windows side of things.

Note:, I'm also going to look into ways to open a WSL feature request to add a [autostart] option to /etc/wsl.conf file. So far have just tweeted to Ben Hillis about this to see what he thinks

Cannot connect to the Docker daemon

I'm running Ubuntu 18.04.3 with WSL2 on Windows build 18999. I followed the instructions, but when I ran docker version at the end, I got

Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf583a
 Built:             Fri Oct 18 15:54:09 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Terminal output not shared

Hi,

I used your tutorial, and it worked micracles, allowing me not to depend on virtual machines to use docker. Still, at first I thought it didn't work because the commands

docker run docker/whalesay cowsay Hello-World!
docker run hello-world

didn't show any of the usual output. On closer inspection it worked just as it was supposed to. The only thing was that the output wasn't printed to the windows terminal.

Access docker containers in browser

How managed to install and get docker and docker-compose up and running in Ubuntu-18.04 WSL2.

However, I can’t access the urls in my browser. It tried installing docker desktop and enabling WSL2, but then my docker-compose script would return many errors. Is there a viable solution to this problem?

Error in /etc/docker/daemon.json

There is a type mistake in the file content: "," is missing between arguments.
It take me a while to get why the docker won't running after the following step by step other steps.

So this is the original:
{
"hosts": ["unix://", "tcp://0.0.0.0:2375"]
"experimental": true
}
which should be:
{
"hosts": ["unix://", "tcp://0.0.0.0:2375"],
"experimental": true
}
Hope it will be helpful to others =)

docker on debian not available from windows

Hey @LongLiveCHIEF First like to say that your manual is made it finally possible for me to move from dual boot to pure windows installation (really needed docker)

The only thing that didn't work is that I'm unable to access the daemon that is running on debian wsl from vscode.
on the debian host netstat show that the daemon is listening
netstat -lp --numeric-ports Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 [::]:2375 [::]:* LISTEN 9257/dockerd

but windows cannot access it. netstat on windows does not show the port at all.

Any ideas how to get it to work?

Missing apt install docker in step 2

allways when i run sudo service docker enable I get the message docker: unrecognized service. I'll execute all other commands as shown.. Do you have any suggetions what the error could be?

Failed to start daemon

Hi,

I've tried to install Docker on Ubuntu running on WSL2, but I couldn't run the hello world command after the installation.

After doing everything mentioned in your article I run:

$ sudo docker run hello-world

but the response is:

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

I have tried to manually run the docker daemon using "dockerd" command and this is the output I get (I wonder if anyone experienced something similar) :

INFO[2019-12-27T21:30:20.907254600Z] Starting up
INFO[2019-12-27T21:30:20.922667200Z] libcontainerd: started new containerd process  pid=441
INFO[2019-12-27T21:30:20.923733100Z] parsed scheme: "unix"                         module=grpc
INFO[2019-12-27T21:30:20.924574900Z] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2019-12-27T21:30:20.928519800Z] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2019-12-27T21:30:20.929381700Z] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2019-12-27T21:30:20.972247200Z] starting containerd                           revision=b34a5c8af56e510852c35414db4c1f4fa6172339 version=1.2.10
INFO[2019-12-27T21:30:20.973875600Z] loading plugin "io.containerd.content.v1.content"...  type=io.containerd.content.v1
INFO[2019-12-27T21:30:20.974218900Z] loading plugin "io.containerd.snapshotter.v1.btrfs"...  type=io.containerd.snapshotter.v1
! WARN[2019-12-27T21:30:20.975127900Z] failed to load plugin io.containerd.snapshotter.v1.btrfs  error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter"
INFO[2019-12-27T21:30:20.976093000Z] loading plugin "io.containerd.snapshotter.v1.aufs"...  type=io.containerd.snapshotter.v1
! WARN[2019-12-27T21:30:20.987509500Z] failed to load plugin io.containerd.snapshotter.v1.aufs  error="modprobe aufs failed: "modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-19536-Microsoft/modules.dep.bin'\nmodprobe: FATAL: Module aufs not found in directory /lib/modules/4.4.0-19536-Microsoft\n": exit status 1"
INFO[2019-12-27T21:30:20.988607700Z] loading plugin "io.containerd.snapshotter.v1.native"...  type=io.containerd.snapshotter.v1
INFO[2019-12-27T21:30:20.992594700Z] loading plugin "io.containerd.snapshotter.v1.overlayfs"...  type=io.containerd.snapshotter.v1
INFO[2019-12-27T21:30:20.993873400Z] loading plugin "io.containerd.snapshotter.v1.zfs"...  type=io.containerd.snapshotter.v1
INFO[2019-12-27T21:30:20.994458900Z] skip loading plugin "io.containerd.snapshotter.v1.zfs"...  type=io.containerd.snapshotter.v1
INFO[2019-12-27T21:30:20.995018900Z] loading plugin "io.containerd.metadata.v1.bolt"...  type=io.containerd.metadata.v1
! WARN[2019-12-27T21:30:20.995822400Z] could not use snapshotter zfs in metadata plugin  error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter: skip plugin"
! WARN[2019-12-27T21:30:20.997037600Z] could not use snapshotter btrfs in metadata plugin  error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter"
! WARN[2019-12-27T21:30:20.998320800Z] could not use snapshotter aufs in metadata plugin  error="modprobe aufs failed: "modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-19536-Microsoft/modules.dep.bin'\nmodprobe: FATAL: Module aufs not found in directory /lib/modules/4.4.0-19536-Microsoft\n": exit status 1"
INFO[2019-12-27T21:30:21.007131000Z] loading plugin "io.containerd.differ.v1.walking"...  type=io.containerd.differ.v1
INFO[2019-12-27T21:30:21.007523500Z] loading plugin "io.containerd.gc.v1.scheduler"...  type=io.containerd.gc.v1
INFO[2019-12-27T21:30:21.008449500Z] loading plugin "io.containerd.service.v1.containers-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.009237200Z] loading plugin "io.containerd.service.v1.content-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.009956500Z] loading plugin "io.containerd.service.v1.diff-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.010643100Z] loading plugin "io.containerd.service.v1.images-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.011314100Z] loading plugin "io.containerd.service.v1.leases-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.011991500Z] loading plugin "io.containerd.service.v1.namespaces-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.012638700Z] loading plugin "io.containerd.service.v1.snapshots-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.013346700Z] loading plugin "io.containerd.runtime.v1.linux"...  type=io.containerd.runtime.v1
INFO[2019-12-27T21:30:21.014573500Z] loading plugin "io.containerd.runtime.v2.task"...  type=io.containerd.runtime.v2
INFO[2019-12-27T21:30:21.017869800Z] loading plugin "io.containerd.monitor.v1.cgroups"...  type=io.containerd.monitor.v1
INFO[2019-12-27T21:30:21.023126800Z] loading plugin "io.containerd.service.v1.tasks-service"...  type=io.containerd.service.v1
INFO[2019-12-27T21:30:21.023474000Z] loading plugin "io.containerd.internal.v1.restart"...  type=io.containerd.internal.v1
INFO[2019-12-27T21:30:21.024398100Z] loading plugin "io.containerd.grpc.v1.containers"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.025174300Z] loading plugin "io.containerd.grpc.v1.content"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.026070600Z] loading plugin "io.containerd.grpc.v1.diff"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.026874500Z] loading plugin "io.containerd.grpc.v1.events"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.027695400Z] loading plugin "io.containerd.grpc.v1.healthcheck"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.028508400Z] loading plugin "io.containerd.grpc.v1.images"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.029271600Z] loading plugin "io.containerd.grpc.v1.leases"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.032687000Z] loading plugin "io.containerd.grpc.v1.namespaces"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.037625900Z] loading plugin "io.containerd.internal.v1.opt"...  type=io.containerd.internal.v1
INFO[2019-12-27T21:30:21.038768700Z] loading plugin "io.containerd.grpc.v1.snapshots"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.039429000Z] loading plugin "io.containerd.grpc.v1.tasks"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.040378600Z] loading plugin "io.containerd.grpc.v1.version"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.041323300Z] loading plugin "io.containerd.grpc.v1.introspection"...  type=io.containerd.grpc.v1
INFO[2019-12-27T21:30:21.045472100Z] serving...                                    address="/var/run/docker/containerd/containerd-debug.sock"
INFO[2019-12-27T21:30:21.048287000Z] serving...                                    address="/var/run/docker/containerd/containerd.sock"
INFO[2019-12-27T21:30:21.048653500Z] containerd successfully booted in 0.077405s
INFO[2019-12-27T21:30:21.077418900Z] parsed scheme: "unix"                         module=grpc
INFO[2019-12-27T21:30:21.078089300Z] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2019-12-27T21:30:21.078944700Z] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2019-12-27T21:30:21.079621000Z] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2019-12-27T21:30:21.081860300Z] parsed scheme: "unix"                         module=grpc
INFO[2019-12-27T21:30:21.082167500Z] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2019-12-27T21:30:21.083035600Z] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2019-12-27T21:30:21.083746300Z] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2019-12-27T21:30:21.097745600Z] [graphdriver] using prior storage driver: overlay2
! WARN[2019-12-27T21:30:21.108233900Z] Your kernel does not support cgroup memory limit
! WARN[2019-12-27T21:30:21.108537300Z] Unable to find cpu cgroup in mounts
! WARN[2019-12-27T21:30:21.109322600Z] Unable to find blkio cgroup in mounts
! WARN[2019-12-27T21:30:21.113112100Z] Unable to find cpuset cgroup in mounts
! WARN[2019-12-27T21:30:21.113990200Z] mountpoint for pids not found
INFO[2019-12-27T21:30:21.115375500Z] Loading containers: start.
! WARN[2019-12-27T21:30:21.128403400Z] Running iptables --wait -t nat -L -n failed with message: `iptables v1.6.1: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.`, error: exit status 3
INFO[2019-12-27T21:30:21.308905800Z] stopping event stream following graceful shutdown  error="<nil>" module=libcontainerd namespace=moby
INFO[2019-12-27T21:30:21.312758600Z] stopping healthcheck following graceful shutdown  module=libcontainerd
INFO[2019-12-27T21:30:21.312768800Z] stopping event stream following graceful shutdown  error="context canceled" module=libcontainerd namespace=plugins.moby
- failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.6.1: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
- Perhaps iptables or your kernel needs to be upgraded.
- (exit status 3)

My setup:
Windows 10 Pro Insider Preview
Version 2004 (OS Build 19536.1000)

Ubuntu:
Linux 4.4.0-19536-Microsoft x86_64

Thanks,
Jernej

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.