简单搭建自己所需要的docker环境
简单利用 docker搭建自己所需开发环境
docker的基本理论
参考:https://www.runoob.com/docker/docker-tutorial.html
重点需要弄清楚 镜像 和 容器
准备条件
首先需要安装
- docker-ce
- nvidia-docker (可选,如果容器需要调用系统的gpu则必须要安装)
安装 nvidia-docker 参考链接: https://github.com/NVIDIA/nvidia-docker
如果遇到找不到有效的 OpenPGP 数据的错误可以参考https://www.cnblogs.com/jimchen1218/p/14186262.html或者https://blog.csdn.net/anglemanyi/article/details/110917108
安装 docker-ce
安装 docker-ce 参考: https://www.runoob.com/docker/ubuntu-docker-install.html
安装 nvidia-docker
参考: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
讲普通用户加入到docker 用户组中 : https://cloud.tencent.com/developer/article/1912506
- Setup the stable repository and the GPG key
因为我使用的 debian 系的系统
cat /etc/debian_version #查看debian版本
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/debian9/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- 安装 nvidia-container-toolkit
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
docker 换源
docker更换国内镜像,新建 /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://9iudsi8t.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
获取相关镜像
-
从 dockerhub 上搜索自己想要的基础镜像(也可以使用docker search命令)
-
获取想要的镜像,然后pull
docker pull ubuntu:18.04
docker images # 查看本地的镜像
创建容器并安装相应依赖
- 创建容器
创建容器命令如下:
docker container run --gpus all --user root -it --ipc=host -v /home:/home dockerduong/cuda10.2-ubuntu18.04:latest /bin/bash
如果不需要使用gpu 则
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
另外旧版的 nvidia-docker 调用 gpu的方式:
docker run --runtime=nvidia [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run的参数可以参考:https://www.runoob.com/docker/docker-run-command.html
- 容器换源以及安装相关依赖
cat /etc/issue # 在容器中查看 linux 版本
cp /etc/apt/sources.list /home/cc/ # 将容器中的源拷贝到 本机下,因为新的容器没有编辑器(有可能有nano编辑器吧),在本机上用文本编辑器(vim gedit vscode)将文件修改用来换源
mv /home/cc/sources.list /etc/apt/ #将本机修改后的文件替换掉容器中的文件
apt-get update
apt-get install gcc g++ gdb openssh-server rsync vim #如果需要sudo 的话还得安装 sudoer
apt-get install cmake
passwd root #设置root用户密码
vim /etc/ssh/sshd_config #修改配置使能 root用户ssh登录
vim /etc/hosts.allow # 使能其他ip登录
/etc/init.d/ssh restart #重启服务
配置 ssh
vim /etc/ssh/sshd_config,修改配置 使能root用户ssh登录
PermitRootLogin yes
vim /etc/hosts.allow,使能其他ip登录
sshd: ALL
- 保存镜像
将容器保存镜像成离线文件后续配合load命令可以直接在其他设备上直接加载 自己制作的镜像
docker commit -a "cc" 05786906bed8 ubuntu18.04/cuda10.2:latest # 将容器提交为镜像
docker save -o ubuntu18.04cuda10.2.tar ubuntu18.04/cuda10.2:latest # 保存镜像成离线文件
- 启动这个镜像的容器,并映射本地的一个闲置的端口(例如10000)到容器的22端口,并启动容器的sshd 。
docker run -d -p 10000:22 ubuntu18.04/cuda10.2:latest /usr/sbin/sshd -D
现在打开新的终端,输入ssh root@127.0.0.1 -p 10000,如果能链接成功,会要求输入密码的,输入刚才设置的密码就可以进入容器的终端了。
- 容器的开机自启
部署项目服务器时,为了应对停电等情况影响正常的docker服务,会把Docker容器设置为开机自动启动。
在使用docker run启动容器时,使用--restart参数来设置
docker container run --gpus all --restart=always ......
如果创建时未指定 --restart=always ,可通过update 命令
docker update --restart=always ......
- 自己的pc运行不同架构的镜像
在自己x86的平台上运行 armv7的镜像 会出现问题
解决方法参考https://github.com/multiarch/qemu-user-static