镜像: 静态的只读文件,是一个只读的模板。
容器: 是从镜像创建的一个运行实例,容器是带有运行时需要的可写文件层。
镜像工作原理:
启动一个新的容器时,docker会加载镜像,在镜像之上添加一个读写层,
并将镜像中的目录复制一份到/var/lib/docker/containers/容器ID的目录下,
容器内修改已存在的文件,会将该文件从只读层复制到读写层,并覆盖只读层的文件,实现了文件系统隔离,
当删除容器后,读写层的数据将会删除,镜像不变。
镜像文件存储:
docker相关文件: /var/lib/docker/目录下。
/var/lib/docker/overlay2/容器ID/diff #每层与父层之间的文件差异。
镜像管理命令:
获取: docker pull imagename:tag
上传: docker push 仓库名称
查找: docker search imagename:tag
列出本地镜像: docker images
修改已有镜像:
docker run -itd --name test02 ubuntu:16.04 运行容器
docker attach test02 进入容器
安装相关服务。
docker commit -m "说明信息" -a "指定用户信息" 容器ID 仓库名:tag
用Dockerfile构建新镜像: docker build
删除镜像: docker rmi imagename
删除容器: docker rm containername
直接删除一个运行中的容器: docker rm -f containername
批量删除容器: docker rm -v $(docker ps -aq -f status=exited)
导出镜像: docker save -o 包名 image:tag
导出正在运行的容器: docker export -o centos7 test01
导入镜像: docker load -i 包名
导入正在运行的容器为镜像: # docker import centos7 test01:7
注意:
export,import :
导出后再导入的镜像会丢失所有的历史,无法回滚之前的层。
save,load :
保存后再加载的镜像没有丢失历史和层,可持久化镜像,可以做到层回滚。
###容器管理:
##查看容器:
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container
docker ps -q :列出最近一次运行的container ID
##运行容器:
运行容器: docker run -itd image:tag /bin/bash
-itd: i 交互, t 伪终端, d 后台运行。
##进入正在运行的容器:
#docker run -itd --name test2 test01:latest /bin/sh
#docker exec -it test2 /bin/bash
或者:
#docker attach test2
使用ctrl+p+q 快捷键退出。
或:
nsenter工具:
使用nsenter连接到容器,需要先找到容器进程的PID:
#PID=$(docker inspect --format "{{ .State.Pid }}" containerid)
#nsenter --target $PID --mount --uts --ipc --net --pid
查看docker版本: docker version
查看系统(docker)层面的信息: docker info
指定容器总是重启:
docker run -itd --name test3 --restart=always centos:7
查看状态(前台运行): docker stats
查看状态(后台运行): docker stats --no-stream
获取容器输出信息并查看容器运行日志:
docker logs containerid
终止容器: docker stop
强行终止容器: docker kill containerid
终止容器后,可以用docker start命令重启容器。
先终止,再重启容器: docker restart 命令。
查看image或container的底层信息:
docker inspect <image|container>
原文地址:http://blog.51cto.com/liyuanjie/2137403