QuantumKatas/Dockerfile

93 строки
4.7 KiB
Docker

# We use the iqsharp-base image, as that includes
# the .NET Core SDK, IQ#, and Jupyter Notebook already
# installed for us.
FROM mcr.microsoft.com/quantum/iqsharp-base:0.28.302812
# Add metadata indicating that this image is used for the katas.
ENV IQSHARP_HOSTING_ENV=KATAS_DOCKERFILE
# Make sure the contents of our repo are in ${HOME}
# Required for mybinder.org
COPY . ${HOME}
# Run some commands as root
USER root
# Install Python dependencies for the Python visualization and tutorial notebooks
RUN pip install -I --no-cache-dir \
matplotlib \
numpy \
pytest && \
# Give permissions to the jovyan user
chown -R ${USER} ${HOME} && \
chmod +x ${HOME}/scripts/*.sh
# From now on, just run things as the jovyan user
USER ${USER}
RUN cd ${HOME}/ && \
# Install packages needed to submit jobs to hardware separately, since they are not part of any project
dotnet restore ./tutorials/ExploringDeutschJozsaAlgorithm/AQ/ProviderDependencies.csproj
RUN cd ${HOME}/ && \
# `dotnet restore` for each solution to ensure NuGet cache is fully populated
for solution in $(find . -type f -name "*.sln"); do dotnet restore "$solution"; done && \
# Pre-exec notebooks to improve first-use start time
# (the katas that are less frequently used on Binder are excluded to improve overall Binder build time)
./scripts/prebuild-kata.sh BasicGates && \
./scripts/prebuild-kata.sh CHSHGame && \
./scripts/prebuild-kata.sh DeutschJozsaAlgorithm && \
#./scripts/prebuild-kata.sh DistinguishUnitaries && \
#./scripts/prebuild-kata.sh GHZGame && \
#./scripts/prebuild-kata.sh GraphColoring && \
./scripts/prebuild-kata.sh GroversAlgorithm && \
#./scripts/prebuild-kata.sh JointMeasurements && \
#./scripts/prebuild-kata.sh KeyDistribution_BB84 && \
#./scripts/prebuild-kata.sh MagicSquareGame && \
./scripts/prebuild-kata.sh Measurements && \
#./scripts/prebuild-kata.sh PhaseEstimation && \
#./scripts/prebuild-kata.sh QEC_BitFlipCode && \
./scripts/prebuild-kata.sh QFT && \
#./scripts/prebuild-kata.sh RippleCarryAdder && \
#./scripts/prebuild-kata.sh SolveSATWithGrover && \
#./scripts/prebuild-kata.sh SuperdenseCoding && \
./scripts/prebuild-kata.sh Superposition && \
./scripts/prebuild-kata.sh Teleportation && \
#./scripts/prebuild-kata.sh TruthTables && \
# Exclude Unitary patterns, since it times out in Binder prebuild
#./scripts/prebuild-kata.sh UnitaryPatterns && \
./scripts/prebuild-kata.sh tutorials/ComplexArithmetic ComplexArithmetic.ipynb && \
./scripts/prebuild-kata.sh tutorials/ExploringDeutschJozsaAlgorithm DeutschJozsaAlgorithmTutorial_P1.ipynb && \
./scripts/prebuild-kata.sh tutorials/ExploringGroversAlgorithm ExploringGroversAlgorithmTutorial.ipynb && \
./scripts/prebuild-kata.sh tutorials/LinearAlgebra LinearAlgebra.ipynb && \
./scripts/prebuild-kata.sh tutorials/MultiQubitGates MultiQubitGates.ipynb && \
./scripts/prebuild-kata.sh tutorials/MultiQubitSystems MultiQubitSystems.ipynb && \
./scripts/prebuild-kata.sh tutorials/MultiQubitSystemMeasurements MultiQubitSystemMeasurements.ipynb && \
#./scripts/prebuild-kata.sh tutorials/Oracles Oracles.ipynb && \
./scripts/prebuild-kata.sh tutorials/Qubit Qubit.ipynb && \
./scripts/prebuild-kata.sh tutorials/RandomNumberGeneration RandomNumberGenerationTutorial.ipynb && \
./scripts/prebuild-kata.sh tutorials/SingleQubitGates SingleQubitGates.ipynb && \
./scripts/prebuild-kata.sh tutorials/SingleQubitSystemMeasurements SingleQubitSystemMeasurements.ipynb && \
# Exclude VisualizationTools, as %debug cell times out in Binder prebuild
#./scripts/prebuild-kata.sh tutorials/VisualizationTools VisualizationTools.ipynb && \
# To improve performance when loading packages at IQ# kernel initialization time,
# we remove all online sources for NuGet such that IQ# Package Loading and NuGet dependency
# resolution won't attempt to resolve package dependencies again (as it was already done
# during the prebuild steps above).
# The downside is that only packages that were already downloaded to .nuget/packages folder
# will be available to get loaded.
# Users that require loading additional packages should use the iqsharp-base image instead.
rm ${HOME}/NuGet.config && \
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<configuration>\
<packageSources>\
<clear />\
</packageSources>\
</configuration>\
" > ${HOME}/.nuget/NuGet/NuGet.Config
# Set the working directory to $HOME (/home/jovyan/)
WORKDIR ${HOME}
# Set default command when running a Docker container instance
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0"]