From bba3f336816d52c1168e8aca2103dbc412d5107f Mon Sep 17 00:00:00 2001 From: Thinh Nguyen Date: Thu, 26 Sep 2024 19:32:55 -0500 Subject: [PATCH] feat: update devcontainer --- .devcontainer/Dockerfile | 34 +++++++------------------------ .devcontainer/devcontainer.json | 24 +++++++++++++++++----- .devcontainer/docker-compose.yaml | 14 +++++++------ docker-compose-db.yaml | 12 +++++------ 4 files changed, 39 insertions(+), 45 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2d0e9261..65ad8e08 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,30 +1,12 @@ -FROM python:3.9-slim@sha256:5f0192a4f58a6ce99f732fe05e3b3d00f12ae62e183886bca3ebe3d202686c7f - -ENV PATH /usr/local/bin:$PATH -ENV PYTHON_VERSION 3.9.17 - -RUN \ - adduser --system --disabled-password --shell /bin/bash vscode && \ - # install docker - apt-get update && \ - apt-get install ca-certificates curl gnupg lsb-release -y && \ - mkdir -m 0755 -p /etc/apt/keyrings && \ - curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ - apt-get update && \ - apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y && \ - usermod -aG docker vscode && \ - apt-get clean +ARG PY_VER +ARG DISTRO +FROM mcr.microsoft.com/devcontainers/python:${PY_VER}-${DISTRO} RUN \ # dev setup apt update && \ apt-get install sudo git bash-completion graphviz default-mysql-client s3fs procps -y && \ - usermod -aG sudo vscode && \ - echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \ - pip install --no-cache-dir --upgrade black pip nbconvert && \ - echo '. /etc/bash_completion' >> /home/vscode/.bashrc && \ - echo 'export PS1="\[\e[32;1m\]\u\[\e[m\]@\[\e[34;1m\]\H\[\e[m\]:\[\e[33;1m\]\w\[\e[m\]$ "' >> /home/vscode/.bashrc && \ + pip install --no-cache-dir --upgrade black faker ipykernel pip && \ apt-get clean COPY ./ /tmp/element-array-ephys/ @@ -37,12 +19,10 @@ RUN \ rm -rf /tmp/element-array-ephys && \ apt-get clean -ENV DJ_HOST fakeservices.datajoint.io +USER root +ENV DJ_HOST db ENV DJ_USER root ENV DJ_PASS simple ENV EPHYS_ROOT_DATA_DIR /workspaces/element-array-ephys/example_data -ENV DATABASE_PREFIX neuro_ - -USER vscode -CMD bash -c "sudo rm /var/run/docker.pid; sudo dockerd" \ No newline at end of file +ENV DATABASE_PREFIX neuro_ \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bf939e88..847ec30d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,29 +1,43 @@ { "name": "Environment + Data", - "dockerComposeFile": "docker-compose.yaml", + "dockerComposeFile": [ + "../docker-compose.yml", + "docker-compose.yaml" + ], "service": "app", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, "onCreateCommand": "mkdir -p ${EPHYS_ROOT_DATA_DIR} && pip install -e .", - "postStartCommand": "docker volume prune -f && s3fs ${DJ_PUBLIC_S3_LOCATION} ${EPHYS_ROOT_DATA_DIR} -o nonempty,multipart_size=530,endpoint=us-east-1,url=http://s3.amazonaws.com,public_bucket=1", + "shutdownAction": "stopCompose", + "postStartCommand": "s3fs ${DJ_PUBLIC_S3_LOCATION} ${EPHYS_ROOT_DATA_DIR} -o nonempty,multipart_size=530,endpoint=us-east-1,url=http://s3.amazonaws.com,public_bucket=1", "hostRequirements": { "cpus": 4, "memory": "8gb", "storage": "32gb" }, "forwardPorts": [ - 3306 + 3306, + 80, + 443, + 3306, + 8080, + 9000 ], + "features": { + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/github-cli:1": {} + }, "customizations": { "settings": { "python.pythonPath": "/usr/local/bin/python" }, "vscode": { "extensions": [ - "ms-python.python@2023.8.0", - "ms-toolsai.jupyter@2023.3.1201040234" + "ms-python.python", + "ms-toolsai.jupyter" ] } } diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 7a8c2e14..88a41829 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -1,4 +1,3 @@ -version: "3" services: app: cpus: 4 @@ -6,9 +5,10 @@ services: build: context: .. dockerfile: ./.devcontainer/Dockerfile - # image: datajoint/element_array_ephys:latest - extra_hosts: - - fakeservices.datajoint.io:127.0.0.1 + args: + - PY_VER=${PY_VER:-3.11} + - DISTRO=${DISTRO:-buster} + image: datajoint/element_array_ephys:latest environment: - DJ_PUBLIC_S3_LOCATION=djhub.vathes.datapub.elements:/workflow-array-ephys-benchmark/v2 devices: @@ -18,8 +18,10 @@ services: security_opt: - apparmor:unconfined volumes: - - ..:/workspaces/element-array-ephys:cached + - ..:/workspaces:cached - docker_data:/var/lib/docker # persist docker images - privileged: true # only because of dind + user: root + # Overrides default command so things don't shut down after the process ends. + command: /bin/sh -c "while sleep 1000; do :; done" volumes: docker_data: diff --git a/docker-compose-db.yaml b/docker-compose-db.yaml index 1d453c89..53cd8dc5 100644 --- a/docker-compose-db.yaml +++ b/docker-compose-db.yaml @@ -1,15 +1,13 @@ -# MYSQL_VER=8.0 docker compose -f docker-compose-db.yaml up --build -version: "3" +# MYSQL_VER=8.0 docker compose up --build services: db: restart: always - image: datajoint/mysql:${MYSQL_VER} + image: datajoint/mysql:${MYSQL_VER:-8.0} environment: - - MYSQL_ROOT_PASSWORD=${DJ_PASS} - ports: - - "3306:3306" + - MYSQL_ROOT_PASSWORD=${DJ_PASS:-simple} + command: mysqld --default-authentication-plugin=mysql_native_password healthcheck: test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ] timeout: 15s retries: 10 - interval: 15s + interval: 15s \ No newline at end of file