Docker容器目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向数据自动同步。我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求。这里我以在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配置文件到宿主机目录下,

Docker容器目录挂载

查看默认配置如下所示:

# 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容器的数据文件

Docker容器目录挂载

到此mysql容器目录挂载完成。


原文始发于微信公众号(面试技术):Docker容器目录挂载

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/187012.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!