- #FROM ubuntu:18.04
- FROM nvidia/vulkan:1.1.121-cuda-10.1--ubuntu18.04
-
- # Make all NVIDIA GPUS visible, but I want to manually install drivers
- ARG NVIDIA_VISIBLE_DEVICES=all
- # Supress interactive menu while installing keyboard-configuration
- ARG DEBIAN_FRONTEND=noninteractive
-
- RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list;
-
- # add new sudo user
- ENV USERNAME kbkn
- ENV HOME /home/$USERNAME
- RUN useradd -m $USERNAME && \
- echo "$USERNAME:$USERNAME" | chpasswd && \
- usermod --shell /bin/bash $USERNAME && \
- usermod -aG sudo $USERNAME && \
- mkdir /etc/sudoers.d && \
- echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME && \
- chmod 0440 /etc/sudoers.d/$USERNAME && \
- # Replace 1000 with your user/group id
- usermod --uid 1000 $USERNAME && \
- groupmod --gid 1000 $USERNAME && \
- chown -Rf $USERNAME.$USERNAME /home/$USERNAME && \
- mkdir -p /home/$USERNAME/.cache && \
- chmod -R 777 /home/$USERNAME/.cache
-
- # Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Failed to execute child process dbus-launch (No such file or directory)
- # fix by setting LANG https://askubuntu.com/questions/608330/problem-with-gnome-terminal-on-gnome-3-12-2
- # to install locales https://stackoverflow.com/questions/39760663/docker-ubuntu-bin-sh-1-locale-gen-not-found
- RUN apt-get clean && \
- apt-get update && \
- apt-get install -y locales && \
- rm -rf /var/lib/apt/lists/* && \
- locale-gen en_US.UTF-8
- ENV LANG en_US.UTF-8
- ENV LANGUAGE en_US:en
- ENV LC_ALL en_US.UTF-8
-
- # (1) Install Xorg and NVIDIA driver inside the container
- # Almost same procesure as nvidia/driver https://gitlab.com/nvidia/driver/blob/master/ubuntu16.04/Dockerfile
-
- # (1-1) Install prerequisites
- RUN dpkg --add-architecture i386 && \
- apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
- build-essential \
- ca-certificates \
- curl \
- wget \
- vim \
- zip \
- unzip \
- git \
- python \
- kmod \
- libc6:i386 \
- pkg-config \
- libelf-dev && \
- rm -rf /var/lib/apt/lists/*
-
- # (1-2) Install xorg server and xinit BEFORE INSTALLING NVIDIA DRIVER.
- # After this installation, command Xorg and xinit can be used in the container
- # if you need full ubuntu desktop environment, the line below should be added.
- # ubuntu-desktop \
- RUN apt-get update && apt-get install -y \
- xinit && \
- rm -rf /var/lib/apt/lists/*
-
- # (1-3) Install NVIDIA drivers, including X graphic drivers
- # Same command as nvidia/driver, except --x-{prefix,module-path,library-path,sysconfig-path} are omitted in order to make use default path and enable X drivers.
- # Driver version must be equal to host's driver
- # Install the userspace components and copy the kernel module sources.
- #ENV DRIVER_VERSION=410.129-diagnostic
- #ENV DRIVER_VERSION_PATH=410.129
- #RUN cd /tmp && \
- # curl -fSsl -O https://us.download.nvidia.com/tesla/$DRIVER_VERSION_PATH/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run && \
- # sh NVIDIA-Linux-x86_64-$DRIVER_VERSION.run -x && \
- # cd NVIDIA-Linux-x86_64-$DRIVER_VERSION && \
- # ./nvidia-installer --silent \
- # --no-kernel-module \
- # --install-compat32-libs \
- # --no-nouveau-check \
- # --no-nvidia-modprobe \
- # --no-rpms \
- # --no-backup \
- # --no-check-for-alternate-installs \
- # --no-libglx-indirect \
- # --no-glvnd-egl-client \
- # --no-glvnd-glx-client \
- # --no-install-libglvnd && \
- # mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \
- # mv LICENSE mkprecompiled kernel /usr/src/nvidia-$DRIVER_VERSION && \
- # sed '9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest
- # this option cannot be used on newer driver
- # --no-glvnd-egl-client \
- # --no-glvnd-glx-client \
- RUN cd /tmp && \
- wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin && \
- mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \
- wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb && \
- dpkg -i cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb && \
- apt-key add /var/cuda-repo-ubuntu1804-11-2-local/7fa2af80.pub && \
- apt-get update && apt-get install -y --no-install-recommends \
- cuda-drivers && \
- rm -rf cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb && \
- rm -rf /var/lib/apt/lists/*
-
-
- # (2) Configurate Xorg
- # (2-1) Install some necessary softwares
- #
- # pkg-config: nvidia-xconfig requires this package
- # mesa-utils: This package includes glxgears and glxinfo, which is useful for testing GLX drivers
- # x11vnc: Make connection between x11 server and VNC client.
- # x11-apps: xeyes can be used to make sure that X11 server is running.
- #
- # Note: x11vnc in ubuntu18.04 is useless beacuse of stack smashing bug. See below to manual compilation.
- RUN apt-get update && apt-get install -y --no-install-recommends \
- mesa-utils \
- x11-apps && \
- rm -rf /var/lib/apt/lists/*
-
- # solution for the `stack smashing detected` issue
- # https://github.com/LibVNC/x11vnc/issues/61
- RUN apt-get update && apt-get install -y --no-install-recommends \
- automake autoconf libssl-dev xorg-dev libvncserver-dev xdg-user-dirs xdg-utils && \
- rm -rf /var/lib/apt/lists/* && \
- git clone https://github.com/LibVNC/x11vnc.git && \
- cd x11vnc && \
- ./autogen.sh && \
- make && \
- cp src/x11vnc /usr/bin/x11vnc
-
- # (2-2) Optional vulkan support
- # vulkan-utils includes vulkan-smoketest, benchmark software of vulkan API
- RUN apt-get update && apt-get install -y --no-install-recommends \
- libvulkan1 vulkan-utils && \
- rm -rf /var/lib/apt/lists/*
-
- # for test
- RUN apt-get update && apt-get install -y --no-install-recommends \
- firefox openbox menu && \
- rm -rf /var/lib/apt/lists/*
-
- # sound driver and GTK library
- # If you want to use sounds on docker, try `pulseaudio --start`
- RUN apt-get update && apt-get install -y --no-install-recommends \
- alsa pulseaudio libgtk2.0-0 && \
- rm -rf /var/lib/apt/lists/*
-
- # novnc
- # download websockify as well
- RUN wget https://github.com/novnc/noVNC/archive/v1.1.0.zip && \
- unzip -q v1.1.0.zip && \
- rm -rf v1.1.0.zip && \
- git clone https://github.com/novnc/websockify /noVNC-1.1.0/utils/websockify
-
- # Xorg segfault error
- # dbus-core: error connecting to system bus: org.freedesktop.DBus.Error.FileNotFound (Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory)
- # related? https://github.com/Microsoft/WSL/issues/2016
- RUN apt-get update && apt-get install -y --no-install-recommends \
- dbus-x11 \
- libdbus-c++-1-0v5 && \
- rm -rf /var/lib/apt/lists/*
-
- # (3) Run Xorg server + x11vnc + X applications
- # see run.sh for details
- COPY run.sh /run.sh
- CMD ["bash", "/run.sh"]