镜像(image):基础虚拟环境

容器(container): 虚拟环境的实例化。

两种方法部署新的docker:

一、使用docker build 通过Dockerfile 以及对应的工程文件编译打包成一个镜像:

      这是最典型的docker使用方案,详情查看dockerfile 如何编写来进行build。

       可以先docker run -it 一个父镜像,进去之后安装配置环境时候记录需要安装的东西,也可以直接查看pip list 列出来的安装包,然后进行dockerfile 的安装部分的编辑。

       注意,Dockerfile 里面的指令只会在本次build起作用,之后仅仅是作为一种信息给使用者查看而已,所以里面的CMD 指令也是编译的时候,作为启动容器时运行的依据,编译在了镜像里面,之后-it 进去容器修改CMD 的指令,使用方法二来制作的镜像,并不能在启动容器后运行新的CMD指令,相反,它还是运行了当初由docker build 时候CMD的指令。

      

# FROM repository.poizon.com/algo/algo-radar-bags-detector:v1.0.4
FROM repository.poizon.com/algo/algo-community-star-jersey-detector:v0.0.9

MAINTAINER jiangzhang

COPY . /app/code/
RUN sed -i "s/archive.ubuntu./mirrors.aliyun./g" /etc/apt/sources.list
RUN sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN sed -i "s/security.debian.org/mirrors.aliyun.com\/debian-security/g" /etc/apt/sources.list
RUN sed -i "s/httpredir.debian.org/mirrors.aliyun.com\/debian-security/g" /etc/apt/sources.list
RUN pip install -U pip
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
RUN pip config set install.trusted-host mirrors.aliyun.com

RUN mkdir -p  /logs/algo-radar-image-detect-bags-detector\
&& pip install -r requirements.txt \
&& python setup.py develop\
&& mkdir -p  /app/code \
&& apt-get autoclean \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /root/.cache/pip
ENV LOGS_PATH /logs/algo-radar-image-detect-bags-detector
EXPOSE 5000
WORKDIR /app/code

CMD python tools/radar_app.py image -n yolox-s -c ./model/yolox_bags_20210816.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu 2>&1

二、利用image1, 实例化一个容器,-it 进入容器后进行环境部署,部署完毕后退出容器,再将该容器打包成一个新的镜像。

docker build -t repository.poizon.com/algo/algo-radar-image-detect-bags-detector:v1.0.8 .
docker commit 当前运行的容器名 新镜像名:版本号

docker images

找到一个想要的image

启动一个基于这个image的容器实例

sudo docker run -p 5000:5000 -d repository.poizon.com/algo/radar-color-match:v0.0.8
docker run -p 5000:5000 -it [imagename] /bin/bash

这时候会进入容器,可以进行文件的修改,环境安装等。

docker run -p 5060:5000 -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all repository.poizon.com/algo/algo-radar-bags-detector:v0.0.0 /bin/bash

 

docker ps -a # -a 查看所有容器
#执行docker run 或者docker exec进入了一个容器
docker ps -a #查看容器,如果还在则使用如下命令重新进入
docker exec -it dd903b670192 /bin/bash
ctrl+d # 或者exit 退出当前进入的容器,退出后容器只是停止,还继续存在
docker start -ia dd903b670192 #重新进入之前-it 启动进入由退出的容器,如果执行docker run 会提示容器已经存在错误

找不到显卡驱动:

docker 新版本已经集成,不需要额外安装显卡驱动,但需要在启动时,指定是否为本次的容器显卡可见。

--gpus all # 所有显卡可见

笔者发现当在tmux 里面启动的时候,只是--gpus 还是找不到显卡,这时候需要增加如下参数,但普通终端里面docker run 是不需要增加这么多参数的。

--gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all
docker run -p 5060:5000 -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all repository.poizon.com/algo/algo-radar-bags-detector:v0.0.0 /bin/bash
docker ps // 查看所有正在运行容器
 docker stop containerId // containerId 是容器的ID

 docker ps -a // 查看所有容器
 docker ps -a -q // 查看所有容器ID

 docker start $(docker ps -a -q) // start启动所有停止的容器
 docker stop $(docker ps -a -q) // stop停止所有容器
 docker rm $(docker ps -a -q) // remove删除所有容器