docker -用-v方式创建容器数据卷

一、什么是容器数据卷

1、先回顾一下什么是镜像:是应用和应用所需要环境的一个包

2、数据:如果数据放在容器中,只要容器删除,那数据也就完蛋了,比如说费劲巴拉整了10000条测试用例放到容器里,结果别人手一抖,删除了,我估计你掐死对方的心都有

因此我们需要产生一个数据共享技术,即Docker容器中产生的数据,同步到本地,相当于做一个备份。

比如说,我在docker服务器中创建了三个容器,其中一个是mysql,我把我的数据写在了容器中的“opt/mysql”下,那我在我的本机的linux中也创建 一个/home/mysql,然后利用上面说的容器数据卷,将“opt/mysql”的数据内容,同步到/home/mysql中

卷技术,就是一种目录挂载,将我们容器内的目录,挂载到本地(突然想到网红词儿内卷是不是就这意思,镜像文件夹里有啥,你本地也得同步出个啥)

1、为了容器的同步操作

2、如果多个容器都挂载到本机的同一个目录,就可以实现数据共享

3、重点的是容器卷是双向的,容器的修改的内容可以同步到本机,本机修改的内容也可以同步到容器

这样其实就解决了一个问题

比如说我们在写python代码,我每次还要进容器,再去操作,有了这层双向同步,我就可以直接在我本机的linux文件里改,改完了以后,就会自动同步到容器里

二、使用数据卷

挂载方式:直接使用命令挂载 -v

docker run it -v   主机目录:容器内目录 (是不是很像上个文章的-p 端口映射) 

实践 一下

1、 我们来运行一个centos的镜像,生成一个容器,然后在容器中的/home映射到本机的/opt/monkey
[root@localhost opt]# docker run -it -v /opt/monkey:/home centos /bin/bash
Unable

