1. docker ps : 显示目前的容器信息
2. docker images : 显示目前的镜像信息
3. docker exec -it 容器ID bash :进入容器里面, 必须service docker start 启动服务,不然docker ps看不到容器ID
报错: docker exec -it9e3a1deed8fc bash : 报错 ]FATA[0000] Error response from daemon: Container 9e3a1deed8fc is not running,
并且docker ps看不到有运行的容器,需要docker start9e3a1deed8fc启动容器
4. ctrl+d 退出容器且关闭, docker ps 查看无
5. 挂载
docker run -it -v /root/project/facenet-master:/var/lib/docker/volumes 想w /bin/bash
比如:
docker run -it -v /root/project:/opt tensorflow/tensorflow /bin/bash
其中,/root/project : 我以后将所有的工程都放到该目录下,所以挂载一个大点的目录;
/opt: 可以在该目录下看到你挂载的文件或者目录;
tensorflow/tensorflow: 是docker pull tensorflow/tensorflow时 的镜像名字
eg: sudo nvidia-docker run -it -d --name chenyu --net=host -v `pwd`/workdir:/workdir originpnr:v4 bash(将workdir文件夹的内容挂载到originpnr:v4 容器下)
6. 删除容器
docker rm 容器ID
-f 是强行删除,
删除容器就将挂载的东西也删除了
7. docker run -it ubuntu bash
这句命令就是运行一个Ubuntu容器,只要这一句命令Docker就自动会从Docker hub上下载最新的Ubuntu镜像到本地并且运行。然而,由于Docker的服务器在大洋彼岸,下载起来确实是比较慢,后面的文字会分享如何使用国内的镜像服务器进行下载
docker run tensorflow/tensorflow apt-get install -y ping (tensorflow/tensorflow镜像里面安装ping程序)
注:在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的,或者 (提倡该方法)先进入容器,在安装ubuntu下面的方法安装软件,如果是源码安装,则需要将源码放到挂载的路径下进入安装。或者 (写dockerfile文件安装软件,目前还不会)
1)首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为learn/ping
2)docker commit 698 learn/ping
docker images 可以看到多了一个镜像,容器是镜像的实例,所以保存对容器的修改其实就是保存镜像。
10. docker pull 镜像(存放在/var/lib/docker/)
备注:
1.进入容器后,就无法使用docker命令;
2.cv file.tar 里面没有之前挂载的源文件,需要自己拷贝到里面
必要:Docker统一文件系统(the union file system)的知识。
Image Definition:镜像(Image)就是一堆只读层(read-only layer)的统一视角
1)多个只读层,它们重叠在一起
2)除了最下面一层,其它层都会有一个指针指向下一层
3)统一文件系统(union file system)技术能够将不同的层整合成一个文件系统
Container Definition:容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
因此,容器 = 镜像 + 可读层
Running Container Definition:运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。
注:文件系统隔离技术
一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)
Image Layer Definition:一个层并不仅仅包含文件系统的改变,它还能包含了其他重要信息
元数据(metadata):
1)关于这个层的额外信息(Docker获取运行和构建时的信息,还包括父层的层次信息,只读层和读写层都包含元数据)
2)一个容器的元数据好像是被分成了很多文件
3)只读层和读写层都包含元数据)
全局理解(Tying It All Together):
1.docker create <image-id>:为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。
2.docker start <container-id> :为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。
3.docker run <image-id> 等同于创建了一个容器,然后运行这个容器(1+2指令)
4.docker ps :列出所有运行中的容器(隐藏了非运行态容器的存在)
docker ps –a:找出所有容器
5.docker images:列出了所有顶层(top-level)镜像(每一个顶层镜像下面都隐藏了多个镜像层)(只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层(top-level)镜像)
docker images –a:列出了所有的可读层(没有办法区分一个镜像和一个只读层)
6. docker stop <container-id> :停止容器中所有的进程
7. docker kill <container-id> :强行停止容器中所有的进程
8. docker rm <container-id> :移除构成容器的可读写层
docker rmi <image-id> : 移除构成镜像的一个只读层,移除最顶层(top level layer)镜像
9. docker commit <container-id>:将容器的可读写层转换为一个只读层,把一个容器转换成了不可变的镜像
10. docker build:build命令会执行Dockerfile文件中的FROM指令。
在循环中的每一步都会生成一个新的层,因此许多新的层会被创建
11. docker exec <running-container-id> :在运行中的容器执行一个新进程。
docker exec -it chenyu /bin/bash 在运行的chenyu容器中开启一个新进程
12. docker inspect <container-id> or <image-id>:提取出容器或者镜像最顶层的元数据。
13.docker save <image-id>:创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用(只能对镜像生效)
特点: 每一个层都保存了它们的元数据
14.docker export <container-id>:创建一个tar文件,并且移除了元数据和不必要的层
特点:多个层整合成了一个层
15.docker history <image-id> :输出指定镜像的历史镜像。
Ps:
sudo NV_GPU=0,1,2,3 CUDA_VISIBLE_DEVICES=0,1,2,3 nvidia-docker run -it -d --name corners --net=host -v `pwd`/workdir:/workdir originpnr:v4 bash
nvidia-docker run -it -d :新建一个容器并运行,名为corners(-d: 后台运行容器,-it: 以交互模式运行容器并分配一个伪输入终端)
`pwd`/workdir:/workdir originpnr:v4 : 环境基于workdir 文件夹,基于originpnr:v4 镜像搭建可读写层,形成容器(在容器内执行bash命令)
sudo docker exec -it corners /bin/bash -c "python train_idcard_corners_detect.py"
在corners容器中实例化一个进程(python train_idcard_corners_detect.py)