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的镜像.拉取镜像就完了.但是现在也不需要了.

欢迎留言交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值