通過 docker 在 Centos 7 的前台安裝、配置和執行 mariadb,無需 systemd 或服務
在 CentOS 7 下,我知道我們正在從
mysql-server
實現兼容的 MariaDB 轉移。我正在使用 docker 映像centos:latest
,這使我受到 Centos 7 的支持。
mysqld_safe
在前台執行阻塞。這很容易:我只需要 0) 安裝軟體包 1) 更改 root 密碼 2) 從Dockerfile
在 docker 範例中,我需要能夠像在 bash 腳本中一樣安裝 MariaDB。我已經找到了在 Ubuntu 下使用的各種方法,
aptitude
但還沒有找到等效的答案yum
:如何在 Centos 7 上安裝、配置和執行 mariadb,就好像它是通過 Bash 腳本安裝的一樣?mysql_secure_installation
似乎需要 TTY。我嘗試
mysqladmin
手動執行密碼命令,但它抱怨它無法連接到正在執行的 MySQL 實例。因為容器在步驟之間被丟棄,我相信我需要以某種方式執行 mysql 並在同一步驟中更改密碼。我嘗試安裝
initscripts
package got me/bin/service
但它試圖將我重定向到 usesystemctl start mariadb.service
,這是不可用的,因為 Docker 容器得到 afakesystemd
而不是systemd
。有任何想法嗎?這是我目前的 Dockerfile 變體(在這個變體中,嘗試
tail -f
將程序保持為 aCMD
)FROM centos:latest MAINTAINER Me (some@guy.com) RUN yum -y install wget epel-release RUN cd /usr/local/src && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm -Uvh remi-*.rpm && rm remi-*.rpm RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi*.repo RUN cd /usr/local/src && wget http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm && rpm -Uvh rpmforge-*.rpm && rm rpmforge-*.rpm RUN rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/rpmforge*.repo RUN yum -y update RUN yum -y upgrade # mysql RUN yum -y install mariadb-server RUN yum -y install initscripts WORKDIR /usr #RUN echo "bind-address=0.0.0.0" >> /etc/my.cnf RUN /usr/bin/mysql_install_db --datadir="/var/lib/mysql" --user=mysql RUN /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --user=mysql >/dev/null 2>&1 & RUN /usr/bin/mysqladmin -u root password SOMEPASSWORD CMD tail -f /var/log/mariadb/mariadb.log EXPOSE 3306
有關的:
- 在 Ubuntu 上腳本安裝 MySQL
- https://askubuntu.com/questions/79257/how-do-i-install-mysql-without-a-password-prompt
- https://stackoverflow.com/questions/1202347/how-can-i-pass-a-password-from-a-bash-script-to-aptitude-for-installing-mysql
- https://stackoverflow.com/questions/7739645/install-mysql-on-ubuntu-without-password-prompt
我正在處理類似的問題,在 Docker 容器中設置 mariadb。我發現這是在尋找執行 mysql_secure_install 的方法。有多種方法可以將輸入提供給腳本,或者您可以簡單地執行腳本將執行的命令。我選擇了後者。
我也遇到了命令找不到正在執行的 MySQL 實例的相同問題。問題是建構的每個步驟都在一個單獨的容器中執行,因此您必須為每個命令啟動 mysql,或者在一個步驟中執行它們。這就是我的 Dockerfile 中的內容:
ARG DATABASE_ROOT_PASS RUN service mysql start \ && mysqladmin -u root password "$DATABASE_ROOT_PASS" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_ROOT_PASS') WHERE User='root'" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User=''" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" \ && mysql -u root -p"$DATABASE_ROOT_PASS" -e "FLUSH PRIVILEGES"
然後你可以用
docker build . --build-arg DATABASE_ROOT_PASS='changeme123'
您可以在此處找到 –build-arg 的文件。