乐趣区

关于docker:docker-常用总结

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…

退出移动版