• Docker基操—2.MySQL镜像


    基本使用

    - 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
    
  • 相关阅读:
    如何去除行内元素之间的间隙
    js判断字符串是否为空,多个空格也算为空
    android4.4的Webview的getCookie有兼容性有问题
    配置xampp搭建简单的web服务器环境
    Okhttp传递cookie给Webview的解决方法
    linux下使用nodejs和lessc编译器
    某盘下载链接提取脚本
    Android项目开发过程常用的工作流工具以及平台
    Android开发检测App从后台进入前台的解决方法
    NetworkImageView
  • 原文地址:https://www.cnblogs.com/FGdeHB/p/15861144.html
Copyright © 2020-2023  润新知