一、基础介绍
1.镜像(Image) 一个特殊的文件系统,包含所需的程序、库、资源、配置; 不包含任何动态数据,其内容在构建之后也不会被改变; 分层存储: 镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变。
2.容器(Container) 容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等; 实质是进程,运行于属于自己的独立的命名空间; 容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层; 容器消亡时,容器存储层也随之消亡; 最佳实践:不应该向其存储层内写入任何数据,应该使用数据卷(Volume)或者或者绑定宿主目录。
3.仓库( Repository ) 一个 Docker Registry 中可以包含多个仓库(Repository); 每个仓库可以包含多个标签(Tag); 每个标签对应一个镜像。
二、基本操作
1.查看image:docker image ls
2.运行image:docker run -it 名字(则进入容器)
例子:docker run --name test -it centos:7.6.1810 bash
此时从bash退出,docker进入暂停状态,可用--name设定名字方便寻找,不设定会自动随机生成,加-d为后台执行
3.退出容器:exit
4.查看运行中的容器:docker container ls -a 或者 docker ps -a
注:不加 -a 或 -all 是运行中的container而不是全部,-q输出ID
5.将做完修改的容器保存为新的镜像:docker commit 容器名 新镜像名
可在原image基础上做image或从dockerfile做,参考如下:
https://blog.csdn.net/super_lixiang/article/details/83627252
https://blog.csdn.net/u010886217/article/details/91910710
6.进入运行中的容器:docker attach 容器ID 或者 docker exec -it 容器ID或容器名字 /bin/bash
注:attach退出则暂停容器,exec退出则容器扔运行,推荐exec
docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN(标准输入) 打开,以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
可用docker start 容器名或ID 启动容器;docker stop 容器名或ID 关闭容器;kill 杀掉;restart 重启。
7.文件拷贝至容器:docker cp 本地文件路径 容器ID:目的路径
8.白皮书:https://docs.docker.com/develop/
9.文件挂载: -v 参数,绝对路径
例子:运行镜像fyq/caffe 给容器起名字seg_test 挂载本机文件到容器,本机文件路径:容器路径,容器路径要写绝对路径,也可容器文件挂载到容器 docker run --name seg_test -v /home/fyq/face_seg:/down -it fyq/caffe
注:一旦container被创建之后,无法再映射新的目录,一种解决方案是用commit命令将当前container打包成image,再从image启动
10.镜像拉取:docker pull 镜像名
注:可以使用 docker search 命令搜索存放在 Docker Hub 中的镜像
11.备份image docker save 镜像名 -o 备份名.tar
加载image docker load -i 备份名.tar
删除image docker image rm 镜像名 或者 docker rmi 镜像名 (删除容器就把image换成container,使用名字/id都可以)
删除前先停止容器,docker container stop ID
删除所有停止的容器 docker container prune
12.volume:https://www.cnblogs.com/lishanlei/p/9503596.html
13.获取docker长ID:docker inspect -f '{{.ID}}' docker_name
可以通过 长ID 使用 “docker cp 源 目的” 直接向docker 内拷贝文件
14. 查看容器IP:(1)docker inspect 容器ID,其中IPAddress为IP
(2)docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
注:可使用docker inspect 容器ID | grep IPAddress来过滤数据。
15.删除已退出的container:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
docker ps -a | grep Exit | awk '{ print $1}' | xargs sudo docker rm
docker rm $(docker ps --all -q -f status=exited)