Docker | 安装mysql全流程以及镜像打包实战

鼠扑  金牌会员 | 2024-11-3 01:40:45 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 698|帖子 698|积分 2094


  • docker 长处

安装mysql

1. docker hub.上面查找mysql镜像


2. 从docker hub.上(阿里云加速器)拉取mysql镜像到本地标签为5.7

  1. [root@localhost ~]# docker pull mysql:5.7
  2. 5.7: Pulling from library/mysql
  3. 20e4dcae4c69: Pull complete
  4. 1c56c3d4ce74: Pull complete
  5. e9f03a1c24ce: Pull complete
  6. 68c3898c2015: Pull complete
  7. 6b95a940e7b6: Pull complete
  8. 90986bb8de6e: Pull complete
  9. ae71319cb779: Pull complete
  10. ffc89e9dfd88: Pull complete
  11. 43d05e938198: Pull complete
  12. 064b2d298fba: Pull complete
  13. df9a4d85569b: Pull complete
  14. Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
  15. Status: Downloaded newer image for mysql:5.7
  16. docker.io/library/mysql:5.7
  17. [root@localhost ~]# docker images
  18. REPOSITORY                                                              TAG       IMAGE ID       CREATED         SIZE
  19. crpi-yy9yj7syn08stogn.cn-shanghai.personal.cr.aliyuncs.com/zhenh/zyan   1.1       ca7abefb7af7   40 hours ago    191MB
  20. 172.21.47.251:5000/zyan/hgubuntu                                        1.2       59ab366372d5   2 weeks ago     78.1MB
  21. ubuntu                                                                  latest    59ab366372d5   2 weeks ago     78.1MB
  22. mysql                                                                   5.7       5107333e08a8   10 months ago   501MB
  23. registry                                                                latest    75ef5b734af4   13 months ago   25.4MB
  24. redis                                                                   6.0.8     16ecd2772934   4 years ago     104MB
复制代码
3.利用mysql:5.7镜像创建容器(也叫运行镜像)

简单版 – 有坑版


1. 查看端口 并启动mysql5.7

  1. # 查看端口3306 是否占用
  2. [root@localhost ~]# ps -ef  |  grep mysql
  3. root      4468  2013  0 12:30 pts/0    00:00:00 grep --color=auto mysql
  4. # 执行 ps -ef | grep mysql 后,只显示了一个进程信息,这个进程实际上是你自己运行的 grep 命令本身。这意味着在执行该命令时,并没有找到其他与 mysql 相关的正在运行的进程。
  5. docker run -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
复制代码


  • 成功启动

2. 进入mysql 建库建表插入数据

语句背面一定要加 ;
  1. mysql> show database;   #  错误语句
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
  3. mysql> show databases
  4.     -> ^C
  5. mysql> show databases;  #  正确语句
  6. +--------------------+
  7. | Database           |
  8. +--------------------+
  9. | information_schema |
  10. | mysql              |
  11. | performance_schema |
  12. | sys                |
  13. +--------------------+
  14. 4 rows in set (0.00 sec)
  15. mysql> create database db01;
  16. Query OK, 1 row affected (0.00 sec)
  17. mysql> show databases;
  18. +--------------------+
  19. | Database           |
  20. +--------------------+
  21. | information_schema |
  22. | db01               |
  23. | mysql              |
  24. | performance_schema |
  25. | sys                |
  26. +--------------------+
  27. 5 rows in set (0.00 sec)
  28. mysql> use db01;
  29. Database changed
  30. mysql> create table t1(id int,name varchar(20));
  31. Query OK, 0 rows affected (0.01 sec)
  32. mysql> insert into t1 values(1,'hg');
  33. Query OK, 1 row affected (0.02 sec)
  34. mysql> select * from t1;
  35. +------+------+
  36. | id   | name |
  37. +------+------+
  38. |    1 | hg   |
  39. +------+------+
  40. 1 row in set (0.00 sec)
复制代码
3. 外部Win10也来连接运行在dokcer上的mysql容器实例服务




