رضا
رضا
خواندن ۱ دقیقه·۳ سال پیش

چند دیتابیس در یک MySQL Container

هنگام ساخت یک کانتینر MySQL با مقدار دهی به متغیر MYSQL_DATABASE, به صورت پیشفرض یک دیتابیس با این نام ساخته می شود.

برای افزودن دیتابیس های بیشتر باید برای هرکدام یک فایل sql, که شامل کوئری ساخت دیتابیس جدید و دادن دسترسی ها به کاربر پیشفرض کانتینر MySQL است, در فولدر docker-entrypoint-initdb.d داخل کانتینر قرار دهیم و هنگام ساخته شدن کانتینر, داکر هر تعداد فایل sql که داخل این فولدر باشد را به ترتیب حروف الفبا اجرا می کند و دیتابیس های مورد نظر ما ساخته می شود.

ابتدا یک Dockerfile می سازیم

touch Dockerfile

سپس یک MySQL image با ورژن دلخواه را در آن فراخوانی میکنیم و همه فایل های sql موجود در فولدر کنونی را داخل کانتینر در فولدر docker-entrypoint-initdb.d میریزیم

# Using latest version of MySQL FROM mysql:latest # Copying all sql files that are in charge of creating new databases COPY ./*.sql ./docker-entrypoint-initdb.d/

برای نمونه فایل 01.sql را با محتویات زیر برای ساخت اولین دیتابیس قرار می دهیم

# Create new_db if doesn't exist CREATE DATABASE IF NOT EXISTS `new_db`; # Give all permissions to admin user GRANT ALL ON `new_db`.* TO 'admin'@'%';

حالا یک image از Dockerfile می سازیم

docker build -t multi_database_mysql -f Dockerfile

و یک کانتینر با استفاده از آن راه اندازی می کنیم

docker run --name my_multi_database_mysql \ -e MYSQL_ROOT_PASSWORD=root-password \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=password \ -e MYSQL_DATABASE=db \ -d multi_database_mysq

با استفاده از دستور زیر وارد کانتینر خود شوید

docker exec -it my_multi_database_mysql bash -l

سپس در MySQL لاگین کنید

mysql -uadmin -ppassword

و با اجرای کوئری زیر لیست دیتابیس های ساخت شده را ببینید

SHOW DATABASES;

اگر از Docker Compose استفاده میکنید فایل های sql ساخت دیتابیس ها را داخل یک فولدر قرار دهید و در شاخه volumes به کانتینر خود بشناسانید

mysql: container_name: multi-db-mysql image: mysql:latest restart: unless-stopped volumes: - ./mysql:/var/lib/mysql - ./init:/docker-entrypoint-initdb.d ..........
داکرmysqlدیتابیسdockerبرنامه نویسی
مشغول کُشتن زامبی‌ها
شاید از این پست‌ها خوشتان بیاید