Ö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 .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.
docker run -p 5000:5000 io.swagger
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'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.
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
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:PostgreSQL yazısında aşağıdaki komutla bir veritabanını bir sql dosyası olarak dışa aktarmıştık.
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
sudo -i -u postgres
pg_dump --schema-only --no-owner api > init.sql
Şimdi aşağıdaki komutla servis ve veritabanını çalışır hale getirebiliriz.
docker-compose up
Hiç yorum yok:
Yorum Gönder