docker 持久化
时间: 2023-10-30 15:05:35 浏览: 52
Docker提供了多种持久化方案,包括volume和bind mount。volume是Docker官方推荐的持久化方案,它会在宿主机文件系统中创建一个特定目录来存储数据。默认情况下,volume的存储空间来自于宿主机文件系统中的某个目录,例如/var/lib/docker/volumes/。这个目录中的数据对于docker系统外的程序是不可修改的。
另一种持久化方案是bind mount,它可以将数据存储在宿主机的任何地方。相比于volume,bind mount依赖于宿主机的目录结构,因此无法通过docker CLI直接管理。此外,非Docker进程和Docker进程都可以修改bind mount中的数据。
通过docker run命令的-v选项,可以在容器内部创建一个volume或者指定一个bind mount。例如,docker run -it -v /data --name container1 busybox会创建一个名为/data的volume,并将宿主机的/var/lib/docker/volumes/data目录映射到容器内部的/data目录。而docker run -it -v host-dava:container-data alpine sh会将宿主机的host-dava目录映射到容器内部的container-data目录。
总之,Docker的持久化方案可以根据需求选择volume或bind mount来实现数据的持久化存储。
相关问题
docker持久化mysql
回答: 在Docker中持久化MySQL可以通过使用数据卷挂载的方式实现。首先,我们需要拉取MySQL的镜像,例如使用命令"docker pull mysql:8.0.26"来获取MySQL 8.0.26版本的镜像。[1]接下来,我们可以使用参数"-v /e/docker/mysql/data:/var/lib/mysql/"将本机上的"E:/docker/mysql/data"目录映射到Docker容器中MySQL的"/var/lib/mysql/"目录下,从而实现数据的持久化。[2]这样,MySQL的数据将会保存在宿主机的指定文件夹中,即使容器被删除或重新创建,数据也不会丢失。如果需要更详细的安装步骤,可以参考相关文档或博客。[3]
EMQX docker持久化
EMQX docker持久化可以通过修改EMQX配置文件和使用docker-compose实现。具体步骤如下:
1. 修改EMQX配置文件:在emqx/etc/emqx.conf中添加以下内容:
persistence.client_session.clean_interval = 7200s
persistence.client_session.max_inflight = 65535
persistence.client_session.queue_qos0_messages = false
persistence.client_session.queue_qos1_messages = true
persistence.client_session.queue_qos2_messages = true
persistence.offline_message.max_inflight = 1000000
persistence.offline_message.queue_qos0_messages = false
persistence.offline_message.queue_qos1_messages = true
persistence.offline_message.queue_qos2_messages = true
persistence.subscription.max_inflight = 65535
persistence.subscription.queue_qos0_messages = false
persistence.subscription.queue_qos1_messages = true
persistence.subscription.queue_qos2_messages = true
persistence.retained_message.max_inflight = 1000000
persistence.retained_message.queue_qos0_messages = false
persistence.retained_message.queue_qos1_messages = true
persistence.retained_message.queue_qos2_messages = true
log.console = file
log.console.level = debug
log.console.file = /emqx/log/console.log
log.error = file
log.error.level = error
log.error.file = /emqx/log/error.log
log.crash = file
log.crash.file = /emqx/log/crash.log
log.crash.maximum_size = 10MB
log.crash.maximum_rotation = 10
2. 创建docker-compose.yml文件:在该文件中添加以下内容:
version: '3'
services:
emqx:
image: emqx/emqx:latest
container_name: emqx
restart: always
ports:
- "1883:1883"
- "8883:8883"
- "8083:8083"
- "18083:18083"
volumes:
- ./emqx/data:/opt/emqx/data
- ./emqx/log:/opt/emqx/log
- ./emqx/etc:/opt/emqx/etc
3. 创建redis文件夹和redis.conf文件:在redis文件夹中创建redis.conf文件,并添加以下内容:
appendonly yes
appendfsync everysec
4. 启动集群:在终端中运行docker-compose up命令启动EMQX集群。