docker 基本使用

-do1.安装docker:

Redirecting...

  1. docker内使用gpu, 安装nvidia-docker:

https://github.com/NVIDIA/nvidia-docker,

安装后使用:nvidia-container-cli -k -d /dev/tty list, 验证正确,无报错,即为正确

  1. docker 启动image,如果启动gpu 版本必须用nvidia-docker, -d detach, -i interactive, -t with fake terminal , -network=host 与本机一样的网络

nvidia-docker run -dit --name icdl --restart=always --network=host <image> bash

连接到已有容器 sudo docker exec -it 775c7c9ee1e1 /bin/bash,

加入--always, 就是这个docker 挂掉以后,dockerd会自动把这个container启动。systemd把dockerd启动,dockerd守护always的container

2.用docker 代替nvidia-docker 启动带有gpu, cuda 的container

docker run --device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia0 -v nvidia_driver_367.48:/usr/local/nvidia:ro -dit --name=test7 --network=host docker.io/bvlc/caffe:gpu /bin/bash

新版不用这么麻烦了,按照https://github.com/NVIDIA/nvidia-docker,只需docker --runtime=nvidia ...

docker19.03后的版本使用:docker --gpus all

3.带gdb支持的container, run 时候加上--cap-add=SYS_PTRACE

echo 0 /proc/sys/kernel/yama/ptrace_scope

  1. docker attach 以后,使用Ctrl+P and Ctrl+Q离开

5.docker 离线安装 1)https://download.docker.com/linux/static/stable/x86_64/ 下载后,解压到/usr/local/bin下面,2)然后

vi /etc/fstab

#在结尾添加

none ``/sys/fs/cgroup cgroup defaults 0 0

重启

3)如果使用gpu, 就用2中命令启动container

6.有哪些container: docker ps -a

7.有哪些image: docker images

8.删除不用的container: docker rm -f face/face1:version1

9.删除image : docker rmi <image>

10.将当前container 保存成image, commit部分,face/face1是仓库名称,version1是tag, 如果docker里面要使用gpu,那么一定不能用11的方式,一定要commit成image, 再load, 否则回报特别多的错误,/usr/lib/x86_64-linux-gnu/libnvidia-*,下面有些文件大小会是0,就算从host拷贝过去,也会遇到其它非常多的错误。nvidia-docker相当于把host的driver直接透传到docker内部

docker commit c3f279d17e0a  face/face1:version1

将image 导出成压缩包:docker save -o /home/sam/aa.tar  face/face1:version1
highlight 复制代码
导入压缩包到image :docker load --input aa.tar
highlight 复制代码
11.直接把container 导出,然后导入,这样文件大小会大大缩小
highlight 复制代码
docker export test20  -o ./faceexport.tar
highlight 复制代码
gzip --best faceexport.tar
highlight 复制代码
cat /home/faceexport.tar | docker import - face:latest

12. 添加卷

highlight 复制代码
ln -s /u01 /var/lib/docker/volumes/volu01
highlight 复制代码
docker volume create volu01
highlight 复制代码
docker run -dit --restart=always --mount source=volu01,target=/u01 --name icdl1 --network=host 93682a1555c1 bash
如果只是-d 没有it,是无法启动的, volu01后边逗号后不能有空格

更复杂的是:
docker run -dit --gpus all --restart=always --log-opt max-size=10m -e LANG='en_US.utf8' -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro  -e PATH=/root/anaconda3/bin:/bin/:/usr/bin/ -e MXNET_CUDNN_AUTOTUNE_DEFAULT=0 -e LD_LIBRARY_PATH=:/root/anaconda3/pkgs/cudatoolkit-10.0.130-0/lib/  --name aiex4_v20200104 --network=host aiex4:v20200104  /bin/bash -c ". /root/anaconda3/etc/profile.d/conda.sh && echo  && conda activate mxnet && cd /algorithm_hub; python run.py"



docker run --gpus all -itd --restart=always --log-opt max-size=10m --log-opt max-file=1 --ipc=host -h face-machine -e DISPLAY=:0 -e LANG='en_US.utf8' --privileged  -v /tmp/.X11-unix:/tmp/.X11-unix -v /data:/data/ -v /etc/localtime:/etc/localtime -v /data/face_terminal/cameraConfigs/camera_xiaofang.json:/data/face_terminal/cameraConfigExample.json --name face_xiaofang ai/face:1012 /data/face_terminal/docker-run.sh
highlight 复制代码
13.开机启动, 之前已经对卷建立软连接,ln -s /u01 /var/lib/docker/volu01
  在/etc/rc.local里面加入如下行
highlight 复制代码
systemctl start docker
docker volume create volu01
docker start icdl1
docker exec -d icdl1 starticdl.sh

