docker学习笔记

更改docker的默认存储路径

https://medium.com/developer-space/how-to-change-docker-data-folder-configuration-33d372669056
方法一

  • service docker stop
  • 改/etc/default/docker 放开DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /your_docker_path"
  • 改/etc/docker/daemon.json 添加"data-root": "/your_docker_path",
  • service docker start

方法二:

  • 修改/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --dns 8.8.8.8 --dns 8.8.4.4 -g /media/sc/unitek1/docker_base_dir
  • sudo systemctl daemon-reload
    告知docker配置文件已经修改

  • 重启docker服务
    service docker restart

创建container时赋予名称

docker run -itd --name linux123 ubuntu /bin/bash

镜像的保存和载入

docker save -o cuda_cudnn_tensorrt.tar responsity:tag

docker load -i cuda_cudnn_tensorrt.tar

gui操作

xhost +
docker run -it -v /home/sc/Desktop/ros2_container_home:/home --env="DISPLAY=${DISPLAY}" --privileged --net=host --runtime=nvidia ros2_nv:new

  • docker启动时加--rm,容器退出后就没有了

  • 查看有哪些docker
    docker container ls -a

docker ls只会列出活跃的container(即没退出的) docker ls -a才会列出所有存在的容器!

  • 移除所有exited container

docker操作

  • 我们可以使用 docker images 来列出本地主机上的镜像。

  • docker run -it [imagename] /bin/bash (-i 交互式操作 -t 终端)

  • 主机和容器之间拷贝文件
    docker cp foo.txt mycontainer:/foo.txt
    docker cp mycontainer:/foo.txt foo.txt

sudo docker cp 071ccac5310e:/tensorflow/models/research/slim/transfer_learn

  • 退出docker
    容器内shell:exit

  • 创建新的image

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -m "sc images" -a "sc"  a8a86ef8085f sc_tpu:v1 
  • 删除image
    docker rmi [imagename]

  • 保存image
    docker image save [imagename] -o [outtputname],比如docker image save bionic_ros2:v0  -o bionic_ros2.tar

  • 容器内的磁盘路径映射到主机磁盘路径
    docker run -it -v [本机路径]:[容器内路径] [imagename]
    比如:sudo docker run -it -v /home/sc/work_codes/git/tpu/ws:/home/sc ros2_nv:new

创建挂载点的几种方式:https://blog.csdn.net/zhuchunyan_aijia/article/details/80094644

  • 进入一个容器
    sudo docker exec -it [容器id] /bin/bash

  • 杀掉一个容器
    docker kill -s KILL [容器id或name]
    sudo docker kill -s KILL bca754c9a6b7

docker把镜像及容器文件都存储在哪里?

/var/lib/docker

参考:https://blog.csdn.net/weixin_39800144/article/details/79019503

privileged参数作用

大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器

privileged参数

container name "/tpu" is already in use

docker: Error response from daemon: Conflict. The container name "/tpu" is already in use by container "d9af0c6899a9aaa0445ab98a43abde5e29a313414565443ef9dadc55587c932a". You have to remove (or rename) that container to be able to reuse that name

容器退出不代表容器销毁了

docker rename d9af0c6899a9 tpu_test 把相应冲突的容器rename 或者删掉,则可以解决name冲突的问题.

新手容易搞错的概念

容器退出和容器销毁不是一个概念
docker run其实应该叫docker create,会创建一个新的container. container内exit后,这个container其实还在,只是是处于stop的状态. 包括你在container内新建的文件什么的都在!, docker ps -a可以看到所有的container,docker ps默认是只显示还在running状态的container. docker start -ai container_id可以启动一个stop的container.

每一个docker命令的具体用法可以加--help查看,比如docker ps --help

posted @ 2020-03-13 10:37  core!  阅读(355)  评论(0编辑  收藏  举报