基本使用
- 1.生成容器的时候,调用的是 entrypoint.sh 脚本
- 2.通过脚本信息得到相关启动信息:
| mysqld -- 启动mysql服务
| MYSQL_ROOT_PASSWORD -- 设置root密码,必用;还有另外两个选项
| MYSQL_USER -- 添加其他用户,选用
| MYSQL_PASSWORD
| MYSQL_DATABASE -- 建新库,选用
| /var/lib/mysql -- datadir
| /etc/mysql/my.cnf -- my.cnf路径
- 3.生成容器的命令:
| docker run -d -p 3310:3306 --name m01 -e mysqld -e MYSQL_ROOT_PASSWORD=123 \
| -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=testDb -v \
| /mysql_data_path:/var/lib/mysql mysql:5.7.35
[root@wg ~]# docker run -id --name m04 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.35 -- 简化
[root@wg ~]# docker exec -it my04 /bin/bash
root@9259e9802ec7:/# mysql -uroot -p123
mysql> exit
默认情况数据库文件和日志文件都会存放于容器的AUFS文件层,这使得容器日后会变得臃肿,数据库不便管理,需将相关数据迁移,持久化到本地
MySQL镜像+重新配置
[root@wg ~]# docker run -id -p 3310:3306 --name m01 -e mysqld -e MYSQL_ROOT_PASSWORD=123 \
> -v /opt/data/mysql:/var/lib/mysql mysql:5.7.35
[root@wg ~]# docker exec -it m01 /bin/bash
root@6669133ceb32:/etc/mysql# ls -l
drwxr-xr-x. 2 root root 62 Oct 12 16:23 conf.d
lrwxrwxrwx. 1 root root 24 Oct 12 16:23 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r--. 1 root root 839 Aug 3 2016 my.cnf.fallback
-rw-r--r--. 1 root root 1200 Jun 7 2021 mysql.cnf
drwxr-xr-x. 2 root root 24 Oct 12 16:23 mysql.conf.d
root@6669133ceb32:/etc/mysql# exit
[root@wg ~]# docker rm -f $(docker ps -qa)
[root@wg ~]# rm -rf /opt/data
[root@wg ~]# vi /opt/mysql/conf/my.cnf
| [mysqld]
| server-id=1
| port=3306
| datadir=/var/lib/mysql
| pid-file=/var/run/mysqld.pid
| log-error=/var/log/mysql/error.log
| skip_name_resolve # 只能ip,不能地址解析
| character-set-server=utf8mb4
| collation-server=utf8mb4_general_ci
| slow_query_log=1
| long_query_time=5
| slow_query_log_file=/var/log/mysql/mysql-slow.log
| init_connect='SET NAMES utf8mb4' # client连接mysql的字符集,防乱码
| max_connections = 300 # 最大连接数
|
| [client]
| port=3306
[root@wg ~]# docker run --name test1 -d -p 3306:3306 --rm -v /opt/mysql/conf:/etc/mysql/conf.d \
> -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.35
[root@wg ~]# docker exec -it test1 /bin/bash
root@956aa29be6f1:/# ls /etc/mysql/conf.d
mysql.cnf
root@956aa29be6f1:/# mysql -uroot -p123
mysql> exit
Bye
root@956aa29be6f1:/# exit
exit
[root@wg ~]# docker exec -it test01 mysql -uroot -p123
mysql> grant all privileges on *.* to 'root'@'%' identified by '' with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@wg ~]# docker rm -f $(docker ps -qa)
Alpine Linux 是一个面向安全的轻型的 Linux 发行版。采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗。一个容器只需不超过 8 MB 的空间,最小的Docker镜像只有5MB,在磁盘中的最小安装仅要大约 130 MB 的存储空间。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,如:apk add、apk update、apk del。
Alpine+Dockerfile+apk
[root@wg dockerfile]# vi Dockerfile
| # 用的是alpine3.15的镜像id
| FROM c059bfaa849c
| MAINTAINER wg<m18610609135@163.com>
| # 0.2版安装的是mysql-client
| RUN apk add --no-cache mysql
| ENTRYPOINT ["mysql"]
[root@wg dockerfile]# docker build -t a315my5735:0.1
[root@wg dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
a315my5735 0.2 6005744b9f97 8 seconds ago 39.9MB
a315my5735 0.1 7370697d8036 About a minute ago 157MB
alpine 3.15 c059bfaa849c 2 months ago 5.59MB
mysql 5.7.35 8a8a506ccfdc 3 months ago 448MB
CentOS+Dockerfile+编译
- 结果:生成结果8G+
- 问题:目前没成功登录
[root@wg ~]# docker pull centos:7
[root@wg ~]# docker run -it centos:7 /bin/bash
[root@ca42023a6383 /]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@ca42023a6383 /]# exit
[root@wg ~]# screen -S lamp
[root@wg dockerfile]# vi readme.txt
| # 这是我的第一个docker镜像
| # 打包安装mysql
| # 受时间限制,很多步骤有瑕疵
| # 也没有做分包镜像
[root@wg dockerfile]# vi my.conf
| [client]
| port=3306
| socket=/data/mysql/3306/tmp/mysql.sock
|
| [mysqld]
| port=3306
| socket=/data/mysql/3306/tmp/mysql.sock
| user=lamp
| basedir=/usr/local/mysql
| datadir=/data/mysql/3306/data
| pid-file=/data/mysql/3306/mysqld/mysqld.pid
| log_error=/data/mysql/3306/log/mysqld.log
| lc-messages-dir=/usr/local/mysql/share
| slow_query_log=1 // 开启慢查询 on/off
| long_query_time=1 // 慢查询时间
| slow_query_log_file=/data/mysql/3306/log/mysql-slow.log // 慢查询文件位置
| skip-external-locking // 跳过外部锁定
| key_buffer_size=32M
| max_allowed_packet=1024M
| table_open_cache=128
| sort_buffer_size=768K
| net_buffer_length=8K
| read_buffer_size=768K
| read_rnd_buffer_size=512K
| myisam_sort_buffer_size=8M
| thread_cache_size=16
| query_cache_size=16M
| tmp_table_size=32M
| performance_schema_max_table_instances=1000
| explicit_defaults_for_timestamp=true
| #skip-networking
| max_connections=500
| max_connect_errors=100
| open_files_limit=65535
| log_bin=mysql-bin
| binlog_format=mixed
| server_id=232
| expire_logs_days=10
| early-plugin-load=""
| default_storage_engine=InnoDB
| innodb_file_per_table=1
| innodb_buffer_pool_size=128M
| innodb_log_file_size=32M
| innodb_log_buffer_size=8M
| innodb_flush_log_at_trx_commit=1
| innodb_lock_wait_timeout=50
|
| [mysqldump]
| quick
| max_allowed_packet=16M
|
| [mysql]
| no-auto-rehash
|
| [myisamchk]
| key_buffer_size=32M
| sort_buffer_size=768K
| read_buffer=2M
| write_buffer=2M
[root@wg dockerfile]# vi Dockerfile
| FROM docker.io/centos:7
|
| MAINTAINER wg<m18610609135@163.com>
|
| COPY readme.txt /opt/lamp/read.txt
| COPY my.cnf /opt/lamp/my.cnf
| ADD 5.7.35-boost.tar.gz /opt/lamp/
|
| RUN useradd -r -s /sbin/nologin lamp \
| && yum -y groupinstall "Development Tools" \
| && yum -y install git cmake gcc gcc-c++ openssl-devel ncurses-devel \
| && mkdir -p /data/mysql/3306/{data,log,tmp,mysqld} \
| && chown -R lamp:lamp /data/ && chmod -R 755 /data/ \
| && cd /opt/lamp/mysql-5.7.35 && \
| cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
| -DEXTRA_CHARSETS=all \
| -DDEFAULT_CHARSET=utf8mb4 \
| -DDEFAULT_COLLATION=utf8mb4_general_ci \
| -DSYSCONFDIR=/data/mysql/3306/data \
| -DSYSTEMD_PID_DIR=/data/mysql/3306/mysqld \
| -DMYSQL_UNIX_ADDR=/data/mysql/3306/tmp/mysql.sock \
| -DSYSCONFDIR=/usr/local/mysql/conf \
| -DWITH_INNOBASE_STORAGE_ENGINE=1 \
| -DWITH_MYISAM_STORAGE_ENGINE=1 \
| -DWITH_FEDERATED_STORAGE_ENGINE=1 \
| -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
| -DWITH_PARTITION_STORAGE_ENGINE=1 \
| -DENABLED_LOCAL_INFILE=ON \
| -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
| -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
| -DSYSTEMD_SERVICE_NAME=mysqld.service \
| -DWITH_BOOST=boost -DWITH_SYSTEMD=1 \
| -DCOMPILATION_COMMENT='MySQLWg' \
| && make -j2 && make install \
| && mkdir /usr/local/mysql/conf \
| && cp /opt/lamp/my.cnf /usr/local/mysql/conf/ \
| && chown -R lamp:lamp /usr/local/mysql/ && chmod -R 755 /usr/local/mysql/ \
| && /usr/local/mysql/bin/mysqld --initialize --user=lamp --datadir=/data/mysql/3306/data \
| && echo 'export PATH=$PATH:/usr/local/mysql/bin/' > /etc/profile.d/mysql.sh \
| && source /etc/profile.d/mysql.sh \
| && ln -sv /usr/local/mysql/include/ /usr/include/mysql \
| && echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql57.conf \
| && ldconfig \
| && grep "temporary password" /data/mysql/3306/log/mysqld.log
[root@wg dockerfile]# docker build -t c79msql57/wg:1.0 .
[root@wg dockerfile]# C-a-d // ctrl+a+d退出当前会话
[root@wg dockerfile]# docker run -it c79msql57/wg:1.0 /bin/bash