其中,starticdl.sh位于container内部/usr/bin/目录下面,内容如下,其中server.py里面,加入了守护程序

#!/bin/bash
cd /idcardDriverlisenceRecog/src/ && python server.py

守护程序部分见:python守护程序_northeastsqure的专栏-CSDN博客_python守护程序

highlight 复制代码
14. alpine极简版linux,含有busybox

安装bash: RUN apk add --update bash && rm -rf /var/cache/apk/*

内无管理员权限,在dockerfile里面:USER root

15.docker内部程序开机启动:

cd /idcardDriverlisenceRecog/src/

python /idcardDriverlisenceRecog/src/IDcardVehiclelisenceRecog_facepp_youtu.py

exit 0

  1. 让docker 某 container 与docker 一同起来,即永远不停机

docker update CONTAINER --restart always

  1. 制作ubuntu1604,docker

从这里连接制作,跟着18命令,https://github.com/tianon/docker-brew-ubuntu-core/tree/010bf9649b1d10e2c34b159a9a9b338d0fdd4939/xenial

  1. 从dockerfile得到docker image

docker build --tag='ubuntu1604:Dockerfile' .

  1. 运行docker命令,比如docker ps,遇到:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.37/containers/json: dial unix /var/run/docker.sock: connect: permission denied

把当前用户加入到docker组,然后重新登录

sudo usermod -a -G docker $USER

不重新登录执行:sg docker -c "bash"

  1. 把文件夹复制到docker container里面,或者拷贝出来

docker cp src/opencv-2.4.13.6 seetaface_ubuntu1604:/

两个参数倒过来,就是拷出来

21.遇到错误:stderr: nvidia-container-cli: initialization error: cuda error: unknown error\\\\n\\\

百思不得其解,很多说是驱动问题,我想,驱动什么问题呢,然后查看nvidia docker的架构,启动docker image,是不依赖与host的cuda的,那么为什么报cuda error, 没有理解。后面重启系统,结果好了,系统很久没有重启了。问题还是没有理解,为什么报cuda error呢,不装cuda也是可以的呀。

22.搜索docker错误的时候,遇到说用dmesg查看,那么它是干什么的?

dmesg是打印 kernel ring buffer

23.什么是kernel ring buffer?

在syslog daemon启动以前,操作系统把日志保存到kernal ring buffer里面,写到/var/log/dmesg,里面。syslog daemon启动后,内核的消息也是写到这里,同时写到syslog里面。

24.什么是nvidia-uvm?

uvm:unfied virtual memory. 每个gpu有自己的显存,系统有自己的ram内存,那么如何分别访问呢?如果没有uvm,那么编程者,要指定我的程序是在 ram,还是在gpu, 有了++uvm,那么所有的存储空间是统一的。++

CUDA 6 Unified Memory explained - StreamHPC

可见,cuda编程,这个模块是必须的,所以nvidia docker启动必须加载这个模块。

25.开启图形显示

xhost local:docker

docker run -it --name xwin -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/ckhung/data:/tmp/exdata ubuntu:18.04 bash

apt-get install -y x11-apps

与外面主机用户同名

useradd -m -s /bin/bash -u 1000 silva

su silva

  1. container 启动以后如何更改container 的主机名称?

    lsns
    nsenter --target 1785 --uts hostname hostname_abc
    https://serverfault.com/questions/716719/how-do-i-change-docker-host-name-after-the-image-creation/717191

27.如何离线安装 nvidia container toolkit?

下载 Release v1.17.2 · NVIDIA/nvidia-container-toolkit · GitHub

然后tar xf解压

然后dpkg -i 安装

相关推荐
dessler2 小时前
Docker-原理之写实复制(cow)
linux·运维·docker
shelby_loo5 小时前
在 Ubuntu 下通过 Docker 部署 MySQL 服务器
服务器·ubuntu·docker
寰宇软件8 小时前
Docker: 教程07 - ( 如何对 Docker 进行降级和升级)
docker·容器·eureka
小参宿9 小时前
高效绘图不再受限!本地搭建Excalidraw与随时随地高效绘制流程图教程
运维·服务器·windows·docker·centos·流程图
调包人10 小时前
k8s dashboard离线部署步骤
docker·容器·kubernetes
Rhys..11 小时前
本地导入封装的模块 在docker内报错ImportError
运维·docker·容器
dsd233311 小时前
Docker 专栏 —— Dockerfile 指令详解
运维·docker·容器
有来技术12 小时前
Windows 系统下 Docker 和 Docker Compose 安装配置:一键部署有来开源项目本地环境
docker
凌寒ᨐ舞12 小时前
idea 运行 docker-compose 文件问题
java·docker·intellij-idea
言之。14 小时前
容器技术思想 Docker & K8S
java·docker·kubernetes