VS Code Docker image for VSCode Dev Tunnels
Go to file
2024-12-17 15:47:33 +00:00
.github/workflows Fixing github actions workflow. Updating to version 3.1.13 2024-09-10 14:59:04 -06:00
.bashrc Move .bashrc and .profile files to user's home directory Updating to version 3.0.20 2024-04-17 21:52:11 +00:00
.profile Move .bashrc and .profile files to user's home directory Updating to version 3.0.20 2024-04-17 21:52:11 +00:00
Dockerfile Trying to fix issue, updating to version 3.1.12 2024-09-10 14:46:28 -06:00
entrypoint.sh Update permissions for SSH files and increment version number to 3.1.2 2024-04-24 22:17:32 +00:00
LICENSE Initial commit 2023-08-25 09:44:03 -06:00
readme.md Updating docs. Updating to version 3.1.4 2024-06-15 23:58:09 -06:00
version.txt Updating version of vscode. Updating to version 3.1.17 2024-12-17 15:47:33 +00:00

Aleleba VSCode Dockerfile Configuration

This repository contains a Dockerfile configuration for use with Visual Studio Code with dev tunnel.

Getting Started

To run the Docker container, follow these steps:

  1. Clone this repository to your local machine.
  2. Open the integrated terminal in Visual Studio Code.
  3. Run the Docker container by running the following command: docker run -it -e HOME_USER=custom-home-user -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode

Environment Variables

The following environment variables can be set when running the Docker container:

  • HOME_USER: The username of the user running the container. This is used to set the correct permissions on files created in the container.
  • VSCODE_TUNNEL_NAME: The name of the SSH tunnel used by Visual Studio Code to connect to the container.

Custom Environment Variables

You can set custom environment variables for the HOME_USER by using the USER_ENV_ prefix when running the Docker container. These environment variables will be created in the /home/${HOME_USER}/.bashrc file without the USER_ENV_ prefix.

For example, if you want to set a custom environment variable named MY_VARIABLE for the HOME_USER, you can do so by setting the USER_ENV_MY_VARIABLE environment variable when running the Docker container:

docker run -it -e HOME_USER=custom-home-user -e USER_ENV_MY_VARIABLE=my_value -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode

In this example, MY_VARIABLE will be set to my_value in the /home/${HOME_USER}/.bashrc file.

Global Environment Variables

You can set global environment variables by using the GLOBAL_ENV_ prefix when running the Docker container. These environment variables will be created in the /etc/environment file without the GLOBAL_ENV_ prefix.

For example, if you want to set a global environment variable named MY_GLOBAL_VARIABLE, you can do so by setting the GLOBAL_ENV_MY_GLOBAL_VARIABLE environment variable when running the Docker container:

docker run -it -e HOME_USER=custom-home-user -e GLOBAL_ENV_MY_GLOBAL_VARIABLE=my_global_value -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode

In this example, MY_GLOBAL_VARIABLE will be set to my_global_value in the /etc/environment file.

Adding VSCode Extensions

To add VSCode extensions to the container, create a JSON file with an array of objects containing the extension details you want to install, the only Mandatory field is uniqueIdentifier and follow this structure. For example:

[
    {
        "extensionsGroup": {
            "description": "Extensions of Spanish Language Pack",
            "extensions": [
                {
                    "name": "Spanish Language Pack for Visual Studio Code",
                    "notes": "Extension of Spanish Language Pack for Visual Studio Code",
                    "uniqueIdentifier": "ms-ceintl.vscode-language-pack-es"
                }
            ]
        }
    },
    {
        "extensionsGroup": {
            "description": "Extensions of Github Copilot",
            "extensions": [
                {
                    "name": "GitHub Copilot",
                    "notes": "Extension of GitHub Copilot",
                    "uniqueIdentifier": "github.copilot"
                },
                {
                    "name": "GitHub Copilot Chat",
                    "notes": "Extension of GitHub Copilot Chat",
                    "uniqueIdentifier": "github.copilot-chat"
                }
            ]
        }
    }
]

Save this file as extensions.json and add it as a volume when running the Docker container on /home/extensions.json. For example: docker run -it -e HOME_USER=custom-home-user -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode

The extensions will be installed automatically after the container is created.

Using Docker Compose

Alternatively, you can use Docker Compose to run the container with the aleleba/vscode image and the HOME_USER and VSCODE_TUNNEL_NAME environment variables set. Here's an example docker-compose.yml file:

version: '3'

services:
  vscode:
    image: aleleba/vscode
    environment:
      HOME_USER: custom-home-user
      VSCODE_TUNNEL_NAME: vscode-ssh-remote-server
    volumes:
      - /path/to/extensions.json:/home/extensions.json

You can run this docker-compose.yml file by navigating to the directory where it is saved and running the following command: docker-compose up -d

This will start the container in the background and output the container ID. You can then use the docker ps command to view the running container.

Adding Custom Scripts

In this project, you can add custom scripts that will be automatically executed when the application starts. The /usr/bin/custom-scripts directory in the Docker container is a volume that maps to a directory on your host machine. Here's how you can add a custom script:

1. Create a new script file

Create a new file with a .sh extension in the directory on your host machine that maps to the /usr/bin/custom-scripts volume in the Docker container. For example, if the /usr/bin/custom-scripts volume maps to the ./custom-scripts directory on your host machine, you can create a file named install_node.sh in the ./custom-scripts directory.

touch ./custom-scripts/install_node.sh

2. Write your script

Open the file in a text editor and write your script. Here's an example that installs Node.js using NVM:

#!/bin/bash
# Installing Node.js with NVM
sudo curl -O https://raw.githubusercontent.com/creationix/nvm/master/install.sh
bash install.sh
source ~/.nvm/nvm.sh
nvm install --lts
nvm alias default lts/*
nvm use default && npm install -g yo generator-code
nvm use default && npm install -g @vscode/vsce

The #!/bin/bash line at the top of the script tells the system that this script should be run with the Bash shell.

Note on sudo privileges

If the script name includes the word "sudo", the script will be run with root privileges. This is useful if your script needs to perform operations that require superuser privileges.

For instance, if you have a script named install_sudo_package.sh, this script will be run with root privileges due to the inclusion of "sudo" in the file name.

Please be aware of the security implications when running scripts with root privileges. Ensure that your script does not perform any unsafe or destructive operations when run with these privileges.

3. Run your Docker container

When you start your Docker container, all .sh files in the /usr/bin/custom-scripts directory will be automatically executed in alphabetical order. The environment variables from the /etc/environment file will be loaded before each script is executed.

Remember to replace install_node.sh with the name of your script and ./custom-scripts with the actual path to the directory on your host machine that maps to the /usr/bin/custom-scripts volume in the Docker container.

Using this image as a base image in a Dockerfile

To use this image as a base image in a Dockerfile, you can add the following line to the top of your Dockerfile and you can install any additional packages you need, here an example installing nvm and nodejs in a Dockerfile:

FROM aleleba/vscode:latest

ENV HOME_USER=vscode

RUN sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
RUN sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null

USER ${HOME_USER}
WORKDIR /home/${HOME_USER}

# Installing node.js and NVM
SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
RUN nvm install --lts
RUN nvm alias default lts/*
SHELL ["/bin/sh", "-c"]
RUN echo 'source ~/.nvm/nvm.sh' >> ~/.bashrc
# Finishing installing node.js and NVM

Note: If you are using this image as a base image in a Dockerfile, ensure that the value of HOME_USER is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.

Note: To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.

Contributing

If you'd like to contribute to this project, please fork the repository and create a pull request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

I hope this helps! Let me know if you have any further questions.