WIN10插入数据–英文



  1. # 再进入docker服务里的  查看数据  发现 win10操作的  同样可以看到
  2. mysql> select * from t1;
  3. +------+-------+
  4. | id   | name  |
  5. +------+-------+
  6. |    1 | hg    |
  7. |    2 | lisi4 |
  8. +------+-------+
  9. 2 rows in set (0.00 sec)
  10. mysql>
复制代码
WIN10插入数据–中文





  • 分析 大概是安装后 和字符集编码相干

  1. mysql> SHOW VARIABLES LIKE 'character%';
  2. +--------------------------+----------------------------+
  3. | Variable_name            | Value                      |
  4. +--------------------------+----------------------------+
  5. | character_set_client     | latin1                     |
  6. | character_set_connection | latin1                     |
  7. | character_set_database   | latin1                     |
  8. | character_set_filesystem | binary                     |
  9. | character_set_results    | latin1                     |
  10. | character_set_server     | latin1                     |
  11. | character_set_system     | utf8                       |
  12. | character_sets_dir       | /usr/share/mysql/charsets/ |
  13. +--------------------------+----------------------------+
  14. 8 rows in set (0.00 sec)
  15. mysql>
复制代码

一定要以容器内部体现的编码格式为依据 删除容器后,里面的nysql数据如何办? 同样,容器数据卷技能也适用于数据库上,需要备份举行持久化存储 实战版 – 埋坑版⭐⭐

  1. docker run -p 3306:3306 --name mysql -v /zza/mysql/conf:/etc/mysql/conf.d -v /zza/mysql/logs:/logs -v /zza/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
复制代码
以后类比 , 重要的数据都需要挂在容器数据卷 1. 新建容器实例

  1. docker run -p 3306:3306 --privileged=true  -v /zza/mysql/conf:/etc/mysql/conf.d
  2. -v /zza/mysql/log:/var/log/log
  3. -v /zza/mysql/data:/var/lib/mysql
  4. -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
复制代码


2. 新建my.cnf

通过容器卷同步给mysql容器实例
  1. [root@localhost conf]# ls -l
  2. 总用量 0
  3. [root@localhost conf]# vim my.cnf
  4. [root@localhost conf]# cat my.cnf
  5. [client]
  6. default_character_set=utf8
  7. [mysqld]
  8. collation_server = utf8_general_ci
  9. character_set_server = utf8
  10. [root@localhost conf]#
  11. #  要重启 保证配置文件生效
  12. [root@localhost conf]# docker restart 2390dee74aa9
  13. 2390dee74aa9
复制代码
3.重新启动mysql2容器实例再重新进入并查看字符编码

  1. mysql> SHOW VARIABLES LIKE 'character%';
  2. +--------------------------+----------------------------+
  3. | Variable_name            | Value                      |
  4. +--------------------------+----------------------------+
  5. | character_set_client     | utf8                       |
  6. | character_set_connection | utf8                       |
  7. | character_set_database   | utf8                       |
  8. | character_set_filesystem | binary                     |
  9. | character_set_results    | utf8                       |
  10. | character_set_server     | utf8                       |
  11. | character_set_system     | utf8                       |
  12. | character_sets_dir       | /usr/share/mysql/charsets/ |
  13. +--------------------------+----------------------------+
  14. 8 rows in set (0.00 sec)
  15. mysql>
复制代码
  1. mysql> show databases;
  2. +--------------------+
  3. | Database           |
  4. +--------------------+
  5. | information_schema |
  6. | mysql              |
  7. | performance_schema |
  8. | sys                |
  9. +--------------------+
  10. 4 rows in set (0.00 sec)
  11. mysql> create database db01;
  12. Query OK, 1 row affected (0.00 sec)
  13. mysql> use db01;
  14. Database changed
  15. mysql> create table t1(id int,name varchar(15));
  16. Query OK, 0 rows affected (0.01 sec)
  17. mysql> insert into t1(1,'fff');
  18. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,'fff')' at line 1
  19. mysql> insert into t1 values(1,'fff');
  20. Query OK, 1 row affected (0.01 sec)
  21. mysql> select * from t1;
  22. +------+------+
  23. | id   | name |
  24. +------+------+
  25. |    1 | fff  |
  26. +------+------+
  27. 1 row in set (0.00 sec)
  28. mysql>
