This repository has been archived by the owner on Nov 30, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Onboard Anaconda and Miniconda to image build (#545)
- Loading branch information
Showing
17 changed files
with
798 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,11 @@ | ||
FROM continuumio/anaconda3 | ||
|
||
# Options for common setup script | ||
ARG INSTALL_ZSH="true" | ||
ARG UPGRADE_PACKAGES="false" | ||
ARG USERNAME=vscode | ||
ARG USER_UID=1000 | ||
ARG USER_GID=$USER_UID | ||
|
||
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies. | ||
COPY .devcontainer/library-scripts/*.sh /tmp/library-scripts/ | ||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
&& /bin/bash /tmp/library-scripts/common-debian.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" \ | ||
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts | ||
FROM mcr.microsoft.com/vscode/devcontainers/anaconda:dev-3 | ||
|
||
# Copy environment.yml (if found) to a temp locaition so we update the environment. Also | ||
# copy "noop.txt" so the COPY instruction does not fail if no environment.yml exists. | ||
COPY environment.yml* .devcontainer/noop.txt /tmp/conda-tmp/ | ||
RUN if [ -f "/tmp/conda-tmp/environment.yml" ]; then /opt/conda/bin/conda env update -n base -f /tmp/conda-tmp/environment.yml; fi \ | ||
&& rm -rf /tmp/conda-tmp | ||
|
||
# Install pylint | ||
RUN /opt/conda/bin/pip install pylint | ||
|
||
# [Optional] Uncomment this section to install additional OS packages. | ||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
# && apt-get -y install --no-install-recommends <your-package-list-here> |
35 changes: 35 additions & 0 deletions
35
containers/python-3-anaconda/.devcontainer/base.Dockerfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
FROM continuumio/anaconda3 | ||
|
||
# [Option] Install zsh | ||
ARG INSTALL_ZSH="true" | ||
# [Option] Upgrade OS packages to their latest versions | ||
ARG UPGRADE_PACKAGES="true" | ||
|
||
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies. | ||
ARG USERNAME=vscode | ||
ARG USER_UID=1000 | ||
ARG USER_GID=$USER_UID | ||
COPY .devcontainer/library-scripts/*.sh /tmp/library-scripts/ | ||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
&& bash /tmp/library-scripts/common-debian.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" \ | ||
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts | ||
|
||
# [Option] Install Node.js | ||
ARG INSTALL_NODE="true" | ||
ARG NODE_VERSION="none" | ||
ENV NVM_DIR=/usr/local/share/nvm | ||
ENV NVM_SYMLINK_CURRENT=true \ | ||
PATH=${NVM_DIR}/current/bin:${PATH} | ||
COPY .devcontainer/library-scripts/node-debian.sh /tmp/library-scripts/ | ||
RUN if [ "$INSTALL_NODE" = "true" ]; then bash /tmp/library-scripts/node-debian.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}"; fi \ | ||
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts | ||
|
||
# Copy environment.yml (if found) to a temp locaition so we update the environment. Also | ||
# copy "noop.txt" so the COPY instruction does not fail if no environment.yml exists. | ||
COPY environment.yml* .devcontainer/noop.txt /tmp/conda-tmp/ | ||
RUN if [ -f "/tmp/conda-tmp/environment.yml" ]; then /opt/conda/bin/conda env update -n base -f /tmp/conda-tmp/environment.yml; fi \ | ||
&& rm -rf /tmp/conda-tmp | ||
|
||
# [Optional] Uncomment this section to install additional OS packages. | ||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
# && apt-get -y install --no-install-recommends <your-package-list-here> |
17 changes: 14 additions & 3 deletions
17
containers/python-3-anaconda/.devcontainer/devcontainer.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
105 changes: 105 additions & 0 deletions
105
containers/python-3-anaconda/.devcontainer/library-scripts/node-debian.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
#!/bin/bash | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. | ||
#------------------------------------------------------------------------------------------------------------- | ||
|
||
# Syntax: ./node-debian.sh [directory to install nvm] [node version to install (use "none" to skip)] [non-root user] | ||
|
||
export NVM_DIR=${1:-"/usr/local/share/nvm"} | ||
export NODE_VERSION=${2:-"lts/*"} | ||
USERNAME=${3:-"vscode"} | ||
UPDATE_RC=${4:-"true"} | ||
|
||
set -e | ||
|
||
if [ "$(id -u)" -ne 0 ]; then | ||
echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' | ||
exit 1 | ||
fi | ||
|
||
# Treat a user name of "none" or non-existant user as root | ||
if [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then | ||
USERNAME=root | ||
fi | ||
|
||
if [ "${NODE_VERSION}" = "none" ]; then | ||
export NODE_VERSION= | ||
fi | ||
|
||
# Ensure apt is in non-interactive to avoid prompts | ||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
# Install curl, apt-transport-https, tar, or gpg if missing | ||
if ! dpkg -s apt-transport-https curl ca-certificates tar > /dev/null 2>&1 || ! type gpg > /dev/null 2>&1; then | ||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then | ||
apt-get update | ||
fi | ||
apt-get -y install --no-install-recommends apt-transport-https curl ca-certificates tar gnupg2 | ||
fi | ||
|
||
# Install yarn | ||
if type yarn > /dev/null 2>&1; then | ||
echo "Yarn already installed." | ||
else | ||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT) | ||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list | ||
apt-get update | ||
apt-get -y install --no-install-recommends yarn | ||
fi | ||
|
||
# Install the specified node version if NVM directory already exists, then exit | ||
if [ -d "${NVM_DIR}" ]; then | ||
echo "NVM already installed." | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
su ${USERNAME} -c "source $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm clear-cache" | ||
fi | ||
exit 0 | ||
fi | ||
|
||
|
||
# Run NVM installer as non-root if needed | ||
mkdir -p ${NVM_DIR} | ||
chown ${USERNAME} ${NVM_DIR} | ||
su ${USERNAME} -c "$(cat << EOF | ||
set -e | ||
# Do not update profile - we'll do this manually | ||
export PROFILE=/dev/null | ||
curl -so- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash | ||
source ${NVM_DIR}/nvm.sh | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
nvm alias default ${NODE_VERSION} | ||
fi | ||
nvm clear-cache | ||
EOF | ||
)" 2>&1 | ||
|
||
if [ "${UPDATE_RC}" = "true" ]; then | ||
echo "Updating /etc/bash.bashrc and /etc/zsh/zshrc with NVM scripts..." | ||
(cat <<EOF | ||
export NVM_DIR="${NVM_DIR}" | ||
sudoIf() | ||
{ | ||
if [ "\$(id -u)" -ne 0 ]; then | ||
sudo "\$@" | ||
else | ||
"\$@" | ||
fi | ||
} | ||
if [ "\$(stat -c '%U' \$NVM_DIR)" != "${USERNAME}" ]; then | ||
if [ "\$(id -u)" -eq 0 ] || type sudo > /dev/null 2>&1; then | ||
echo "Fixing permissions of \"\$NVM_DIR\"..." | ||
sudoIf chown -R ${USERNAME}:root \$NVM_DIR | ||
else | ||
echo "Warning: NVM directory is not owned by ${USERNAME} and sudo is not installed. Unable to correct permissions." | ||
fi | ||
fi | ||
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh" | ||
[ -s "\$NVM_DIR/bash_completion" ] && . "\$NVM_DIR/bash_completion" | ||
EOF | ||
) | tee -a /etc/bash.bashrc >> /etc/zsh/zshrc | ||
fi | ||
|
||
echo "Done!" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.