هنگام ساخت یک کانتینر 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 ..........