Docker 19.03.13的四个使用细节

本文探讨了Docker环境下MySQL的应用技巧,包括localhost的理解、连接Docker内MySQL的方法、库表数据保存机制及docker-compose的使用注意事项。

最先提一句,据说docker若崩溃难以恢复,docker上是否放mysql需要慎重考虑

1.localhost在docker里意味着什么?

不是docker所在的服务器的ip地址

docker里的tomcat容器上的web项目连接mysql的url中,例如

spring.datasource.url=jdbc:mysql://域名:3306/数据库名?characterEncoding=UTF-8&serverTimezone=GMT

如果这个mysql和这里的docker安装在同一台服务器上(当然实际生产环境时MySQL单独存放的),无论这个mysql安装docker上还是直接安装在linux上,

域名不要使用localhost(这相当于一个相对地址),

而要用ip地址(这相当于一个绝对地址),

例如连接docker里的mysql容器,用localhost会导致连接mysql失败,tomcat运行日志报sqlException和communicationException异常:

在这里插入图片描述

2.如何登录docker里的mysql容器?

运行在docker里的mysql容器,linux上访问它要加 -h 127.0.0.1, 如:

mysql -h 127.0.0.1 -u root -p

当然要访问它也可以使用客户端navicat。

3.关于docker上的mysql容器里面的库及其表的存在或清空问题

3.1docker

执行关闭容器命令

docker stop 容器id

,此前创建的库表依然存在 。

执行删除容器命令

docker rm 容器id

,此前创建的库表被清空。

3.2docker-compose

(1)执行关闭或关闭并删除命令

docker-compose stop|down

之后 ,之前建立的库表依然存在。

(2)执行构建命令

docker-compose build

或 执行构建并启动命令

docker-compose up --build

,之前建立的库表被清空。

4.docker-compose启动支持类似事务回滚的设定吗?

在执行命令

docker-compose up -d

之后,有的容器启动失败虽然会报错,但是其余容器照常启动并运行,不会发生类似事务回滚的机制。

如果可以设定事务回滚的机制是否更加合理?即同一个docker-compose.yml管理的所有容器,只要启动失败的容器,那么其余所有容器都不应该照常启动运行。

<think>嗯,用户的需求很明确,是关于NVIDIA Docker的配置和使用指南。从问题表述看,用户应该是有一定技术背景的开发人员或运维工程师,正在尝试部署GPU加速的容器化应用。这类需求通常出现在深度学习、科学计算等场景。 用户可能遇到的具体痛点包括:如何在容器内调用GPU设备,如何管理不同版本的CUDA环境,以及如何优化容器性能。考虑到NVIDIA生态的复杂性,需要特别注意驱动兼容性问题。 关于技术细节,有几个关键点必须强调:首先是宿主机驱动与容器内CUDA工具包的版本匹配,这是最常见的问题来源;其次是docker运行时(runtime)的切换机制,很多用户会忽略这个配置步骤;最后是持久化模式设置,这对多GPU环境尤为重要。 在安全方面,需要提醒用户注意容器内的权限管理,避免直接挂载/dev目录。性能优化点则包括共享IPC命名空间和使用MIG技术分区GPU。 用户可能没意识到但实际很有用的功能是nvidia-container-cli工具,它可以用来调试容器启动问题。另外,对于Kubernetes用户,补充说明Device Plugin的部署方式会很有帮助。 最后生成的拓展问题覆盖了典型场景:从基础验证到多容器管理,再到生产环境部署,形成完整的学习路径。特别是问题6关于NGC目录的使用,很多新用户不知道这个官方镜像仓库能极大简化部署流程。</think>以下是 NVIDIA Docker 的详细配置与使用指南,涵盖关键步骤和最佳实践: --- ### **一、前置条件** 1. **硬件要求** - NVIDIA GPU(支持 CUDA) - 验证 GPU 状态: ```bash nvidia-smi # 输出 GPU 信息及驱动版本 ``` 2. **软件依赖** - 已安装 Docker Engine(版本 ≥ 19.03- 安装 NVIDIA 驱动(推荐最新稳定版) - 验证驱动兼容性: ```bash cat /proc/driver/nvidia/version ``` --- ### **二、安装 NVIDIA Container Toolkit** 1. **添加仓库** ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` 2. **安装工具包** ```bash sudo apt update && sudo apt install -y nvidia-container-toolkit ``` 3. **配置 Docker 运行时** ```bash sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker ``` --- ### **三、使用 GPU 容器** #### **1. 基础命令** - **运行容器并调用 GPU** ```bash docker run --gpus all nvidia/cuda:12.2.0-base nvidia-smi ``` - `--gpus all`:分配所有可用 GPU - `nvidia/cuda:12.2.0-base`:官方 CUDA 基础镜像 - **指定 GPU 数量** ```bash docker run --gpus 2 nvidia/cuda:12.2.0-base nvidia-smi ``` - **指定 GPU 设备 ID** ```bash docker run --gpus '"device=0,1"' nvidia/cuda:12.2.0-base nvidia-smi ``` #### **2. 验证 GPU 访问** 在容器内执行: ```bash nvidia-smi # 应输出与宿主机相同的 GPU 状态 ``` #### **3. 构建自定义镜像** Dockerfile 示例: ```dockerfile FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 RUN apt update && apt install -y python3-pip COPY requirements.txt . RUN pip install -r requirements.txt # 包含 PyTorch/TensorFlow 等 GPU 库 ``` --- ### **四、高级配置** #### **1. 持久化模式(多容器共享 GPU)** ```bash sudo nvidia-smi -pm 1 # 启用持久化模式 ``` #### **2. 限制 GPU 显存** ```bash docker run --gpus all --ulimit memlock=-1 nvidia/cuda:12.2.0-base ``` #### **3. 容器内 GPU 监控** 使用 `dcgm-exporter` 导出指标: ```bash docker run -d --gpus all --rm -p 9400:9400 nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0 ``` --- ### **五、常见问题解决** 1. **GPU 未识别** - 检查 `docker info | grep Runtimes` 是否包含 `nvidia` - 验证驱动版本:`nvidia-smi` 与 [CUDA 兼容表](https://docs.nvidia.com/deploy/cuda-compatibility/index.html) 匹配 2. **CUDA 版本冲突** - 容器内 CUDA 版本需 ≤ 宿主机驱动支持的版本 - 检查兼容性:`nvidia-smi` 顶部显示的 `CUDA Version` 3. **权限问题** 添加用户到 `docker` 组: ```bash sudo usermod -aG docker $USER && newgrp docker ``` --- ### **六、最佳实践** 1. **镜像选择** - 开发环境:`nvidia/cuda:12.2.0-devel-ubuntu22.04`(含编译工具) - 生产环境:`nvidia/cuda:12.2.0-runtime-ubuntu22.04`(轻量级) 2. **共享 IPC 命名空间** ```bash docker run --gpus all --ipc=host ... # 提升多进程通信性能 ``` 3. **使用 NVIDIA Container Runtime** 在 `daemon.json` 中设置默认运行时: ```json { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } ``` --- ### **七、Kubernetes 集成** 1. 安装 [NVIDIA Device Plugin](https://github.com/NVIDIA/k8s-device-plugin): ```bash kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml ``` 2. Pod 中请求 GPU: ```yaml resources: limits: nvidia.com/gpu: 2 ``` --- > 参考资源: > [NVIDIA Container Toolkit 文档](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) > [Docker GPU 支持指南](https://docs.docker.com/config/containers/resource_constraints/#gpu) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值