Docker.VSCode.Integration.HF / DockerfileDescription.md
awacke1's picture
Update DockerfileDescription.md
0c66405
|
raw
history blame
7.4 kB

5 Terraform commands you should know:

  1. terraform init: https://developer.hashicorp.com/terraform/cli/commands/init
  2. terraform plan: https://developer.hashicorp.com/terraform/cli/commands/plan
  3. terraform apply: https://developer.hashicorp.com/terraform/cli/commands/apply
  4. terraform import: https://developer.hashicorp.com/terraform/cli/import
  5. terraform destroy: https://developer.hashicorp.com/terraform/cli/commands/destroy

Azure Resources TF Management:

Step Title Tasks
1 PreReqs Terraform installed, Azure cloud account, VSCode extensions, Docker, ACR, Deploy and Test
2 Demo Create resources in Azure cloud
Create terraform files for those resources
Run terraform apply
Run terraform import for each resource
Verify terraform state
Perform terraform destroy to clean up resources

Give me an analysis on what this dockerfile does: FROM nvidia/cuda:11.3.1-base-ubuntu20.04

ENV DEBIAN_FRONTEND=noninteractive
TZ=Europe/Paris

Remove any third-party apt sources to avoid issues with expiring keys.

Install some basic utilities

RUN rm -f /etc/apt/sources.list.d/.list &&
apt-get update && apt-get install -y
curl
ca-certificates
sudo
git
git-lfs
zip
unzip
htop
bzip2
libx11-6
build-essential
libsndfile-dev
software-properties-common
&& rm -rf /var/lib/apt/lists/

ARG BUILD_DATE ARG VERSION ARG CODE_RELEASE RUN
echo "**** install openvscode-server runtime dependencies " &&
apt-get update &&
apt-get install -y
jq
libatomic1
nano
net-tools
netcat &&
echo "
install openvscode-server " &&
if [ -z ${CODE_RELEASE+x} ]; then
CODE_RELEASE=$(curl -sX GET "https://api.github.com/repos/gitpod-io/openvscode-server/releases/latest"
| awk '/tag_name/{print $4;exit}' FS='[""]'
| sed 's|^openvscode-server-v||');
fi &&
mkdir -p /app/openvscode-server &&
curl -o
/tmp/openvscode-server.tar.gz -L
"https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v${CODE_RELEASE}/openvscode-server-v${CODE_RELEASE}-linux-x64.tar.gz" &&
tar xf
/tmp/openvscode-server.tar.gz -C
/app/openvscode-server/ --strip-components=1 &&
echo "
clean up ****" &&
apt-get clean &&
rm -rf
/tmp/*
/var/lib/apt/lists/*
/var/tmp/* COPY root/ /

RUN add-apt-repository ppa:flexiondotorg/nvtop &&
apt-get upgrade -y &&
apt-get install -y --no-install-recommends nvtop

RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - &&
apt-get install -y nodejs &&
npm install -g configurable-http-proxy

Create a working directory

WORKDIR /app

Create a non-root user and switch to it

RUN adduser --disabled-password --gecos '' --shell /bin/bash user
&& chown -R user:user /app RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user USER user

All users can use /home/user as their home directory

ENV HOME=/home/user RUN mkdir $HOME/.cache $HOME/.config
&& chmod -R 777 $HOME

Set up the Conda environment

ENV CONDA_AUTO_UPDATE_CONDA=false
PATH=$HOME/miniconda/bin:$PATH RUN curl -sLo ~/miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh
&& chmod +x ~/miniconda.sh
&& ~/miniconda.sh -b -p ~/miniconda
&& rm ~/miniconda.sh
&& conda clean -ya

WORKDIR $HOME/app

#######################################

Start root user section

#######################################

USER root

User Debian packages

Security warning : Potential user code executed as root (build time)

RUN --mount=target=/root/packages.txt,source=packages.txt
apt-get update &&
xargs -r -a /root/packages.txt apt-get install -y --no-install-recommends
&& rm -rf /var/lib/apt/lists/*

RUN --mount=target=/root/on_startup.sh,source=on_startup.sh,readwrite
bash /root/on_startup.sh

#######################################

End root user section

#######################################

USER user

Python packages

RUN --mount=target=requirements.txt,source=requirements.txt
pip install --no-cache-dir --upgrade -r requirements.txt

Copy the current directory contents into the container at $HOME/app setting the owner to the user

COPY --chown=user . $HOME/app

RUN chmod +x start_server.sh

ENV PYTHONUNBUFFERED=1
GRADIO_ALLOW_FLAGGING=never
GRADIO_NUM_PORTS=1
GRADIO_SERVER_NAME=0.0.0.0
GRADIO_THEME=huggingface
SYSTEM=spaces
SHELL=/bin/bash

EXPOSE 7860 3000

CMD ["./start_server.sh"] This Dockerfile describes the steps to create a Docker image with an environment that includes various tools, libraries, and applications. The image is based on the nvidia/cuda:11.3.1-base-ubuntu20.04 image, which is a Ubuntu 20.04 base image with NVIDIA CUDA 11.3.1 libraries pre-installed. The steps in this Dockerfile can be broken down as follows:

Set environment variables:

Set the timezone to Europe/Paris Set the Debian frontend to noninteractive mode for silent installations Remove third-party apt sources to avoid issues with expiring keys.

Install basic utilities and libraries using apt-get.

Install the OpenVSCode-Server, which is an open-source version of VSCode Server, allowing you to run a remote VSCode environment.

Add the flexiondotorg/nvtop repository and install the NVTop GPU monitoring tool.

Install Node.js 14.x and the configurable-http-proxy package.

Create a non-root user named user and set appropriate permissions.

Set up the Conda environment with Miniconda3 and Python 3.9.

Install user-specified Debian packages by reading from a packages.txt file.

Execute a script named on_startup.sh as the root user.

Switch back to the non-root user user.

Install Python packages specified in a requirements.txt file.

Copy the current directory contents into the container at $HOME/app.

Set environment variables for Gradio and other configurations.

Expose ports 7860 and 3000.

Set the CMD to execute the start_server.sh script when the container starts.

This Dockerfile sets up a development environment with NVIDIA CUDA support, a Conda environment, OpenVSCode-Server, NVTop, and various other utilities. It also installs user-specified Debian and Python packages, and runs a user-specified script at startup. The image is prepared to run a server using Gradio, a library for creating web-based UIs for ML models, and exposes two ports for external communication.