Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hughplay/dockerlab
:alien: Build a docker container as your workspace.
https://github.com/hughplay/dockerlab
docker docker-compose
Last synced: 4 days ago
JSON representation
:alien: Build a docker container as your workspace.
- Host: GitHub
- URL: https://github.com/hughplay/dockerlab
- Owner: hughplay
- License: mit
- Created: 2023-03-08T03:01:27.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-14T02:20:58.000Z (about 1 month ago)
- Last Synced: 2025-01-31T04:31:45.303Z (14 days ago)
- Topics: docker, docker-compose
- Language: Dockerfile
- Homepage:
- Size: 134 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.en.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
DockerLab
[![Package Building Status](https://img.shields.io/github/actions/workflow/status/hughplay/dockerlab/poetry-publish.yml?label=Package%20Build&style=flat-square)](https://github.com/hughplay/dockerlab/actions)
[![pypi](https://img.shields.io/pypi/v/dockerlab?color=blue&label=pypi&style=flat-square)](https://pypi.org/project/dockerlab/)
[![Image Building Status](https://img.shields.io/github/actions/workflow/status/hughplay/dockerlab/images-build.yml?label=Image%20Build&style=flat-square)](https://github.com/hughplay/dockerlab/actions)
[![](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square&labelColor=gray)](#license)
[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=flat-square&logo=docker&logoColor=white)](https://docs.docker.com/engine/)*Build a docker container as your workspace.*
## Pre-requirements
- [Docker](https://docs.docker.com/engine/install)
## Features
- **Easy to use**: Just a few commands to build and start a docker container.
- **Customizable**: You can customize the docker image and the python packages you want to install in the container.
- **Reproducible**: You can build the same docker image on different machines. Say bye bye to the ["It works on my machine"](https://www.reddit.com/r/ProgrammerHumor/comments/70we66/it_works_on_my_machine/) problem.
- **Convenient**: We made some convenient setups for you, including tools and functions:
- tools: [oh-my-zsh](https://ohmyz.sh/), [docker within docker](https://www.docker.com/blog/docker-can-now-run-within-docker/), [tmux](https://github.com/tmux/tmux/wiki), [lightvim](https://github.com/hughplay/lightvim)
- free of permission problems: same uid and gid as the host
- reversely mounting $HOME directory from container to host
- easy to share `~/.ssh` and `~/.gitconfig`
- files will not be lost even if the container is removed, e.g., zsh history, configuration files, model checkpoints, ...
- free of port mapping: sharing network with the host
- **Pre-built Images**: We provide several basic [pre-built images](dockerlab/templates/) for quickly setting up your own workspace environment.## Quick Start
**1. Install dockerlab**
Install dockerlab with pip:
```bash
pip install dockerlab
```Or install the latest version from source:
```bash
pip install git+https://github.com/hughplay/dockerlab.git
```**2. Setup a dockerlab project**
Create a new dockerlab project:
```bash
dockerlab new
```Or init a dockerlab environment for the existing project:
```bash
dockerlab init .
```This will setup a few files and directories, the structure is as follows:
```bash
.
├── docker/
│ ├── Dockerfile
│ └── misc/
├── docker-compose.yml
├── docker.py
├── Makefile
└── .gitignore
```**3. DIY your own workspace environment**
In general, you only need to modify `docker/Dockerfile` to customize your own workspace environment. Files you may care about:
- `docker/Dockerfile`: The dockerfile for building the docker image.
- `docker-compose.yml`: The docker-compose file for building the docker container.
- `docker.py`: The python script for building and starting the container.
- `Makefile`: Convenient commands based on make.We have prepared several templates and pre-built docker images for you. You can replace the default `docker/Dockerfile` with the template you like by running the following command:
```bash
dockerlab use
```The available templates can be listed by `dockerlab ls`, and the details of each template can be found in [dockerlab/templates](dockerlab/templates).
By default, the generated `docker/Dockerfile` will use pre-built docker images if there exists. You can also get the full dockerfile by running the following command:
```bash
dockerlab use --full
```**4. Build and start the container**
```bash
make init
```When you first execute the above command, it will ask you to enter information related to the container and store them in `.env`. The example of prompt and the output are as follows:
```bash
# prompts
Give a project name [dockerlab]: dockerlab
Code root to be mounted at /project [.]:
Data root to be mounted at /data [data]:
`/home/hongxin/code/dockerlab/data` does not exist in your machine. Create? [yes]:
Log root to be mounted at /log [log]:
`/home/hongxin/code/dockerlab/log` does not exist in your machine. Create? [yes]:
directory to be mounted to hongxin [./docker/misc/container_home]:
`/home/hongxin/code/dockerlab/container_home` does not exist in your machine. Create? [yes]:# output
Your setting (.env):
UID: 1000
GID: 1000
USER_NAME: hongxin
PROJECT: dockerlab
CODE_ROOT: .
DATA_ROOT: /home/hongxin/code/dockerlab/data
LOG_ROOT: /home/hongxin/code/dockerlab/log
CONTAINER_HOME: /home/hongxin/code/dockerlab/container_home
COMPOSE_PROJECT_NAME: dockerlab_hongxin
```**5. Get in the container and start your journey.**
```bash
make in
```## License
DockerLab is released under the [MIT license](LICENSE).