一、简介与背景
二、安装docker与dockerfile
三、dockerfile
FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum install -y \
mysql \
mysql-devel \
mysql-server \
net-tools \
&& yum clean all
COPY my.cnf /etc/my.cnf
COPY collect_connections.sh /usr/local/bin/collect_connections.sh
RUN chmod +x /usr/local/bin/collect_connections.sh
ENV MYSQL_PORT=3306
ENV MYSQL_USER=root
ENV MYSQL_PASSWORD=1234567
EXPOSE 3306
CMD ["/usr/local/bin/collect_connections.sh"]
四、相关配套文件
- my.cnf配置文件
[mysqld]
lower_case_table_names = 0
general_log = 0
general_log_file = /var/log/mysql/mysql.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-query.log
long_query_time = 1
log_output = FILE
max_connections = 1500
innodb_use_native_aio = 1
[myisamchk]
ft_min_word_len = 4
ft_max_word_len = 20
[mysqldump]
user=root
password=1234567
- collect_connections.sh
#!/bin/bash
while true; do
current_time=$(date +"%Y-%m-%d %H:%M:%S")
connections=$(mysql -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" | grep Threads_connected | awk '{print $2}')
echo "[$current_time] Number of active DB connections is $connections." | tee -a /data/mysql/log/mysql_connections.log
sleep 30
done
五、构建镜像
docker build -t mysql-connection-logger .
'''
说明
-t, --tag: 为生成的镜像指定标签(通常是 name:tag 格式)。
-f, --file: 指定 Dockerfile 的路径(默认是当前目录下的 Dockerfile)。
--build-arg: 设置构建时的变量。
--no-cache: 构建时不使用缓存。
--rm: 构建完成后删除中间容器(默认是启用的)。
--pull: 始终尝试从远程仓库拉取最新版本的基础镜像。
-q, --quiet: 只输出构建的镜像 ID。
. ,表示当前目录
'''
六、运行容器与观察
docker run -d --name mysql-logger \
-e MYSQL_HOST=localhost \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=1234567 \
mysql-connection-logger
docker run -d --name mysql-logger \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=1234567 \
-v /data/mysql/log:/var/mysql/log \
-v /data/mysql/data:/var/lib/mysql \
mysql-connection-logger
docker run -d --name mysql-logger mysql-connection-logger
七、补充
#
# 查看日志
#
#
docker logs -f mysql-connection-logger
#
docker exec -it mysql-connection-logger tail -f /data/mysql/log