على حد فهمي ، التي لم تنجح لأن صورة ميسكل عامل الميناء لا يحتوي على عميل ميسكل (أفضل الممارسات الدولة "لا تضيف أشياء فقط لأنها سوف تكون لطيفة أن يكون") (هل أنا مخطئ في هذا?)
ما قد يكون وسيلة جيدة للقيام بذلك? لقد كان لدي بعض الأشياء في الاعتبار, لكنهم جميعا يبدون مثل الحلول الفوضوية.
تثبيت العميل الخلية ، تفعل ما يجب القيام به معها ، ثم إزالة/تطهير ذلك.
نسخ ثنائي العميل الخلية إلى الصورة ، تفعل ما يجب القيام به ، ثم إزالته.
إنشاء المخطط في خادم سكل آخر ونسخ ملف دب أنفسهم مباشرة (وهذا يبدو فوضوي جدا ويبدو لي مثل مجموعة ملوثة من المشاكل)
أي اقتراحات? نأمل بطريقة سيكون من السهل الحفاظ عليها لاحقا وربما تتوافق مع أفضل الممارسات أيضا?
وهنا كيف فعلت من خلال الاستفادة من الصور ميسكل/ماريادب الفعلية على دوكيرهوب وبناء متعدد المراحل:
FROM mariadb:latest as builder# That file does the DB initialization but also runs mysql daemon, by removing the last line it will only initRUN ["sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"]# needed for intializationENV MYSQL_ROOT_PASSWORD=rootCOPY setup.sql /docker-entrypoint-initdb.d/# Need to change the datadir to something else that /var/lib/mysql because the parent docker file defines it as a volume.# https://docs.docker.com/engine/reference/builder/#volume :# Changing the volume from within the Dockerfile: If any build steps change the data within the volume after# it has been declared, those changes will be discarded.RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db", "--aria-log-dir-path", "/initialized-db"]FROM mariadb:latestCOPY --from=builder /initialized-db /var/lib/mysql
FROM mysql:latest as builder# That file does the DB initialization but also runs mysql daemon, by removing the last line it will only initRUN ["sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"]# needed for intializationENV MYSQL_ROOT_PASSWORD=rootCOPY setup.sql /docker-entrypoint-initdb.d/# Need to change the datadir to something else that /var/lib/mysql because the parent docker file defines it as a volume.# https://docs.docker.com/engine/reference/builder/#volume :# Changing the volume from within the Dockerfile: If any build steps change the data within the volume after# it has been declared, those changes will be discarded.RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db"]FROM mysql:latestCOPY --from=builder /initialized-db /var/lib/mysql
هذا يعمل وانها تتبع واجهة مع النصي نقطة دخول ماريادب. يتم نسخ الملفات مع الإعدادات والجداول والبيانات والمستخدمين إلى مجلدات. عند بدء تشغيل الحاوية ، يعثر البرنامج النصي لنقطة الإدخال على الملفات وينشئ قاعدة بيانات جديدة.
FROM mariadb:10.5.5ENV MYSQL_ROOT_PASSWORD=blablablablablablaCOPY settings/my.cnf /etc/mysql/conf.d# comment out !includedir /etc/mysql/conf.d/ to stop recursionRUN sed -i 's/!includedir \/etc\/mysql\/conf\.d\//#!includedir \/etc\/mysql\/conf\.d\//' /etc/mysql/conf.d/my.cnfCOPY db_scripts/db_setup.sql /docker-entrypoint-initdb.d/COPY db_scripts/db_data.sql.template /docker-entrypoint-initdb.d/db_template.sqlCOPY db_scripts/db_users.sql /docker-entrypoint-initdb.d/# Note the port 3306 can be exposed
@فينكاتيسوارا راو و @ مارتن روي الجواب العمل كبيرة إذا كنت لا تهتم إذا كانت التغييرات إلى دب دوكيريزد لا تزال وضعت في وحدة تخزين. في حالتي ، كنت أرغب في الحصول على صورة عامل ميناء مع البيانات ، ولكن في مشروع حيث لدينا عمليات ترحيل قاعدة بيانات متكررة. وهكذا ، أردت أن تجعل من حين لآخر حاوية دب ، تشغيل الهجرات ، ثم دفع بطريقة أو بأخرى تلك التغييرات النسخ الاحتياطي بحيث المستخدم التالي لاستخدام صورة دب سيكون بالفعل الهجرات تطبيقها. منذ ملفات دب يعيش في وحدة تخزين ، فإنها لا تحصل على توالت في صورة مع docker commmit my-migrated-db-container my-new-db-image.
كان الحل الخاص بي هو استخدام المسؤول الخلية (5.6 في بلدي. حالة) دوكيرفيل (وملف نقطة الدخول) لإعادة عملهم بعد إزالة VOLUME /var/lib/mysql خط. من الصورة الناتجة ، ثم استخدمت ملفات فينكاتيسوارا لجعل صورة دب محملة مسبقا حيث يتم تخزين جميع البيانات دب في المستقبل في الحاوية نفسها (وليس على وحدة تخزين).
ملاحظة: ملف دوكيرفيل المرتبط قديم يشير إلى خوادم مفاتيح غ عفا عليها الزمن (أي keys.openpgp.org). يمكنك استبدال أسماء الخوادم هذه ، على سبيل المثال, keyserver.ubuntu.com.
هنا هو ملف عامل الميناء الخاص بي يعمل بشكل جيد للغاية./ سكل-مخطوطات / سوف تحتوي على ملف سكل المخصص الخاص بك (يحتوي على دب الخاص بك استعداد) الذي يتم تنفيذه بمجرد تشغيل الحاوية. قد ترغب في النظر في حجم تصاعد على الرغم من.
FROM mysql:5.6COPY ./sql-scripts/ /docker-entrypoint-initdb.d/
برامج إدارة مثل أنسيبل يمكن أن تساعدك على أتمتة ميسكل استيراد سهلة دون الحاجة إلى تثبيت وإعادة تثبيت العميل.أنسيبل لديه ميزات مدمجة كبيرة لإدارة الصور عامل الميناء والحاويات وقواعد البيانات الخلية.