Skip to main content

docker: storage and services

Docker Volume

Without going through Docker, accessing files within a Docker image is not easy. Therefore, Docker has a volume feature that allows users to specify the location on the host file system to serve as the access directory for Docker. In other words, a volume is the NFS of a Docker image.

Example: Using a volume to store SQLite files.

ref: 

SQLite for NodeJS: https://www.sqlitetutorial.net/sqlite-nodejs/

Initialize the project.

# Setup ExpressJS framework
express --view=pug 240324_ejs_sqlite_docker
npm init
npm install express
npm install sqlite3


Test:

npm start



Initialize docker 

Since the directory already contains NodeJS, the Docker Daemon will assist in the setup.



Create new docker image

docker build -t atfuture7/sqlite01 .

Create a folder for Docker, create a container, run it. 


  mkdir docker_vol
  docker run -p 3000:3000 -v ./docker_vol:/data --name exp_sqlite atfuture7/sqlite01


After confirming that the container can run correctly, stop the container and add content to the app.

Add sample project

This example chooses SQLite because SQLite is essentially just a file format and does not require any other application to run. It can be seen as a simple tool that only uses storage space and complies with the SQL language structure, making it well-suited for testing Docker's NFS.


Sample Web App:

sample code: https://github.com/atfuture7/testcode/tree/master/docker/02_docker_nfs

GitHub only contains all new and modified files. 
To make the new file runnable, it is necessary to install the module mod_story used for running SQLite.

npm install mod_story 

Rebuild Dock image and container


Operational: 

Since my PowerShell does not handle branches, commands are presented in the format I execute them.

  docker build -t atfuture7/sqlite01 .
  docker run  -p 3000:3000 -v ./docker_vol:/data --name exp_sqlite  atfuture7/sqlite01


After executing several additions at http://localhost:3000/idx2, the docker_vol/story.sqlite file can be seen in the execution directory.

* test/www is the entry point of the development environment, with the DB file set to (relative directory) ./docker_vol/story.sqlite.

* bin/www is the production environment, with the DB file set to (absolute directory) /data/story.sqlite.


Programmatic: 





Modify the compose.yaml file to add volume settings. By executing docker compose, the image and container can be built.

docker compose up --build


Docker services


The previous section is about creating your own image and the instructions for creating a container with compose.yaml. What the entry-point of a Docker image is, is determined by the Dockerfile settings. In other words, images pulled from the internet require developers to reveal the information needed to start the image. For complex control mechanisms, using compose would be easier.

Example: MySQL docker 

ref: 
https://www.datacamp.com/tutorial/set-up-and-configure-mysql-in-docker
https://hub.docker.com/_/mysql

Operational: 

docker run --name some-mysql -v ./docker_vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql

Programmatic: 


gitHub: https://github.com/atfuture7/testcode/tree/master/docker/03_docker_mysql



We will discuss the case of compose including several services next time. The example below shows the space occupied by the DB image. 





Comments

  1. The article provides a practical walkthrough of using Docker volumes to persist application data outside containers. The explanation of mapping host directories to container storage using SQLite is particularly useful because it demonstrates a simple yet effective way to understand persistent storage concepts. By comparing Docker volumes to an NFS-like mechanism and showing real examples with ExpressJS and SQLite, the article makes container storage management easier to understand for developers working with Dockerized applications.

    ReplyDelete
  2. A notable strength of the article is its focus on real-world deployment scenarios, including Docker image creation, container management, volume mapping, and Docker Compose integration. These are essential concepts for building scalable and maintainable cloud-native applications. Such technologies are widely used in modern infrastructure and align closely with Cloud Computing Projects, where containerization and resource management play a significant role in application deployment and operations.

    ReplyDelete
  3. The discussion of Docker services, MySQL containers, persistent database storage, and Compose-based orchestration further highlights the importance of managing distributed application environments efficiently. As organizations increasingly adopt containerized architectures and cloud platforms, understanding these deployment models becomes crucial. Students interested in large-scale infrastructure management and data-driven cloud ecosystems can also explore Big Data Projects, where scalable storage, distributed processing, and service orchestration are important components of modern computing environments.

    ReplyDelete

Post a Comment

Popular posts from this blog

Guide to Preserving HuggingFace Models in Google Colab Environments

Conclusion:  Step 1:  find the model path: ls ~/.cache  Step 2:  Copy the entire folder to Google Drive:  Step 3:  Set model path to the subfolder under snapshot: My Story: I initially began exploring Generative AI (GAI) and Google Colab through Stable Diffusion. In the past, as I mainly wrote server services and console applications, I was less familiar with data science modes like R and Jupyter that can maintain a paused state. I didn't quite understand the heavy burden on Colab of creating a temporary Stable Diffusion WebUI with .ipynb, as suggested by popular guides. I just found it troublesome that connections often took a long time and then dropped, requiring a restart. Recently, while testing new versions of the Stable Diffusion model, and facing challenges due to Colab's policies making various versions of WebUI difficult to run successfully, I started researching how to write my own test programs in Colab. Eventually, I understood that Colab is ess...

Bookmark service (MongoDB & Spring REST) -2/2

    I accidentally deleted my development VM. I got lucky having the habit of taking notes. This blog is useful. Development VM is doom to be lost. Rebuild it waste time, but having a clean slate is refreshing~. What concerns me more is my AWS free quota this month is reaching 85%. The second VM I launched but never being used might be the one to blame. (Of course, my mistake.) I terminated the wrong VM. Now I got Linux 2 built. Great, just threw away everything happened on AMI.  1st layer: Page Page class   Originally, I need to prepare getter/setter for all class properties for Spring. By using lombok, I only need to create constructors. lombok will deal with getter/setter and toString(). But there are chances to call getter/setter, but how? .......Naming convention.... Capitalize the 1st character with the prefix get/set.  Annotation @Data was used on this class.  Repository class Spring Docs: Repository https://docs.spring.io/spring-data/mongodb/docs/3....

Bookmark service (MongoDB & Spring REST)

Completed a working version of Bookmark service. Feeling great~~ ha! ha! Finding something to practice is an efficient way of learning. The project concept is redesigned from a MongoDB project. Weeks ago, I was learning MongoDB and NodeJS. Mixing everything together is my hobby. There might be conflictions, but putting all strengths together has higher potential to resolve difficult and complex problems. Elites getting together might sometimes not be easy, I mean technology, of course. Nice things deserve practice.  Building your first application with MongoDB: Creating a REST API using the MEAN Stack https://www.mongodb.com/blog/post/building-your-first-application-mongodb-creating-rest-api-using-mean-stack-part-1   After redesign…… is ….extremely simple…. But contains enough new topics for me to explore. I’m just a starter of Spring (and a veteran of OO and Cloud programming). Keep everything simple and fast.    I applied to cloud services (like AWS), online artist...