<think>我们计划使用docker-compose部署OceanBase容器。根据用户之前的错误,我们需要注意iptables规则的问题,但docker-compose本身会处理网络配置。我们将创建一个docker-compose.yml文件来定义OceanBase服务。 步骤: 1. 创建项目目录 2. 编写docker-compose.yml 3. 启动服务 注意:OceanBase的镜像名称为`oceanbase/oceanbase-ce`,我们需要映射端口2881(默认MySQL协议端口)和2882(可选,用于OceanBase的直连端口)。同时,OceanBase容器需要较大的内存,建议至少分配4GB内存。 以下是docker-compose.yml的示例: ```yaml version: '3' services: oceanbase: image: oceanbase/oceanbase-ce:latest container_name: oceanbase-ce ports: - "2881:2881" # 如果需要,可以映射更多端口,例如:2882:2882(用于直连) environment: # 设置OB容器的内存限制,建议至少4G - MINI_MODE=0 - OB_MEMORY_LIMIT=4G volumes: # 持久化数据 - ob_data:/root/ob # 注意:OceanBase启动需要一些时间,所以健康检查可以设置长一点 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:2881/"] interval: 10s timeout: 10s retries: 20 restart: always volumes: ob_data: ``` 说明: - `ports`: 将主机的2881端口映射到容器的2881端口(OceanBase的MySQL连接端口)。 - `environment`: - `MINI_MODE=0` 表示不使用mini模式(即完整模式)。 - `OB_MEMORY_LIMIT=4G` 设置容器内存限制为4GB(根据主机情况调整)。 - `volumes`: 使用命名卷`ob_data`来持久化数据,避免容器重启后数据丢失。 启动命令: ```bash # 进入项目目录(假设docker-compose.yml所在目录) docker-compose up -d ``` 等待一段时间(OceanBase启动较慢),然后检查容器状态: ```bash docker-compose ps ``` 如果容器健康检查通过,就可以连接OceanBase数据库了。 连接方式(使用MySQL客户端): ```bash mysql -h127.0.0.1 -P2881 -uroot ``` 注意:默认没有密码,如果需要设置密码,可以在启动后进入容器设置。 ### 常见问题处理 1. **启动缓慢**:OceanBase首次启动需要初始化,可能需要几分钟。 2. **内存不足**:如果主机内存不足4GB,可以尝试调整`OB_MEMORY_LIMIT`为2G(但不推荐,可能影响性能)。 3. **端口冲突**:确保主机2881端口未被占用,或修改映射端口(如`"2882:2881"`)。 ### 健康检查说明 我们使用了简单的curl命令来检查2881端口是否就绪,如果OceanBase服务没有启动,健康检查会显示不健康。可以观察容器日志: ```bash docker-compose logs oceanbase ``` ### 持久化数据 使用命名卷`ob_data`,数据存储在Docker管理的卷中。如果需要备份,可以备份该卷。 ### 停止和清理 ```bash # 停止并删除容器(保留数据卷docker-compose down # 停止并删除容器数据卷(谨慎!) # docker-compose down -v ``` ### 引用说明 根据用户提供的引用[^1],我们使用了相同的镜像`oceanbase/oceanbase-ce`,并映射了相同的端口2881。 ### 相关问题 1. 如何调整OceanBase容器的内存限制? 2. 如何连接OceanBase容器内的数据库? 3. 如何备份和恢复OceanBase容器中的数据? [^1]: 用户提供的OceanBase容器启动命令</think>### 使用 Docker Compose 部署 OceanBase 容器 以下是完整的部署方案,通过 `docker-compose.yml` 文件实现一键启动 OceanBase 容器: #### 1. 创建 `docker-compose.yml` 文件 ```yaml version: '3.8' services: oceanbase: image: oceanbase/oceanbase-ce:latest container_name: oceanbase-ce ports: - "2881:2881" # 映射数据库端口 - "2882:2882" # 可选:OBProxy 端口 environment: - OB_MEMORY_LIMIT=4G # 分配内存大小(建议≥4GB) - OB_DATAFILE_SIZE=50G # 数据文件大小 - OB_LOG_DISK_SIZE=20G # 日志磁盘大小 volumes: - ob_data:/root/ob # 持久化数据存储 healthcheck: test: ["CMD", "obd", "cluster", "list"] interval: 10s timeout: 5s retries: 20 restart: unless-stopped networks: - ob-network volumes: ob_data: # 命名卷确保数据持久化 networks: ob-network: # 专用网络隔离 driver: bridge ``` #### 2. 启动 OceanBase 服务 ```bash # 启动容器(后台模式) docker-compose up -d # 查看启动日志(等待初始化完成) docker-compose logs -f oceanbase ``` #### 3. 验证服务状态 ```bash # 检查容器状态 docker-compose ps # 进入容器执行命令 docker-compose exec oceanbase bash obd cluster list # 查看集群状态 ``` #### 4. 连接数据库 ```bash # 使用 MySQL 客户端连接 mysql -h127.0.0.1 -P2881 -uroot -p -c -A # 默认无密码,直接回车即可 ``` #### 关键配置说明 | 配置项 | 说明 | 建议值 | |--------|------|--------| | `OB_MEMORY_LIMIT` | 容器内存限制 | ≥4GB(生产环境建议8GB+) | | `OB_DATAFILE_SIZE` | 数据文件大小 | 根据数据量调整 | | `volumes` | 数据持久化 | 必须配置避免数据丢失 | | `healthcheck` | 健康检查 | 确保服务完全启动再连接 | #### 常见问题解决 1. **启动超时问题**: ```bash # 增加等待时间(首次启动需3-5分钟) docker-compose up -d --wait-timeout 600 ``` 2. **内存不足处理**: 修改 `docker-compose.yml`: ```yaml environment: - OB_MEMORY_LIMIT=2G # 最小化模式 - MINI_MODE=1 # 启用微型模式 ``` 3. **数据备份**: ```bash # 备份数据卷 docker run --rm -v ob_data:/source -v $(pwd)/backup:/backup alpine \ tar czf /backup/ob-backup-$(date +%s).tar.gz -C /source . ``` > ⚠️ **注意**:首次启动需要下载约800MB镜像,初始化过程可能持续3-5分钟,请耐心等待健康检查通过[^1]。 ### 部署流程图解 ```mermaid graph TD A[创建 docker-compose.yml] --> B[启动服务 docker-compose up] B --> C{健康检查} C -- 通过 --> D[连接数据库] C -- 失败 --> E[查看日志 docker-compose logs] E --> F[调整内存/磁盘配置] F --> B ``` ### 相关问题 1. OceanBase 容器如何配置主从复制? 2. 如何监控 Docker 中的 OceanBase 性能指标? 3. OceanBase 容器资源限制如何优化? 4. Docker 中 OceanBase 数据迁移的最佳实践? [^1]: OceanBase 官方镜像文档及部署实践
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值