আমি ডকার-এন্ট্রিপয়েন্ট-initdb.d পদ্ধতির ব্যবহার করেছি (@ কুহেসকে ধন্যবাদ) তবে আমার ক্ষেত্রে আমি .env ফাইলে সংজ্ঞায়িত কিছু পরামিতির উপর ভিত্তি করে আমার ডিবি তৈরি করতে চাই তাই আমি এগুলি করেছি
1) প্রথমে .env ফাইলটিকে আমার ডকার রুট প্রকল্প ডিরেক্টরিতে সংজ্ঞায়িত করব
MYSQL_DATABASE=my_db_name
MYSQL_USER=user_test
MYSQL_PASSWORD=test
MYSQL_ROOT_PASSWORD=test
MYSQL_PORT=3306
2) তারপরে আমি আমার ডকার-কমপোজ.আইএমএল ফাইলটি সংজ্ঞায়িত করব। সুতরাং আমি আমার পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়িত করতে আরগস নির্দেশিকাটি ব্যবহার করেছি এবং আমি তাদের .env ফাইল থেকে সেট করেছি
version: '2'
services:
### MySQL Container
mysql:
build:
context: ./mysql
args:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
ports:
- "${MYSQL_PORT}:3306"
3) তারপরে আমি একটি মাইএসকিএল ফোল্ডারটি সংজ্ঞায়িত করি যাতে একটি ডকফেরফাইল অন্তর্ভুক্ত থাকে। সুতরাং ডকফেরাইল এটি
FROM mysql:5.7
RUN chown -R mysql:root /var/lib/mysql/
ARG MYSQL_DATABASE
ARG MYSQL_USER
ARG MYSQL_PASSWORD
ARG MYSQL_ROOT_PASSWORD
ENV MYSQL_DATABASE=$MYSQL_DATABASE
ENV MYSQL_USER=$MYSQL_USER
ENV MYSQL_PASSWORD=$MYSQL_PASSWORD
ENV MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
ADD data.sql /etc/mysql/data.sql
RUN sed -i 's/MYSQL_DATABASE/'$MYSQL_DATABASE'/g' /etc/mysql/data.sql
RUN cp /etc/mysql/data.sql /docker-entrypoint-initdb.d
EXPOSE 3306
4) এখন আমি আমার ডিবি ডাম্প করার জন্য মাইএসকিএলডাম্প ব্যবহার করি এবং মাইএসকিএল ফোল্ডারের ভিতরে ডেটা.এসকিউএল রাখি
mysqldump -h <server name> -u<user> -p <db name> > data.sql
ফাইলটি কেবল একটি সাধারণ স্কয়ার ডাম্প ফাইল তবে আমি শুরুতে 2 টি লাইন যুক্ত করি যাতে ফাইলটি এর মতো দেখায়
--
-- Create a database using `MYSQL_DATABASE` placeholder
--
CREATE DATABASE IF NOT EXISTS `MYSQL_DATABASE`;
USE `MYSQL_DATABASE`;
-- Rest of queries
DROP TABLE IF EXISTS `x`;
CREATE TABLE `x` (..)
LOCK TABLES `x` WRITE;
INSERT INTO `x` VALUES ...;
...
...
...
সুতরাং যা হ'ল তা হ'ল যে আমি "RUN sed -i's / MYSQL_DATABASE / 'Y MYSQL_DATABASE' / g '/etc/mysql/data.sql" কমান্ডটি MYSQL_DATABASEআমার ডিবিতে সেট করে রেখেছি আমার ডিবির নামটি স্থানান্তরিত করতে .env ফাইল।
|- docker-compose.yml
|- .env
|- mysql
|- Dockerfile
|- data.sql
এখন আপনি নিজের ধারকটি তৈরি এবং চালানোর জন্য প্রস্তুত
RUNকমান্ড একটি পৃথক ধারক মধ্যে কার্যকর করা হয় যে কারণে হয় । : এটা ভাল এখানে ব্যাখ্যা করা হয় stackoverflow.com/questions/17891669/...