02/12/2021

Proje Docker – 1

Ö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

Leave a Reply