复制代码
4.再新建库新建表再插入中文测试


  1. mysql> select * from t1;
  2. +------+--------+
  3. | id   | name   |
  4. +------+--------+
  5. |    1 | fff    |
  6. |    3 | 昊哥   |
  7. +------+--------+
  8. 2 rows in set (0.00 sec)
  9. mysql>
复制代码


  • 结论

5.测试删除容器 从新加载数据是否从新体现

  1. [root@localhost mysql]# docker ps
  2. CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
  3. 2390dee74aa9   mysql:5.7   "docker-entrypoint.s…"   15 minutes ago   Up 10 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   fervent_mclean
  4. [root@localhost mysql]# ls -l
  5. 总用量 4
  6. drwxr-xr-x. 2 root    root   20 10月 30 13:09 conf
  7. drwxr-xr-x. 6 polkitd root 4096 10月 30 13:13 data
  8. drwxr-xr-x. 2 root    root    6 10月 30 13:05 log
  9. [root@localhost mysql]# coker rm -f 2390dee74aa9
  10. bash: coker: 未找到命令...
  11. [root@localhost mysql]# docker rm -f 2390dee74aa9
  12. 2390dee74aa9
  13. [root@localhost mysql]# docker ps
  14. CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  15. [root@localhost mysql]#
复制代码



这个实例再次验证了容器卷挂载的必要性 ,即使日常手误删除了相干的操作, 仍有机会举行数据复原

答疑解惑

关于命令挂载那一块
  1. -v /zza/mysql/conf:/etc/mysql/conf.d
  2. -v /zza/mysql/log:/var/log/log
  3. -v /zza/mysql/data:/var/lib/mysql
复制代码


配置好的mysql上传到私有库举行生存

1. 查看私有库已存在的镜像


  • 运行registry 镜像
  • 查看镜像
  • 查看私有库存在的镜像
  1. [root@localhost conf]# docker images
  2. REPOSITORY                                                              TAG       IMAGE ID       CREATED         SIZE
  3. crpi-yy9yj7syn08stogn.cn-shanghai.personal.cr.aliyuncs.com/zhenh/zyan   1.1       ca7abefb7af7   41 hours ago    191MB
  4. 172.21.47.251:5000/zyan/hgubuntu                                        1.2       59ab366372d5   2 weeks ago     78.1MB
  5. ubuntu                                                                  latest    59ab366372d5   2 weeks ago     78.1MB
  6. mysql                                                                   5.7       5107333e08a8   10 months ago   501MB
  7. registry                                                                latest    75ef5b734af4   13 months ago   25.4MB
  8. redis                                                                   6.0.8     16ecd2772934   4 years ago     104MB
  9. [root@localhost conf]# docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
  10. 9090b5e984a0ded93b5ff2a00ce4251566ae6422e6162df6b4dfc36caf5a7e92
  11. [root@localhost conf]# docker ps
  12. CONTAINER ID   IMAGE       COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
  13. 9090b5e984a0   registry    "/entrypoint.sh /etc…"   3 seconds ago   Up 3 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              vigilant_euler
  14. 78ba41711142   mysql:5.7   "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   jovial_bell
  15. [root@localhost conf]# curl -XGET http://172.21.47.251:5000/v2/_catalog
  16. {"repositories":[]}
