docker 製作自己的mysql映象
阿新 • • 發佈:2020-12-02
1、下載mysql,本次以mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar為例
2、編輯啟動指令碼start.sh,容器啟動時會執行這個指令碼,主要是安裝並初始化mysql
#!/bin/bash MYSQL_ROOT_PASSWORD=123456 if [ -z "$MYSQL_ROOT_PASSWORD" ];then echo "MYSQL_ROOT_PASSWORD is empty" exit 0 fi INIT_MYSQL(){ echo "mysql初始化" yum install -y libaio libnuma* net-tools perl.x86_64 cd /usr/local/src #tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpmmkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql sed -i 's/datadir=\/var\/lib\/mysql/datadir=\/usr\/local\/mysql\/data/' /etc/my.cnf sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'` mysqladmin -uroot -p$dbPassword password $MYSQL_ROOT_PASSWORD host='127.0.0.1' dbUser='root' sql_file='/usr/local/bin/init.sql' mysql -h $host -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file"; echo "Remote connection is set" rm -rf /usr/local/src/mysql* } if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then INIT_MYSQL else mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql fi tail -f /var/log/mysqld.log
3、編寫init.sql,主要是開啟root 遠端連線,看需求可以不要
use mysql; update user set host = '%' where user = 'root'; flush privileges;
4、編寫dockerfile
需要將init.sql 、 localtime(為了和宿主機時間同步,可以不要,要的話,從宿主機拷貝過來即可)、mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar、start.sh放與dockerfile同一目錄下
FROM centos7.2 ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src ADD localtime /etc/localtime ADD start.sh /usr/local/bin ADD init.sql /usr/local/bin CMD ["/usr/local/bin/start.sh"]
centos7.2映象也是自己製作的,可以自己製作系統基礎映象,也可以用網上的
5、製作映象
docker build -t mysql5.7:v1 .
6、執行
docker run -it -e MYSQL_ROOT_PASSWORD=123456 -p 1112:3306 -d mysql5.7:v1
7、其他伺服器連線測試
[root@test-02 ~]# mysql -uroot -h 172.16.210.132 -P 1112 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.29 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye [root@test-02 ~]#
---------------------------------------------------------------------
上面製作的映象,執行環境需要能聯網才可以,因為要下載依賴包
如果映象執行沒有網,可以先在有網的環境製作好,再上傳到無網環境執行
製作方法類似,只需更改dockerfile 和start.sh
dockerfile
FROM centos7.2 ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src ADD localtime /etc/localtime ADD start.sh /usr/local/bin ADD init.sql /usr/local/bin RUN rpm --rebuilddb && yum install -y libaio libnuma* net-tools perl.x86_64 RUN cd /usr/local/src && rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm && rm -rf /usr/local/src/mysql* CMD ["/usr/local/bin/start.sh"]
start.sh
#!/bin/bash if [ -z "$MYSQL_ROOT_PASSWORD" ];then echo "MYSQL_ROOT_PASSWORD is empty" exit 0 fi INIT_MYSQL(){ echo "mysql初始化" mkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql sed -i 's/datadir=\/var\/lib\/mysql/datadir=\/usr\/local\/mysql\/data/' /etc/my.cnf sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'` mysqladmin -uroot -p$dbPassword password $MYSQL_ROOT_PASSWORD dbUser='root' sql_file='/usr/local/bin/init.sql' mysql -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file"; echo "Remote connection is set" } if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then INIT_MYSQL else mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql fi tail -f /var/log/mysqld.log
------------------------------------------主從複製映象--------------------------------------
前提:使用上面製作好的mysql5.7:latest映象
建立目錄
mkdir -p {master,slave}
1、master映象製作
cd master/
製作my.cnf
[mysqld] default_password_lifetime=0 datadir=/usr/local/mysql/data socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id=1 log-bin=mysql-bin binlog-ignore-db=mysql,test binlog_format=MIXED slave_skip_errors=1062
製作dockerfile
FROM mysql5.7:latest ADD my.cnf /etc/my.cnf
製作映象
docker build -t mysql5.7:master .
2、slave映象
cd slave
製作my.cnf
[mysqld] default_password_lifetime=0 datadir=/usr/local/mysql/data socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id=2 log-bin=mysql-bin relay-log=relay-log relay-log-index=relay-log.index binlog-ignore-db=mysql,test binlog_format=MIXED slave_skip_errors=1062 ## relay_log配置中繼日誌 log_slave_updates=1 read_only=1 #將slave從庫設定為只讀狀態
dockerfile
FROM mysql5.7:latest ADD my.cnf /etc/my.cnf
docker build -t mysql5.7:slave .
3、啟動
docker run -it -p 1111:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /data/master:/usr/local/mysql/data mysql5.7:maste docker run -it -p 2222:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /data/slave:/usr/local/mysql/data mysql5.7:slave