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

参考文章:https://www.cnblogs.com/joker...


nicce
393 声望2 粉丝