复制代码
2. 推送至私有镜像

  1. [root@localhost conf]# docker   tag   镜像:Tag   Host:Port/Repository:Tag
  2. Error parsing reference: "镜像:Tag" is not a valid repository/tag: invalid reference format
  3. [root@localhost conf]# docker   tag   mysql:5.7   172.21.47.251:5000/mysql_rqj:0.1
  4. [root@localhost conf]# docker ps
  5. CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
  6. 9090b5e984a0   registry    "/entrypoint.sh /etc…"   15 minutes ago   Up 15 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              vigilant_euler
  7. 78ba41711142   mysql:5.7   "docker-entrypoint.s…"   23 minutes ago   Up 23 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   jovial_bell
  8. [root@localhost conf]#
  9. [root@localhost conf]# docker images
  10. REPOSITORY                                                              TAG       IMAGE ID       CREATED         SIZE
  11. crpi-yy9yj7syn08stogn.cn-shanghai.personal.cr.aliyuncs.com/zhenh/zyan   1.1       ca7abefb7af7   41 hours ago    191MB
  12. 172.21.47.251:5000/zyan/hgubuntu                                        1.2       59ab366372d5   2 weeks ago     78.1MB
  13. ubuntu                                                                  latest    59ab366372d5   2 weeks ago     78.1MB
  14. 172.21.47.251:5000/mysql_rqj                                            0.1       5107333e08a8   10 months ago   501MB
  15. mysql                                                                   5.7       5107333e08a8   10 months ago   501MB
  16. registry                                                                latest    75ef5b734af4   13 months ago   25.4MB
  17. redis                                                                   6.0.8     16ecd2772934   4 years ago     104MB
  18. [root@localhost conf]# docker push 172.21.47.251:5000/mysql_rqj:0.1
  19. The push refers to repository [172.21.47.251:5000/mysql_rqj]
  20. 441e16cac4fe: Pushed
  21. 73cb62467b8f: Pushed
  22. 337ec6bae222: Pushed
  23. 532b66f4569d: Pushed
  24. 0d9e9a9ce9e4: Pushed
  25. 4555572a6bb2: Pushed
  26. 8527ccd6bd85: Pushed
  27. d76a5f910f6b: Pushed
  28. 8b2952eb02aa: Pushed
  29. 7ff7abf4911b: Pushed
  30. cff044e18624: Pushed
  31. 0.1: digest: sha256:4b6c4935195233bc10b617df3cc725a9ddd5a7f10351a7bf573bea0b5ded7649 size: 2618
  32. [root@localhost conf]# curl -XGET http://172.21.47.251:5000/v2/_catalog
  33. {"repositories":["mysql_rqj"]}
  34. [root@localhost conf]#
复制代码
一个题目 – 待解答 ??

docker push后 我stop了容器 从新run镜像实例,再次curl查看私有库镜像内容 发现没有任何镜像
  1. [root@localhost conf]# curl -XGET http://172.21.47.251:5000/v2/_catalog
  2. {"repositories":["mysql_rqj"]}
  3. [root@localhost conf]# ^C
  4. [root@localhost conf]# docker ps
  5. CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
  6. 9090b5e984a0   registry    "/entrypoint.sh /etc…"   21 minutes ago   Up 21 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              vigilant_euler
  7. 78ba41711142   mysql:5.7   "docker-entrypoint.s…"   29 minutes ago   Up 29 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   jovial_bell
  8. [root@localhost conf]# docker stop 9090b5e984a0
  9. 9090b5e984a0
  10. [root@localhost conf]# curl -XGET http://172.21.47.251:5000/v2/_catalog
  11. curl: (7) Failed connect to 172.21.47.251:5000; 拒绝连接
  12. [root@localhost conf]# docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
  13. 90fb924e35e3fcef4103f9d7b642e57af281f379988041f466b739028e9e56c4
  14. [root@localhost conf]# docker ps
  15. CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
  16. 90fb924e35e3   registry    "/entrypoint.sh /etc…"   5 seconds ago    Up 4 seconds    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              sharp_fermi
  17. 78ba41711142   mysql:5.7   "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   jovial_bell
  18. [root@localhost conf]# curl -XGET http://172.21.47.251:5000/v2/_catalog
  19. {"repositories":[]}
复制代码
此题目存疑 等办理了之后再增补!!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表