Örneğimizde fronend de HTML ve JS, backend de Nodejs ve onunla çalışan Mongodb ile mongodb ye GUI sağlayan mongoExpress olacak.
JS uygulaması persistent değil yani sayfayı refresh edince veri kayboluyor. Persistent olması için bir DB ye bağlamak gerekiyor. Dolayısıyla önce docker huba gidip kendimize bir mongo db kuracağız.
docker pull mongo
docker pull mongo-express
Daha sonra bunları dışarıya açmamıza gerek yok dolayısıyla isole bir network içinde çalışırlarsa hem daha güvenli olur hemde ip yerine direk container isimleri ile birbirleri ile iletişim kurabilirler.
Önce mevcut Docker networklerine bakalım sonrada bir tane yaratalım.
can@deb11-VM1:~/jsproject$ docker network ls
NETWORK ID NAME DRIVER SCOPE
54e094f34f0d bridge bridge local
61e0e28b7e6a gitea_gitea bridge local
f4f5280b5bf2 host host local
8ca4439ddb19 none null local
can@deb11-VM1:~/jsproject$ docker network create mongo-network
1fec272a1e3ac8733924606d986c04ba0a6ba8d7efad471071334e9149f68fe0
Container geldi ama nasıl kullanacağızı docker hub daki dokümantasyonu okuyarak öğreniyoruz. Örneğin
- MongoDB de database in başlatılması için bir admin useri ve password ü gerekmekte. Bunları environment variable olarak vermek gerekiyor.
- Onun dışında portunu bağlamak gerekli.
- Network kurduk onu eklemek gerekli
- bir isim vermemiz gerekli yoksa random bir isim gelecek kullanışlı olmuyor.
can@deb11-VM1:~/jsproject$ docker run -d \
> -p 27017:27017 \
> -e MONGO_INITDB_ROOT_USERNAME=admin \
> -e MONGO_INITDB_ROOT_PASSWORD=password \
> --name mongodb \
> --net mongo-network \
> mongo
101de039c7a0ffed7732a6c56c1463bbb6dcc9a1e7d00cf8f0d16da54da1a01c
ve başlar. Tabii hiç bir yere bağlı değil ve öylece bekliyor ama başladı işte
Kontrol için :
docker logs 101de039c7a0ffed7732a6c56c1463bbb6dcc9a1e7d00cf8f0d16da54da1a01c
veya
docker logs mongodb
ok şimdi mongo expressi çalıştırıp bağayacağız yine docker hub da ki dokümantasyona bakıyoruz.
can@deb11-VM1:~/jsproject$ docker run -d \
> -p 8081:8081 \
> -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
> -e ME_CONFIG_MONGODB_ADMINPASSWORD=password \
> --net mongo-network \
> --name mongo-express \
> -e ME_CONFIG_MONGODB_SERVER=mongodb \
> mongo express
923226f144c0c461c73b9f40b26a730fc23aafd078cb6e40fe60dd1b6c1c9055
şimdi bakalım ne oluyor
can@deb11-VM1:~/jsproject$ docker logs 094afe3342a4
Welcome to mongo-express
------------------------
(node:7) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
Mongo Express server listening at http://0.0.0.0:8081
Server is open to allow connections from anyone (0.0.0.0)
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!
Güzel gidip (http://192.168.0.190:8081/) baktığımızda da sayfayı görüyoruz. Ve bir database “user-account” oluşturuyoruz.
NodeJs kurulumu
nodejs in çalışabilmesi için npm paketinin kurulu olması lazım.
sudo apt install npm -y
ayrıca requirement olan npm in express modülününde kurulması lazım.
npm install express
daha sonra js dosyamızın olduğu klasöre gidip
sudo npm init
sudo node server.js
Tabii bu arada gserver.js ve index.html e de gerekli port ayarları ve Database bilgilerini kontrol ediyoruz.
sonra sayfamız çalışıyor.
Bunun ile ilgil Docker-compose dosyası:
version: '3'
services:
# my-app:
# image: ${docker-registry}/my-app:1.0
# ports:
# - 3000:3000
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- mongo-data:/data/db
mongo-express:
image: mongo-express
restart: always # fixes MongoNetworkError when mongodb is not ready when mongo-express starts
ports:
- 8080:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
mongo-data:
driver: local
Gerisini Docker-3 te işleyeceğim çünkü dockerfile ile ilgili