में MySQL डेटा को रोकना मैं डॉकर के लिए नया हूं। मैं सफलतापूर्वक निम्नलिखित Dockerfile के साथ एक डोकर छवि बनाया है:डॉकर
From alpine:3.4
MAINTAINER SomeName - domain.tld
# Timezone
ENV TIMEZONE Asia/Kolkata
# RUN sed -i 's#dl-cdn\.alpinelinux\.org#mirrors\.aliyun\.com#' /etc/apk/repositories
# install mysql, apache and php and php extensions, tzdata, wget
RUN echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
apk add --update \
mysql mysql-client \
apache2 \
curl wget \
tzdata \
php5-apache2 \
php5-cli \
php5-phar \
php5-zlib \
php5-zip \
php5-bz2 \
php5-ctype \
php5-mysqli \
php5-mysql \
php5-pdo_mysql \
php5-opcache \
php5-pdo \
php5-json \
php5-curl \
php5-gd \
php5-gmp \
php5-mcrypt \
php5-openssl \
php5-dom \
php5-xml \
php5-iconv \
[email protected]
RUN curl -sS https://getcomposer.org/installer | \
php -- --install-dir=/usr/bin --filename=composer
# configure timezone, mysql, apache
RUN cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && \
echo "${TIMEZONE}" > /etc/timezone && \
mkdir -p /run/mysqld && chown -R mysql:mysql /run/mysqld /var/lib/mysql && \
mysql_install_db --user=mysql --verbose=1 --basedir=/usr --datadir=/var/lib/mysql --rpm > /dev/null && \
mkdir -p /run/apache2 && chown -R apache:apache /run/apache2 && chown -R apache:apache /var/www/localhost/htdocs/ && \
sed -i 's#AllowOverride none#AllowOverride All#' /etc/apache2/httpd.conf && \
sed -i 's#ServerName www.example.com:80#\nServerName localhost:80#' /etc/apache2/httpd.conf && \
sed -i '/skip-external-locking/a log_error = \/var\/lib\/mysql\/error.log' /etc/mysql/my.cnf && \
sed -i '/skip-external-locking/a general_log = ON' /etc/mysql/my.cnf && \
sed -i '/skip-external-locking/a general_log_file = \/var\/lib\/mysql\/query.log' /etc/mysql/my.cnf
# Configure xdebug
RUN echo "zend_extension=xdebug.so" > /etc/php5/conf.d/xdebug.ini && \
echo -e "\n[XDEBUG]" >> /etc/php5/conf.d/xdebug.ini && \
echo "xdebug.remote_enable=1" >> /etc/php5/conf.d/xdebug.ini && \
echo "xdebug.remote_connect_back=1" >> /etc/php5/conf.d/xdebug.ini && \
echo "xdebug.idekey=PHPSTORM" >> /etc/php5/conf.d/xdebug.ini && \
echo "xdebug.remote_log=\"/tmp/xdebug.log\"" >> /etc/php5/conf.d/xdebug.ini
#start apache
RUN echo "#!/bin/sh" > /start.sh && \
echo "httpd" >> /start.sh && \
echo "nohup mysqld --skip-grant-tables --bind-address 0.0.0.0 --user mysql > /dev/null 2>&1 &" >> /start.sh && \
echo "sleep 3 && mysql -uroot -e \"create database db;\"" >> /start.sh && \
echo "tail -f /var/log/apache2/access.log" >> /start.sh && \
chmod u+x /start.sh
WORKDIR /var/www/localhost/htdocs/
EXPOSE 80
EXPOSE 3306
#VOLUME ["/var/www/localhost/htdocs","/var/lib/mysql","/etc/mysql/"]
ENTRYPOINT ["/start.sh"]
आदर्श रूप में मैं डोकर छवि अपाचे, PHP और MySQL शामिल करना चाहते हैं - एक छवि में सभी। मैं चाहता हूं कि छवि यथासंभव पोर्टेबल हो। इसलिए जब भी मुझे एक नई परियोजना शुरू करने की आवश्यकता होती है, तो मैं सिर्फ एक नया कंटेनर बना सकता हूं और वॉल्यूम माउंट कर सकता हूं और आगे बढ़ सकता हूं।
जब मैं एक नया कंटेनर शुरू करता हूं, तो मुझे सबकुछ अपेक्षित मिलता है। लेकिन mysql डेटा आरोहित नहीं किया जा सकता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि बढ़ते एक तरफ है (या यह है?) यदि मैं एक नया कंटेनर शुरू करते समय -v /project_dir/data:/var/lib/mysql
जोड़ता हूं, तो MySQL चालू नहीं होता है क्योंकि project_dir/data
खाली है। मेरे प्रश्न हैं:
- कैसे मेरी
project_dir
को/var/lib/mysql
कंटेनर के अंदर से डेटा माउंट करने के लिए? - मैं अलग-अलग कंटेनरों में अलग-अलग mysql पासवर्ड कैसे सेट कर सकता हूं?
संपादित करें: मैं अपने स्थानीय मात्रा (यानी project_dir/data
) माउंट नहीं है और कंटेनर शुरू करते हैं, एक खोल tty मिलता है, मुझे लगता है कि /var/lib/mysql
कई फ़ाइलें, जो मैं mysql चलाने के लिए की जरूरत है मान लेते हैं और है इसके प्रारंभिक डेटाबेस। लेकिन अगर मैं /var/lib/mysql
(कंटेनर के अंदर) के अंदर अपना स्थानीय वॉल्यूम और ls
माउंट करता हूं, तो यह खाली है। यही कारण है कि MySQL शुरू नहीं हो रहा है और मैं कंटेनर के बाहर से डेटा जारी नहीं रख सकता। मेरा सवाल है: मैं इसे कैसे चला सकता हूं और स्थानीय निर्देशिका से डेटा बना सकता हूं।
छवि अपने स्थानीय पर्यावरण पर स्वतंत्र माना जाता है। निर्देशिका को चिह्नित करने के लिए आपको वॉल्यूम का उपयोग करना होगा जिसे बाहर से रखा जाएगा। और जब आप डॉकर में छवि चलाते हैं तो आप इसे '-v' पैरामीटर का उपयोग करके अपने स्थानीय वातावरण से कनेक्ट करते हैं। इस तरह यह कुबर्नेट्स पर भी काम करता है। – JosMac
इस उपयोग के मामले के लिए डॉकर का उपयोग न करें। डॉकर एक एप्लीकेशन कंटेनर तकनीक है। आप एक ओएस कंटेनर/गोल्डन छवि बना रहे हैं। एक वीएम का प्रयोग करें या यदि आप ठंडा होने के लिए कंटेनर का उपयोग करने पर जोर देते हैं, तो ओएस कंटेनर (उदा। ओपनवीजेड) का उपयोग करें। आप अपने वर्तमान दृष्टिकोण के साथ कई समस्याओं में भाग लेंगे। – bartimar