Dockerfile练习二---------------------------构建自己的mysql镜像

发布时间 2023-05-21 18:13:29作者: 往事已成昨天

构建自己的mysql镜像

 

##NYSQL的shell安装脚本##

[root@docker tomcat]# cd ~
[root@docker ~]# mkdir mysql
[root@docker ~]# cd mysql/
[root@docker mysql]# vim run.sh
#!/bin/bash
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++
cd /opt
cd mysql-5.7.20/
cmake \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make -j3 && make install -j3 ##注意此处的-j3根据核数定义,不要盲目跟从
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
echo "[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES" > /etc/my.cnf
chown mysql:mysql /etc/my.cnf
============================================

##MYSQL的Dockerfile##
将mysql-boost-5.7.20.tar.gz这个包拖进mysql/下
[root@docker mysql]# vim Dockerfile
FROM centos:7
MAINTAINER ZZT
ADD mysql-boost-5.7.20.tar.gz /opt
ADD run.sh /opt
WORKDIR /opt
RUN chmod +x run.sh
RUN ./run.sh
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql/
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
##这里遇到个坑,start不起来,所以我使用开机自启最后交给容器帮我启动
RUN cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
RUN echo -e "#!/bin/bash \n systemctl enable mysqld" > /1.sh
RUN chmod 755 /1.sh
RUN sh /1.sh
##这里初始化,将mysql启动起来,对应前面的enable
CMD ["init"]


[root@docker mysql]# docker build -t mysql:new .
==================================================

###privileged表示root账户访问容器不降权,如果不加进不去mysql###
[root@docker mysql]# docker run -d -P --name=mysql_root --privileged mysql:new

[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a6380eb103b mysql:new "init" 19 minutes ago Up 19 minutes 0.0.0.0:32772->3306/tcp mysql_root

[root@docker ~]# docker exec -it 8a6380eb103b /bin/bash
[root@8a6380eb103b mysql]#

[root@8a6380eb103b mysql]# mysqladmin -uroot -p password
Enter password: //回车,然后输入两次密码

[root@8a6380eb103b mysql]# mysql -uroot -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

####数据库登录成功,容器正常运行###

2