17 Aralık 2018 Pazartesi

Docker Compose ile .Net Core + PostgreSQL Kullanmak

  Ahmet Şimşek       17 Aralık 2018 Pazartesi

Önceki yazılarda swagger-codegen ile .Net Core ile rest api oluşturup PostgreSQL veritabanını projemize dahil etmiştik. Şimdi bu yazıda projemizi docker ile kullanılabilir hale getireceğiz.

İlk olarak sisteminizde docker ve docker-compose kurulu değilse aşağıdaki linklerden gerekli kurulumları yapabilirsiniz.
https://docs.docker.com/install/
Swagger ile oluşturduğumuz proje dizini içerisinde bir Dockerfile olduğunu görebilirsiniz. Bu .Net Core için gerekli olan Dockerfile. Aşağıdaki komutları src/IO.Swagger dizininde çalıştırırsanız Dockerfile önce build olup sonrasında 5000 portu üzerinden çalışır hale gelecektir.
docker build -t io.swagger .
docker run -p 5000:5000 io.swagger
Bu şekilde sadece rest apiyi çalışır hale getirdik ama PostgreSQL veritabanınıda docker içine dahil etmek istiyoruz. Bunun için docker container yöneticisi olan docker-compose kullanacağız.
https://docs.docker.com/compose/install/
Aşağıda gördüğünüz gibi bir docker-compose.yml dosyasına ihtiyacımız var.
version: '3.4'
networks:
  dockerapi-dev:
    driver: bridge
services:
  dockerapi:
    image: dockerapi:latest
    depends_on:
      - "postgres_image"
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:80"
    environment:
      DB_CONNECTION_STRING: "host=postgres_image;port=5432;database=api;username=password;password=username"
    networks:
      - dockerapi-dev
  postgres_image:
    image: postgres:latest
    ports:
      - "5432"
    restart: always
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      POSTGRES_USER: "username"
      POSTGRES_PASSWORD: "password"
      POSTGRES_DB: "api"
    networks:
      - dockerapi-dev
services altında iki farklı container tanımlaması var. İlki .Net Core servisi için ikincisi ise PostgreSQL için. Ve bir dockerapi-dev adında bir network var servis ile veritabanı arasındaki bağlantıyı kurabilmek için.

postgres_image altında proje dizininde bulunan bir init.sql tanımlaması yaptık. Bunun nedeni önceki yazıda oluşturduğumuz veritabanı yapısını tümüyle docker içerisinde çalışacak olan PostgreSQL veritabanına taşımak.
volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
PostgreSQL yazısında aşağıdaki komutla bir veritabanını bir sql dosyası olarak dışa aktarmıştık.
sudo -i -u postgres 
pg_dump --schema-only --no-owner api > init.sql
 Şimdi bu dışa aktarımı çalıştığımız veritabanı için yapalım. Ve oluşturulacak olan init.sql dosyasını yukarıda gördüğüz volumes parametresinde belirttik. Container içerisinde docker-entrypoint-initdb.d/init.sql olarak oluşturulacak olan bu dosya container çalışmaya başladığı anda tetiklenecek ve veritabınımız tümüyle oluşturulmuş olacak.

Şimdi aşağıdaki komutla servis ve veritabanını çalışır hale getirebiliriz.
docker-compose up 
logoblog

Thanks for reading Docker Compose ile .Net Core + PostgreSQL Kullanmak

Previous
« Prev Post

Hiç yorum yok:

Yorum Gönder