Sign inSign up

avdteam/vscode

By avdteam

•Updated over 5 years ago

VScode container to work with AVD

Image
0

1.4K

avdteam/vscode repository overview

GitHub Docker Pulls Docker Image Size (tag) Docker Image Version (tag latest semver)

⁠VScode for AVD

⁠About

This repository provides a Docker image running cdr/code-server⁠ preconfigued with Arista Validated Design⁠ environment.

Docker image: avdteam/vscode⁠

Arista AVD Docker Image

⁠Getting started

# Run avdteam/vscode container
$ docker run --rm -d -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 avdteam/vscode:latest

# Connect to your browser
$ open http://127.0.0.1:8080

As it is for development and local use only, there is no password protection ! Never expose container to untrust or Internet.

⁠Container options

⁠Generic settings
  • AVD_MODE: If set to demo, container will install AVD content to test it from get.avd.sh.
    • Supported mode: ['demo', 'toi']
  • AVD_PASSWORD: Allow user to set a password to use for VScode authentication. If not set, access is not protected by any password.
  • AVD_GIT_USER: Username to configure in .gitconfig file.
    • Can be set with AVD_GIT_USER=$(git config --get user.name)
  • AVD_GIT_EMAIL: Email to configure in .gitconfig file.
    • Can be set with AVD_GIT_EMAIL=$(git config --get user.email)
  • AVD_USER_EXTENSIONS_FILE: Allow user to installed additional VScode extensions
  • AVD_USER_REPOS: Path to a text file in your container with a list of repository to clone (1 repository per line)
  • AVD_USER_SCRIPT: Path to a shell script to execute during entrypoint execution.
⁠User settings

These settings must be used to mount and edit file from your physical host.

  • AVD_UID: set uid for avd user in container.
  • AVD_GID: set gid for avd user in container.
⁠Docker in Docker

Current container has docker installed and can be used in a Docker-in-Docker approach. To run docker, you must share your docker socket with container:

Docker Socket on Linux / Macos

-v /var/run/docker.sock:/var/run/docker.sock

Docker Socket on Windows

-v //var/run/docker.sock:/var/run/docker.sock

⁠Examples

⁠Use container to run demo content
docker run --rm -it -d \
    -e AVD_MODE=demo \
    -e AVD_GIT_USER=titom73 \
    -e [email protected] \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest
⁠Use container to work on your local version
docker run --rm -it -d \
    -e AVD_GIT_USER=titom73 \
    -e [email protected] \
    -v ${PWD}/your-local-work:/home/avd/arista-ansible \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest
⁠Use container with your custom extensions list
docker run --rm -it -d \
    -e AVD_USER_EXTENSIONS_FILE=my_settings/user-extensions.txt \
    -e AVD_GIT_USER=titom73 \
    -e [email protected] \
    -v ${PATH_TO_FOLDER_WITH_EXT_FILE}/tests:/home/avd/my_settings \
    -v ${PWD}/your-local-work:/home/avd/arista-ansible \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest

⁠Deployment Scenario

⁠Docker Compose

Easy to manage TOI and ATD with docker-compose command

# Start single node stack
$ docker-compose up -d
Creating network "avd-vscode_default" with the default driver
Creating avd-vscode_avd-coder_1 ... done

# get dynamic port mapping
$ docker-compose ps
         Name                 Command         State            Ports
-----------------------------------------------------------------------------
avd-vscode_avd-coder_1   /bin/entrypoint.sh   Up      0.0.0.0:55000->8080/tcp

# Scale up environment
$ docker-compose --scale avd-coder=3
Creating avd-vscode_avd-coder_2 ... done
Creating avd-vscode_avd-coder_3 ... done

$ docker-compose ps
         Name                 Command         State            Ports
-----------------------------------------------------------------------------
avd-vscode_avd-coder_1   /bin/entrypoint.sh   Up      0.0.0.0:55000->8080/tcp
avd-vscode_avd-coder_2   /bin/entrypoint.sh   Up      0.0.0.0:55002->8080/tcp
avd-vscode_avd-coder_3   /bin/entrypoint.sh   Up      0.0.0.0:55001->8080/tcp
⁠Kubernetes deployment
$ kubectl apply -f k8s-deployment.yml
deployment.apps/avd-coder-deployment created
service/avd-coder-service created

$ kubectl get service
NAME                TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
avd-coder-service   NodePort   10.152.183.196   <none>        8080:31081/TCP   5s
⁠Alias for shell rc file
# AVD VScode image name
export AVD_VSCODE_IMAGE=avdteam/vscode

# Version of AVD VScode image to use
export AVD_VSCODE_VERSION=latest

# Vscode container command line to start
base_avd_vsc() {
        container_id=$(docker run -P -it --rm -d \
          -e AVD_GIT_USER="$(git config --get user.name)" \
          -e AVD_GIT_EMAIL="$(git config --get user.email)" \
          -v /var/run/docker.sock:/var/run/docker.sock \
          -v ${PWD}/:/home/avd/local_projects \
          ${AVD_VSCODE_IMAGE}:${AVD_VSCODE_VERSION})
        echo "Container ${container_id} has been created ..."
        export mapped_port=$(docker inspect --format="{{(index (index .NetworkSettings.Ports \"8080/tcp\") 0).HostPort}}" ${container_id})
        echo "-> Open http://127.0.0.1:${mapped_port}/?folder=/home/avd"
}

# Stop all VScode isntances
avd-vsc-stop() {
  docker ps -a | grep -e "${AVD_VSCODE_IMAGE}" | gawk '{print $1}' | xargs docker stop
}

# Alias to start a new instance from where you are in shell
alias avd-vsc='base_avd_vsc'

# Update image from docker-hub
alias avd-vsc-update='docker pull ${AVD_VSCODE_IMAGE}:${AVD_VSCODE_VERSION}'

⁠License

Project is published under Apache 2.0 License⁠

Tag summary

Content type

Image

Digest

Size

1.1 GB

Last updated

over 5 years ago

docker pull avdteam/vscode