1.关于Dockerfile
自己定义 Dockerfile ,构建自己要的镜像,如下:
FROM nvidia/cuda:11.4.2-runtime-ubuntu18.04
#MAINTAINER
RUN apt-get update && apt-get install -y git vim wget curl
#go
RUN cd /tmp && wget https://golang.org/dl/go1.14.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz
RUN cd /tmp && rm go1.14.6.linux-amd64.tar.gz
RUN mkdir -p /home/go/src && mkdir -p /home/go/bin && mkdir -p /home/go/pkg
RUN echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
ENV LIBRARY_PATH /usr/local/cuda/lib64/stubs
ENV NV_LIBNCCL_DEV_PACKAGE_NAME libnccl-dev
ENV NV_LIBNCCL_DEV_PACKAGE_VERSION 2.11.4-1
ENV NCCL_VERSION 2.11.4-1
ENV NV_LIBNCCL_DEV_PACKAGE ${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}+cuda11.4
2.构建镜像
#-f:指定 Dockerfile 名称 -t:为构建的镜像打上标签
docker build -f my.Dockerfile -t mydocker .
3.基于镜像构建 CONTAINER
#--name 自定义 容器名字,不然会自动起一个默认的名字
#前台运行,退出 exit 就会退出容器,里面的东西也会没了
#-t:进入终端;-i:获得一个交互式的连接,通过获取container的输入
docker run -it -p 8080:8080 -v /a/b:/home/a/b --name=one_docker mydocker /bin/bash
#创建一个守护态的Docker容器
docker run -itd --name=one_docker mydocker /bin/bash
4.gpu 相关
#启用 gpu
#这个会跑所有 gpu 卡
docker run --gpus all -itd --name=one_docker mydocker /bin/bash
#跑指定 gpu 卡,将 id 换成你的 卡
docker run --gpus "device=${id}" -itd --name=one_docker mydocker /bin/bash
docker run --gpus device=1 -itd --name=one_docker mydocker /bin/bash
#这个因为版本问题,可能会报错,所以用上面的方式
docker run --runtime=nvidia --name=one_docker -tid mydocker
docker: Error response from daemon: Unknown runtime specified nvidia.
5.如何进入进入容器
(1)docker attach
` docker attach container_id
`当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
当使用 exit 退出是,会同时退出容器
因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。
`#可以使用这个命令重启
docker restart container_id`
(2)使用docker exec 进入Docker容器
sudo docker exec -it 0c98227630f(或者容器名称) /bin/bash
这个方式执行 exit 退出,不会退出容器
6.其他命令
`#查看容器信息
docker inspect container_id`
`#删除 容器
docker rm -f CONTAINER_ID`
#删除镜像 image
/#docker rmi -f image_id ##-f:表示强制删除镜像;image_id:镜像id
docker image ls | grep '<none>' | awk '{print $3}' | xargs docker rmi -f
7.关于 docker run
(1)如何修改一个创建好的docker container的run参数?
docker run 没法修改,只能另外创建,但是还好不用完全重头来,用commit命令可以基于当前修改的内容创建一个新的image。
如,忘了设置port,volume,则
docker stop container a_container
docker commit a_container b_image
docker run --name b_container -itd -p ... -v ... b_image
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。