-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Moses Fabiyi <90117777+officialmofabs@users.noreply.github.com>
- Loading branch information
0 parents
commit 062f99a
Showing
68 changed files
with
11,952 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
ARG DEBIAN_VERSION=12-slim | ||
|
||
ARG DOCKER_VERSION=v25.0.2 | ||
ARG COMPOSE_VERSION=v2.24.5 | ||
ARG BUILDX_VERSION=v0.12.1 | ||
ARG LOGOLS_VERSION=v1.3.7 | ||
ARG BIT_VERSION=v1.1.2 | ||
ARG GH_VERSION=v2.43.1 | ||
ARG DEVTAINR_VERSION=v0.6.0 | ||
|
||
FROM qmcgaw/binpot:docker-${DOCKER_VERSION} AS docker | ||
FROM qmcgaw/binpot:compose-${COMPOSE_VERSION} AS compose | ||
FROM qmcgaw/binpot:buildx-${BUILDX_VERSION} AS buildx | ||
FROM qmcgaw/binpot:logo-ls-${LOGOLS_VERSION} AS logo-ls | ||
FROM qmcgaw/binpot:bit-${BIT_VERSION} AS bit | ||
FROM qmcgaw/binpot:gh-${GH_VERSION} AS gh | ||
FROM qmcgaw/devtainr:${DEVTAINR_VERSION} AS devtainr | ||
|
||
FROM debian:${DEBIAN_VERSION} | ||
ARG CREATED | ||
ARG COMMIT | ||
ARG VERSION=local | ||
LABEL \ | ||
org.opencontainers.image.authors="quentin.mcgaw@gmail.com" \ | ||
org.opencontainers.image.created=$CREATED \ | ||
org.opencontainers.image.version=$VERSION \ | ||
org.opencontainers.image.revision=$COMMIT \ | ||
org.opencontainers.image.url="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.documentation="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.source="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.title="Base Dev container Debian" \ | ||
org.opencontainers.image.description="Base Debian development container for Visual Studio Code Remote Containers development" | ||
ENV BASE_VERSION="${VERSION}-${CREATED}-${COMMIT}" | ||
|
||
# CA certificates | ||
RUN apt-get update -y && \ | ||
apt-get install -y --no-install-recommends ca-certificates && \ | ||
rm -r /var/cache/* /var/lib/apt/lists/* | ||
|
||
# Timezone | ||
RUN apt-get update -y && \ | ||
apt-get install -y --no-install-recommends tzdata && \ | ||
rm -r /var/cache/* /var/lib/apt/lists/* | ||
ENV TZ= | ||
|
||
# Setup Git and SSH | ||
# Workaround for older Debian in order to be able to sign commits | ||
RUN echo "deb https://deb.debian.org/debian bookworm main" >> /etc/apt/sources.list && \ | ||
apt-get update && \ | ||
apt-get install -y --no-install-recommends -t bookworm git git-man && \ | ||
rm -r /var/cache/* /var/lib/apt/lists/* | ||
RUN apt-get update -y && \ | ||
apt-get install -y --no-install-recommends man openssh-client less && \ | ||
rm -r /var/cache/* /var/lib/apt/lists/* | ||
COPY .ssh.sh /root/ | ||
RUN chmod +x /root/.ssh.sh | ||
# Retro-compatibility symlink | ||
RUN ln -s /root/.ssh.sh /root/.windows.sh | ||
|
||
# Setup shell | ||
ENTRYPOINT [ "/bin/zsh" ] | ||
RUN apt-get update -y && \ | ||
apt-get install -y --no-install-recommends zsh nano locales wget && \ | ||
apt-get autoremove -y && \ | ||
apt-get clean -y && \ | ||
rm -r /var/cache/* /var/lib/apt/lists/* | ||
ENV EDITOR=nano \ | ||
LANG=en_US.UTF-8 \ | ||
# MacOS compatibility | ||
TERM=xterm | ||
RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment && \ | ||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \ | ||
echo "LANG=en_US.UTF-8" > /etc/locale.conf && \ | ||
locale-gen en_US.UTF-8 | ||
RUN usermod --shell /bin/zsh root | ||
|
||
COPY shell/.zshrc shell/.welcome.sh /root/ | ||
RUN git clone --single-branch --depth 1 https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh | ||
|
||
ARG POWERLEVEL10K_VERSION=v1.16.1 | ||
COPY shell/.p10k.zsh /root/ | ||
RUN git clone --branch ${POWERLEVEL10K_VERSION} --single-branch --depth 1 https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/custom/themes/powerlevel10k && \ | ||
rm -rf ~/.oh-my-zsh/custom/themes/powerlevel10k/.git | ||
|
||
# Docker CLI | ||
COPY --from=docker /bin /usr/local/bin/docker | ||
ENV DOCKER_BUILDKIT=1 | ||
|
||
# Docker compose | ||
COPY --from=compose /bin /usr/libexec/docker/cli-plugins/docker-compose | ||
ENV COMPOSE_DOCKER_CLI_BUILD=1 | ||
RUN echo "alias docker-compose='docker compose'" >> /root/.zshrc | ||
|
||
# Buildx plugin | ||
COPY --from=buildx /bin /usr/libexec/docker/cli-plugins/docker-buildx | ||
|
||
# Logo ls | ||
COPY --from=logo-ls /bin /usr/local/bin/logo-ls | ||
RUN echo "alias ls='logo-ls'" >> /root/.zshrc | ||
|
||
# Bit | ||
COPY --from=bit /bin /usr/local/bin/bit | ||
ARG TARGETPLATFORM | ||
RUN if [ "${TARGETPLATFORM}" != "linux/s390x" ]; then echo "y" | bit complete; fi | ||
|
||
COPY --from=gh /bin /usr/local/bin/gh | ||
|
||
COPY --from=devtainr /devtainr /usr/local/bin/devtainr |
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,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2019 Quentin McGaw | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
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,155 @@ | ||
# Base Dev Container | ||
|
||
Base Alpine development container for Visual Studio Code, used as base image by other images | ||
|
||
<img height="300" src="https://raw.githubusercontent.com/qdm12/basedevcontainer/master/title.svg"> | ||
|
||
[![Alpine](https://github.com/qdm12/basedevcontainer/actions/workflows/alpine.yml/badge.svg)](https://github.com/qdm12/basedevcontainer/actions/workflows/alpine.yml) | ||
[![Debian](https://github.com/qdm12/basedevcontainer/actions/workflows/debian.yml/badge.svg)](https://github.com/qdm12/basedevcontainer/actions/workflows/debian.yml) | ||
|
||
[![dockeri.co](https://dockeri.co/image/qmcgaw/basedevcontainer)](https://hub.docker.com/r/qmcgaw/basedevcontainer) | ||
|
||
![Last release](https://img.shields.io/github/release/qdm12/basedevcontainer?label=Last%20release) | ||
![Last Docker tag](https://img.shields.io/docker/v/qmcgaw/basedevcontainer?sort=semver&label=Last%20Docker%20tag) | ||
[![Last release size](https://img.shields.io/docker/image-size/qmcgaw/basedevcontainer?sort=semver&label=Last%20released%20image)](https://hub.docker.com/r/qmcgaw/basedevcontainer/tags?page=1&ordering=last_updated) | ||
![GitHub last release date](https://img.shields.io/github/release-date/qdm12/basedevcontainer?label=Last%20release%20date) | ||
![Commits since release](https://img.shields.io/github/commits-since/qdm12/basedevcontainer/latest?sort=semver) | ||
|
||
[![Latest size](https://img.shields.io/docker/image-size/qmcgaw/basedevcontainer/latest?label=Latest%20image)](https://hub.docker.com/r/qmcgaw/basedevcontainer/tags) | ||
|
||
[![GitHub last commit](https://img.shields.io/github/last-commit/qdm12/basedevcontainer.svg)](https://github.com/qdm12/basedevcontainer/commits/master) | ||
[![GitHub commit activity](https://img.shields.io/github/commit-activity/y/qdm12/basedevcontainer.svg)](https://github.com/qdm12/basedevcontainer/graphs/contributors) | ||
[![GitHub closed PRs](https://img.shields.io/github/issues-pr-closed/qdm12/basedevcontainer.svg)](https://github.com/qdm12/basedevcontainer/pulls?q=is%3Apr+is%3Aclosed) | ||
[![GitHub issues](https://img.shields.io/github/issues/qdm12/basedevcontainer.svg)](https://github.com/qdm12/basedevcontainer/issues) | ||
[![GitHub closed issues](https://img.shields.io/github/issues-closed/qdm12/basedevcontainer.svg)](https://github.com/qdm12/basedevcontainer/issues?q=is%3Aissue+is%3Aclosed) | ||
|
||
[![Lines of code](https://img.shields.io/tokei/lines/github/qdm12/basedevcontainer)](https://github.com/qdm12/basedevcontainer) | ||
![Code size](https://img.shields.io/github/languages/code-size/qdm12/basedevcontainer) | ||
![GitHub repo size](https://img.shields.io/github/repo-size/qdm12/basedevcontainer) | ||
|
||
[![MIT](https://img.shields.io/github/license/qdm12/basedevcontainer)](https://github.com/qdm12/basedevcontainer/master/LICENSE) | ||
![Visitors count](https://visitor-badge.laobi.icu/badge?page_id=basedevcontainer.readme) | ||
|
||
## Features | ||
|
||
- `qmcgaw/basedevcontainer:alpine` (or `:latest`) based on Alpine 3.19 in **230MB** | ||
- `qmcgaw/basedevcontainer:debian` based on Debian Buster Slim in **376MB** | ||
- All images are compatible with `amd64`, `386`, `arm64`, `armv7`, `armv6` and `ppc64le` CPU architectures | ||
- Contains the packages: | ||
- `libstdc++`: needed by the VS code server | ||
- `zsh`: main shell instead of `/bin/sh` | ||
- `git`: interact with Git repositories | ||
- `openssh-client`: use SSH keys | ||
- `nano`: edit files from the terminal | ||
- Contains the binaries: | ||
- [`gh`](https://github.com/cli/cli): interact with Github with the terminal | ||
- `docker` | ||
- `docker-compose` and `docker compose` docker plugin | ||
- [`docker buildx`](https://github.com/docker/buildx) docker plugin | ||
- [`bit`](https://github.com/chriswalz/bit) | ||
- [`devtainr`](https://github.com/qdm12/devtainr) | ||
- Custom integrated terminal | ||
- Based on zsh and [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) | ||
- Uses the [Powerlevel10k](https://github.com/romkatv/powerlevel10k) theme | ||
- With [Logo LS](https://github.com/Yash-Handa/logo-ls) as a replacement for `ls` | ||
- Shows information on login; easily extensible | ||
- Cross platform | ||
- Easily bind mount your SSH keys to use with **git** | ||
- Manage your host Docker from within the dev container on Linux, MacOS and Windows | ||
- Docker uses buildkit by default, with the latest Docker client binary. | ||
- Extensible with docker-compose.yml | ||
- Supports SSH keys with Linux, OSX and Windows | ||
|
||
## Requirements | ||
|
||
- [Docker](https://www.docker.com/products/docker-desktop) installed and running | ||
- If you don't use Linux, share the directories `~/.ssh` and the directory of your project with Docker Desktop | ||
- [Docker Compose](https://docs.docker.com/compose/install/) installed | ||
- [VS code](https://code.visualstudio.com/download) installed | ||
- [VS code remote containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) installed | ||
|
||
## Setup for a project | ||
|
||
1. Download this repository and put the `.devcontainer` directory in your project. | ||
Alternatively, use this shell script from your project path | ||
|
||
```sh | ||
# we assume you are in /yourpath/myproject | ||
mkdir .devcontainer | ||
cd .devcontainer | ||
wget -q https://raw.githubusercontent.com/qdm12/basedevcontainer/master/.devcontainer/devcontainer.json | ||
wget -q https://raw.githubusercontent.com/qdm12/basedevcontainer/master/.devcontainer/docker-compose.yml | ||
``` | ||
|
||
1. If you have a *.vscode/settings.json*, eventually move the settings to *.devcontainer/devcontainer.json* in the `"settings"` section as *.vscode/settings.json* take precedence over the settings defined in *.devcontainer/devcontainer.json*. | ||
1. Open the command palette in Visual Studio Code (CTRL+SHIFT+P) and select `Remote-Containers: Open Folder in Container...` and choose your project directory | ||
## More | ||
### devcontainer.json | ||
- You can change the `"postCreateCommand"` to be relevant to your situation. In example it could be `echo "downloading" && npm i` to combine two commands | ||
- You can change the extensions installed in the Docker image within the `"extensions"` array | ||
- VScode settings can be changed or added in the `"settings"` object. | ||
### docker-compose.yml | ||
- You can publish a port to access it from your host | ||
- Add containers to be launched with your development container. In example, let's add a postgres database. | ||
1. Add this block to `.devcontainer/docker-compose.yml` | ||
```yml | ||
database: | ||
image: postgres | ||
restart: always | ||
environment: | ||
POSTGRES_PASSWORD: password | ||
``` | ||
1. In `.devcontainer/devcontainer.json` change the line `"runServices": ["vscode"],` to `"runServices": ["vscode", "database"],` | ||
1. In the VS code command palette, rebuild the container | ||
### Development image | ||
You can build and extend the Docker development image to suit your needs. | ||
- You can build the development image yourself: | ||
```sh | ||
docker build -t qmcgaw/basedevcontainer -f alpine.Dockerfile https://github.com/qdm12/basedevcontainer.git | ||
``` | ||
- You can extend the Docker image `qmcgaw/basedevcontainer` with your own instructions. | ||
1. Create a file `.devcontainer/Dockerfile` with `FROM qmcgaw/basedevcontainer` | ||
1. Append instructions to the Dockerfile created. For example: | ||
- Add more Go packages and add an alias | ||
```Dockerfile | ||
FROM qmcgaw/basedevcontainer | ||
COPY . . | ||
RUN echo "alias ls='ls -al'" >> ~/.zshrc | ||
``` | ||
- Add some Alpine packages, you will need to switch to `root`: | ||
```Dockerfile | ||
FROM qmcgaw/basedevcontainer | ||
USER root | ||
RUN apk add bind-tools | ||
USER vscode | ||
``` | ||
1. Modify `.devcontainer/docker-compose.yml` and add `build: .` in the vscode service. | ||
1. Open the VS code command palette and choose `Remote-Containers: Rebuild container` | ||
- You can bind mount a file at `/home/vscode/.welcome.sh` to modify the welcome message (use `/root/.welcome.sh` for `root`) | ||
## TODO | ||
- [ ] `bit complete` yes flag | ||
- [ ] Firewall, see [this](https://code.visualstudio.com/docs/remote/containers#_what-are-the-connectivity-requirements-for-the-vs-code-server-when-it-is-running-in-a-container) | ||
- [ ] Extend another docker-compose.yml | ||
- [ ] Fonts for host OS for the VS code shell | ||
- [ ] Gifs and images | ||
- [ ] Install VS code server and extensions in image, waiting for [this issue](https://github.com/microsoft/vscode-remote-release/issues/1718) |
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,95 @@ | ||
ARG ALPINE_VERSION=3.19 | ||
|
||
ARG DOCKER_VERSION=v25.0.2 | ||
ARG COMPOSE_VERSION=v2.24.5 | ||
ARG BUILDX_VERSION=v0.12.1 | ||
ARG LOGOLS_VERSION=v1.3.7 | ||
ARG BIT_VERSION=v1.1.2 | ||
ARG GH_VERSION=v2.43.1 | ||
ARG DEVTAINR_VERSION=v0.6.0 | ||
|
||
FROM qmcgaw/binpot:docker-${DOCKER_VERSION} AS docker | ||
FROM qmcgaw/binpot:compose-${COMPOSE_VERSION} AS compose | ||
FROM qmcgaw/binpot:buildx-${BUILDX_VERSION} AS buildx | ||
FROM qmcgaw/binpot:logo-ls-${LOGOLS_VERSION} AS logo-ls | ||
FROM qmcgaw/binpot:bit-${BIT_VERSION} AS bit | ||
FROM qmcgaw/binpot:gh-${GH_VERSION} AS gh | ||
FROM qmcgaw/devtainr:${DEVTAINR_VERSION} AS devtainr | ||
|
||
FROM alpine:${ALPINE_VERSION} | ||
ARG CREATED | ||
ARG COMMIT | ||
ARG VERSION=local | ||
LABEL \ | ||
org.opencontainers.image.authors="quentin.mcgaw@gmail.com" \ | ||
org.opencontainers.image.created=$CREATED \ | ||
org.opencontainers.image.version=$VERSION \ | ||
org.opencontainers.image.revision=$COMMIT \ | ||
org.opencontainers.image.url="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.documentation="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.source="https://github.com/qdm12/basedevcontainer" \ | ||
org.opencontainers.image.title="Base Dev container" \ | ||
org.opencontainers.image.description="Base Alpine development container for Visual Studio Code Remote Containers development" | ||
ENV BASE_VERSION="${VERSION}-${CREATED}-${COMMIT}" | ||
|
||
# CA certificates | ||
RUN apk add -q --update --progress --no-cache ca-certificates | ||
|
||
# Timezone | ||
RUN apk add -q --update --progress --no-cache tzdata | ||
ENV TZ= | ||
|
||
# Setup Git and SSH | ||
RUN apk add -q --update --progress --no-cache git mandoc git-doc openssh-client | ||
COPY .ssh.sh /root/ | ||
RUN chmod +x /root/.ssh.sh | ||
# Retro-compatibility symlink | ||
RUN ln -s /root/.ssh.sh /root/.windows.sh | ||
|
||
WORKDIR /root | ||
|
||
# Setup shell for root and ${USERNAME} | ||
ENTRYPOINT [ "/bin/zsh" ] | ||
RUN apk add -q --update --progress --no-cache zsh nano zsh-vcs | ||
ENV EDITOR=nano \ | ||
LANG=en_US.UTF-8 \ | ||
# MacOS compatibility | ||
TERM=xterm | ||
RUN apk add -q --update --progress --no-cache shadow && \ | ||
usermod --shell /bin/zsh root && \ | ||
apk del shadow | ||
|
||
COPY shell/.zshrc shell/.welcome.sh /root/ | ||
RUN git clone --single-branch --depth 1 https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh | ||
|
||
COPY shell/.p10k.zsh /root/ | ||
RUN apk add -q --update --progress --no-cache zsh-theme-powerlevel10k gitstatus && \ | ||
ln -s /usr/share/zsh/plugins/powerlevel10k ~/.oh-my-zsh/custom/themes/powerlevel10k | ||
|
||
# Docker CLI | ||
COPY --from=docker /bin /usr/local/bin/docker | ||
ENV DOCKER_BUILDKIT=1 | ||
|
||
# Docker compose | ||
COPY --from=compose /bin /usr/libexec/docker/cli-plugins/docker-compose | ||
ENV COMPOSE_DOCKER_CLI_BUILD=1 | ||
RUN echo "alias docker-compose='docker compose'" >> /root/.zshrc | ||
|
||
# Buildx plugin | ||
COPY --from=buildx /bin /usr/libexec/docker/cli-plugins/docker-buildx | ||
|
||
# Logo ls | ||
COPY --from=logo-ls /bin /usr/local/bin/logo-ls | ||
RUN echo "alias ls='logo-ls'" >> /root/.zshrc | ||
|
||
# Bit | ||
COPY --from=bit /bin /usr/local/bin/bit | ||
ARG TARGETPLATFORM | ||
RUN if [ "${TARGETPLATFORM}" != "linux/s390x" ]; then echo "y" | bit complete; fi | ||
|
||
COPY --from=gh /bin /usr/local/bin/gh | ||
|
||
COPY --from=devtainr /devtainr /usr/local/bin/devtainr | ||
|
||
# VSCode specific (speed up setup) | ||
RUN apk add -q --update --progress --no-cache libstdc++ |
Oops, something went wrong.