This document outlines how you can setup a containerized testing/development environment quickly using docker. Using a containerized dashboard image allows for a faster and reproducible test setup. We first have to build the Docker image and then run the container.
$ docker build -t wiki-edu-dashboard .
$ docker compose up -d
Make sure the docker daemon is running. Else, service docker status
. Then, from the root of your development directory (WikiEduDashboard
), issue the build command:
$ docker build -t wiki-edu-dashboard .
This builds the wiki-edu-dashboard
container image using the Dockerfile. The dashboard container image is based on the official ruby:3.1.2-slim
base image. The container image only contains application with all the necessary dependencies.
MySQL and redis is required to be able running docker image. For a developer's ease of use, it's recommended to use docker-compose.yml
which will run wiki-edu-dashboard
with MySQL and redis.
docker compose will mount project directory to the container for development purpose. It will expose port 3000
for rails applications and port 8080
for websocket. Run the compose with the command as follows:
# Run all service
$ docker compose up
This command will start init container, it will wait for MySQL and Redis container to start. Then init container will try to initialized db. If the init container success, app container will start and mount ./
(project directory) to the /app
(container WORKDIR
location). Last, the docker compose will expose the port to make sure the container can be accessible from host computer.
=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
...
...
<s> [webpack.Progress] 100%
60 assets
3389 modules
webpack 5.73.0 compiled successfully in 17961 ms
At this point, developers can continue working in their local work directories and the changes would be reflected inside the container. Live changes are visible on http://localhost:3000
from the host.
Some useful commands and tools that can be used to monitor and administer the containers are:
ctop
docker images
docker inspect <container id>
docker logs -f <container-name>
(see the logs)docker exec -it <container-name> /bin/bash
(Login into container)
Further Reference: https://docs.docker.com/reference/
If you are using Linux you may encounter permission error when trying to change file/folder on host computer. This is caused root user used while running container. To fix this issue, you can change the owner of the file/folder with the following commands on the root project directory:
$ sudo chown $USER:$GROUPS -R ./
The command will change the owner of all file inside project directory to the $USER:$GROUPS