docker 基本使用

-do1.安装docker:

   Redirecting…

0. 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

4. 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
导入压缩包到image :docker load --input aa.tar
11.直接把container 导出,然后导入,这样文件大小会大大缩小
docker export test20  -o ./faceexport.tar
gzip --best faceexport.tar
cat /home/faceexport.tar | docker import - face:latest

12. 添加卷

ln -s /u01 /var/lib/docker/volumes/volu01
docker volume create volu01
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
13.开机启动, 之前已经对卷建立软连接,ln -s /u01 /var/lib/docker/volu01
  在/etc/rc.local里面加入如下行
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守护程序

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

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

  

docker update CONTAINER --restart always

17. 制作ubuntu1604,docker

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

18. 从dockerfile得到docker image

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

19. 运行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"

20. 把文件夹复制到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,那么所有的存储空间是统一的。

UVA-1024x407

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

26. 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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值