更改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容器
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