Containerize application with Docker (#116)

* add dockerfile
* use latest tag instead of latest commit
* Added docker instructions
* define entrypoint
* specify to cd into directory after git clone
* include config flag
This commit is contained in:
Tomás Ralph 2023-04-16 21:22:29 -03:00 committed by GitHub
parent 994711b887
commit 6e3404e66e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 82 additions and 0 deletions

33
Dockerfile Normal file
View File

@ -0,0 +1,33 @@
FROM node:latest AS CLIENT
RUN git clone https://github.com/geoffrey45/swing-client.git client
WORKDIR /client
RUN git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
RUN yarn install
RUN yarn build
FROM python:latest
WORKDIR /app/swingmusic
COPY . .
COPY --from=CLIENT /client/dist/ client
EXPOSE 1970/tcp
VOLUME /music
VOLUME /config
RUN pip install poetry
RUN poetry config virtualenvs.create false
RUN poetry install
ENTRYPOINT ["poetry", "run", "python", "manage.py", "--host", "0.0.0.0", "--config", "/config"]

View File

@ -51,6 +51,55 @@ swingmusic --host 0.0.0.0
The link to access the app will be printed on your terminal. Copy it and open it in your browser. The link to access the app will be printed on your terminal. Copy it and open it in your browser.
### Docker
You can run Swing in a Docker container. To do so, clone the repository and build the image:
git clone https://github.com/swing-opensource/swingmusic.git --depth 1
cd swingmusic
docker build . -t swingmusic
Then create the container. Here are some example snippets to help you get started creating a container.
#### docker-compose
```yaml
---
version: "3.8"
services:
swing:
image: swingmusic
container_name: swingmusic
volumes:
- /path/to/music:/music
- /path/to/config:/config
ports:
- 1970:1970
restart: unless-stopped
```
#### docker cli
```bash
docker run -d \
--name=swingmusic \
-p 1970:1970 \
-v /path/to/music:/music \
-v /path/to/config:/config \
--restart unless-stopped \
swingmusic
```
#### Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function |
| :----: | --- |
| `-p 1970` | WebUI |
| `-v /music` | Recommended directory to store your music collection. You can bind other folder if you wish. |
| `-v /config` | Configuration files. |
### Development ### Development
This project is broken down into 2. The client and the server. The client comprises of the user interface code. This part is written in Typescript, Vue 3 and SCSS. To setup the client, checkout the [swing client repo ](https://github.com/geoffrey45/swing-client) on GitHub. This project is broken down into 2. The client and the server. The client comprises of the user interface code. This part is written in Typescript, Vue 3 and SCSS. To setup the client, checkout the [swing client repo ](https://github.com/geoffrey45/swing-client) on GitHub.