Docker隔离服务器不同用户环境 | 青训营

最近参加青训营学习了微服务的一些组件,觉着docker非常nice,同时想到实验室服务器是大家共用的,有时候难免会因为一些依赖版本不同而产生冲突。为了相互之间不影响,决定使用docker进行用户隔离,通过sshddocker给每个用户分配一个docker虚拟容器 ,不同用户通过不同的端口进行连接。

1.下载镜像

下载docker Ubuntu镜像

shell 复制代码
docker pull ubuntu:18.04

若是用于GPU训练则下载cuda版本:

shell 复制代码
docker pull nvidia/cuda:10.0-cudnn7-devel

想要用其他版本可到docker hub中寻找。

使用docker images可检查是否pull成功:

下载失败的请检查tag或者配置阿里镜像加速。

2.docker 容器实例创建

创建一个docker 容器,以增加里面的配置,使其后面能够通过ssh连入这个docker容器

shell 复制代码
docker run -it nvidia/cuda:10.0-cudnn7-devel /bin/bash
# 使用Ubuntu的则用下面这条指令:
docker run -i -t ubuntu:18.04 /bin/bash

在容器实例里面执行下列指令:

shell 复制代码
apt-get update
apt-get install openssh-server  # 安装sshd
which sshd

创建权限分离目录:

shell 复制代码
mkdir /var/run/sshd

设置密码,后续远程连接使用:

shell 复制代码
passwd

修改ssh配置文件,设置为允许root远程登录:

shell 复制代码
apt-get install vim #安装vim
vim /etc/ssh/sshd_config

PermitRootLogin prohibie-password 修改为:PermitRootLogin yes 即可。若没有则加上PermitRootLogin yes

shell 复制代码
apt-get install inetutils-ping  #安装网络工具,后续ping网络(可不装)

最后退出:

shell 复制代码
exit

3.将容器打包成镜像

docker ps -a找到刚刚新建但退出的容器

通过container id将容器打包成镜像:

shell 复制代码
docker commit 76edced49b4a cuda10:1.0

docker images 可以看到刚刚打包的镜像

4.启动容器实例服务

启动docker容器实例:

shell 复制代码
docker run -d -p 22 --name pshawn-ssh --gpus all cuda10:1.0 /usr/sbin/sshd -D

也可使用下面这个功能更全面的命令:

shell 复制代码
docker run -d -p 40901:22 -v /mnt/docker-user-ssh/pshawn-data:/mnt --privileged=true --name pshawn-ssh --restart=always --gpus all cuda10:1.0 /usr/sbin/sshd -D

-v /mnt/docker-user-ssh/pshawn-data:/mnt表示将主机的目录/mnt/docker-user-ssh/pshawn-data和虚拟容器中的目录/mnt挂载,这样就能保存数据。

若是使用--gpus报错,需要在主机先安装一个英伟达的容器运行时:

shell 复制代码
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
ERRO[0000] error waiting for container:

解决方法:

shell 复制代码
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

参考:

Docker 使用GPU 错误之Error could not select device driver "" with capabilities: [[gpu]]

docker gpu报错Error response from daemon: could not select device driver "" with capabilities: [[gpu]]_

相关推荐
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬2 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399652 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold3 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵3 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记
用户916357440954 天前
AI刷题-动态规划“DNA序列编辑距离” | 豆包MarsCode AI刷题
青训营笔记
热的棒打鲜橙4 天前
数字分组求偶数和 | 豆包MarsCode AI刷题
青训营笔记