• docker总结


    docker image和container及基础命令

    镜像image就是类,containers就是实例.
    以下是容器操作
    #运行
    docker run -p 本地端口:容器端口 --name 容器 名字 镜像名字:tag
    docker run -p 本地端口:容器端口 --name 容器名字 -v 本地绝对路径: 容器绝对路径 镜像名字:tag #挂载 弹幕说要去掉/app,不知道咋了.
    docker run -dp 本地端口:容器端口 username/镜像:tag #在镜像库中拉下来运行,不建议.
    docker run -it 镜像名字 /bin/bash #/bin/bash是启动容器后执行的命令
    #创建但不运行
    docker create --name myrunoob nginx:latest
    #进入容器,在运行的所有容器中选一个加个终端去操作;退出容器
    docker exec -it 9df70f9a0714 /bin/bash
    docker exec -it 容器的name bash
    docker attach 容器ID #不建议
    exit;Ctrl+P+Q
    #结束,重启,杀死
    docker stop container_name/container_id #停止容器
    docker start container_name/container_id #启动容器
    docker start -i containerID #启动并进入容器,i是交互,t是伪终端
    docker restart container_name/container_id #重启容器
    docker kill -s KILL mynginx #杀死容器
    #删除
    docker rm 9f069 #删除容器
    #拉取
    docker pull username/镜像:tag
    #查看镜像和运行
    docker ps -a

    以下是镜像操作

    #删除镜像
    docekr rmi d1165
    #查看ubuntu镜像
    docker images ubuntu

    docker-compose

    docker-compose.yml是多个容器联合运行的.我目前不需要.

    dockerfile

    dockerfile就是自己写个文件构建镜像(就是构建类).举例:

    FROM node:11#安装最新的node.js,last,这是一个底子
    MAINTAINER easydoc.net#维护者,啥意思?
    ADD . /app # 复制代码,感觉docekr都是<本地,容器>这种设置.这是把本地的代码复制到/app

    设置容器启动后的默认运行目录

    WORKDIR /app

    运行命令,安装依赖

    RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。

    例如 RUN npm install && cd /app && mkdir logs

    RUN npm install --registry=https://registry.npm.taobao.org#加速域名

    CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。

    如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。

    例如 CMD cd /app && ./start.sh

    CMD node app.js #也就是说本地代码中必须有app.js

    使用如下命令运行

    docker build -t test:v1 .#名字是test,tag或者版本就是v1,生成镜像了. #可以加入 -f dockerfile,当前文件夹下可以不用加.

    发布和部署,阿里云托管

    #发布和部署
    #就是发布到镜像仓库中.hub.docker.com.
    #使用push命令
    docker run -dp 本地端口:容器端口 username/镜像:tag
    #阿里云镜像托管,可以快速的push和pull
    docker pull registry.cn-hangzhou.aliyuncs.com/gzyunke/test:tag

    备份和迁移数据

    #就是在本地把文件tar一下,放在volume中;容器就能解压这个文件了.
    #备份
    docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4#运行中,mongo-data:/data
    #执行下一步的时候不用停止.
    docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu tar cvf /backup/backup.tar /data/ #
    #–rm:如果有同名的容器,就先删除该容器;–v-f:从mongo中备份;-v:本地:容器;
    #关于–rm:我查到的是,退出容器后会自动清理容器中的文件系统.所以,执行docker run命令带–rm命令选项,等价于在容器退出后,执行docker rm -v
    #ubuntu后边就是一个tar命令而已.就是压缩/data到/backup.
    #导入,迁移
    docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4#运行中,这是重新跑.新数据库
    #导入前,先把mongo停一下.stop.
    docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu bash -c “cd /data/ && tar xvf /backup/backup.tar --strip 1”
    #把本地映射到容器,然后ubuntu后边的所有就是解压文件到/data.

    docker与深度学习

    参考:

    1 cnstark/pytorch - Docker Image | Docker Hub.

    2 Docker教程-深度学习环境配置_周先森爱吃素的博客-CSDN博客.

    3 cnstark/pytorch_docker: Pure Pytorch Docker Images. (github.com).

    参考1给出了许多不同pytorch版本的镜像.直接docker pull就行.

    参考2 给出了搭建docker与深度学习的方法,如下

    1 安装docker
    2 安装nvidia-docker.必须安装了足够新的版本的 NVIDIA 显卡驱动和 Docker,可以不安装 CUDA,然后 nvidia-docker 的版本要高度适配,这里推荐按照官方教程进行安装,命令下面我也给出。

    distribution=$(. /etc/os-release;echo I D ID IDVERSION_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

    curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

    sudo apt-get update

    sudo apt-get install -y nvidia-docker2

    sudo systemctl restart docker

    测试命令如下:

    sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
    #也可以交互
    docker run -it --gpus all nvidia/cuda:11.0-base “bin/bash”
    #docker run -d -it -p 8515:8510 --gpus all facereco_v2 #类似的命令很多

    镜像拉取

    #两个好的cuda拉取地址
    docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04
    docker pull ufoym/deepo:pytorch-py36-cu100
    #国内托管
    docker pull registry.docker-cn.com/ufoym/deepo

    镜像导出

    1 dockerfile导出:这个就是给了个药方,自己买药
    2 打包容器.通过docker ps -a查看容器,找到我修改后的容器,记住其CONTAINER ID,然后通过docker commit -m “镜像说明” -a “作者名,最好同docker hub用户名” 容器id 作者名/镜像名:tag命令提交镜像。我们通过docker images查看到了新生成的镜像,此时从这个镜像生成容器就会看到我们上面修改后添加的zc.txt文件,我这里不演示了,我们通过docker save -o 文件路径及文件名 镜像名 将镜像保存为本地文件,同样导入本地文件为镜像的命令是docker load -i 文件路径及文件名。

    总结:将当前容器保存为一个镜像:docker commit -a “yaohui” containerID imageNAME
    将当前镜像保存为一个压缩文件:docker save -o name.tar imageNAME

    docker帮助

    docker save --help

    docker导入导出

    #docker save : 将指定镜像保存成 tar 归档文件。
    docker save -o images.tar postgres:9.6 mongo:3.4 #打包的tar包含两个镜像.
    docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
    #docker load : 导入使用 docker save 命令导出的镜像。
    docker load < busybox.tar.gz
    docker load --input fedora.tar
    #docker import : 从归档文件中创建镜像。
    docker import my_ubuntu_v3.tar runoob/ubuntu:v4 #还能起个名字
    #docker export :将文件系统作为一个tar归档文件导出到STDOUT
    docker export -o mysql-date +%Y%m%d.tar a404c6c174a2

    nvidia-docker

    参考1:Nvidia-docker 配置深度学习环境服务器(cuda+cudnn+anaconda+python)GPU服务器的配置哔哩哔哩bilibili.

    需要: nvidia-device,cuda,cudnn,docker,nvidia-docker.

    #查看nvidia-device
    nvidia-smi
    #查看cuda
    #注意,nvida驱动的cuda和查看的cuda不是一个东西,不一样也没关系.
    nvcc -V
    #查看cudnn版本,自己搜
    #查看docker版本
    nvidia-docker version
    #步骤
    #找个镜像,找nvidia/cuda,然后docker pull 镜像.
    #运行
    nvidia-docker run --rm 镜像id nvidia-smi#最后执行nvidia-smi命令

    查看一下dockerfile

    rm -rf /var/lib/apt/lists/* #删除下载包
    apt-get update && apt-get install -y --no-install-recommends vim openmpi-bin git graphviz python-pip wget #可以这样下载,干啥都更新

    运行自己的镜像

    nvidia-docker run -it --privileged=true --name test 镜像id /bin/bash
    #使用docker,而不是nvidia-docker
    docker run --runtime=nvidia
    #–privileged能真正获得硬件.
    #然后映射端口,是不是运行的时候也能给端口呀?
    docker -p 4654:22

    非管理员使用docker

    如果,非管理员权限的普通用户想要使用 Docker,使用下面的命令将其添加到 docker 组即可(这个用户组安装时自动创建)。

    sudo usermod -aG docker username

    docker跑实验

    直接使用别人建立好的linux+torch的镜像.拉取镜像就完了.但是现在也不需要了.

    欢迎留言交流

  • 相关阅读:
    手动搭建K8S环境
    分布式医疗大数据存储方案研究综述
    源码安装 HIPIFY 和应用示例,将cuda生态源码转化成HIP生态源码
    Leetcode刷题108. 将有序数组转换为二叉搜索树
    关于MySQL数据库中的索引
    痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)
    三角函数概述
    基于Echarts实现可视化数据大屏销售大数据分析系统
    Linux的so组件设计框架及逻辑
    爬虫 — 字体反爬
  • 原文地址:https://blog.csdn.net/weixin_44942303/article/details/126823150