.github/workflows | ||
.bashrc | ||
.profile | ||
Dockerfile | ||
entrypoint.sh | ||
LICENSE | ||
readme.md | ||
version.txt |
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:
- Clone this repository to your local machine.
- Open the integrated terminal in Visual Studio Code.
- 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.