我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向数据自动同步。我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求。这里我以在CentOS7.8系统的Docker 20.10.7容器的mysql容器目录挂载为例子。mysql容器安装参考文章:Docker安装MySQL。
MySQL容器目录挂载
1、在宿主机home目录下创建mysql的配置文件目录和数据文件目录
[root@localhost ~]# cd /home
[root@localhost home]# mkdir -p mysql/data
[root@localhost home]# mkdir -p mysql/conf
2、将mysql容器的配置文件复制到宿主机的mysql配置文件目录之下
# docker cp 容器id:容器内路径 目标主机路径
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e96badb3a208 mysql:5.7 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql57
#查找配置文件位置
sh-4.2# mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
[root@localhost ~]# docker cp e96badb3a208:/etc/my.cnf /home/mysql/conf
成功复制my.cnf配置文件到宿主机目录下,
查看默认配置如下所示:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
3、在宿主机修改 my.cnf 文件 加上下面的代码:
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[client]
default-character-set=utf8
4、删除mysql容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e96badb3a208 mysql:5.7 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql57
[root@localhost ~]# docker stop e96badb3a208
e96badb3a208
[root@localhost ~]# docker rm e96badb3a208
e96badb3a208
5、重新挂载在启动一个新的mysql实例:
#-v /宿主机路径:/容器内路径 # 指定路径挂载
[root@localhost ~]# docker run -itd --name mysql57 -p 3306:3306 -v /home/mysql/conf/my.cnf:/etc/my.cnf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
fd069fc7fb2f4fd2c0544eeab42ec9a932d701382643c9c508ac86bf120d5f5b
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd069fc7fb2f mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql57
6、查看编码,已成功修改默认为utf8编码(mysql容器安装默认为latin1编码)
[root@localhost ~]# docker exec -it fd069fc7fb2f /bin/sh
sh-4.2# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.7.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
/home/mysql/data目录下生成mysql容器的数据文件
到此mysql容器目录挂载完成。
原文始发于微信公众号(面试技术):Docker容器目录挂载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/187012.html