Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样
Docker核心概念
Docker Registry
存储容器镜像的仓库,主要的镜像来源为Docker Hub与用户自搭的镜像私库
Docker Image
Docker镜像,镜像是基于文件系统的一种层式结构,有一系列指令一步一步构建出来。可以把镜像当做容器的源代码
Docker镜像的最底层是一个引导文件系统bootfs,它在一个容器启动后会被卸载,同时容器被移到内存中,第二层是rootfs,可以是一种或多种操作系统,该层的操作系统是只读状态的,在系统上的修改将会以更多的文件系统叠加的形式呈现,该技术被称为联合加载
Docker Container
Docker容器,从镜像创建的运行实例,每个容器都是相互隔离的,容器是在只读的镜像层上面加载了一个读写文件系统
Docker镜像和容器之间的关系
镜像是由多个只读文件系统叠加而成的,我们无法直接在镜像上进行修改,容器基于镜像生成,在每个容器启动的时候,将会在它所基于的镜像上新建一个可写层,对容器所有的修改将会体现在这个可写层中,而在commit时,其实只提交了一个可写层,将它变成一个不可写的新镜像
仓库、镜像、容器三者间的交互
- 需要生成容器时使用
docker pull
命令从Docker仓库拉取镜像,然后使用docker run
命令启动镜像 - 需要将容器保存成镜像的时候使用
docker commit
命令(不推荐该方式,推荐使用DockerFile)将容器保存成镜像,然后使用docker push
推送到Docker仓库 - 仓库镜像容器三者交互
Docker基础命令
docker run
新建并启动命令- -i选项:表示交互模式,始终保持输入流开放
- -d选项:守护容器,后台运行
- -t选项:表示分配一个伪终端
- --name选项:指定启动容器的名字,不指定则随机分配
- -v选项: 挂载一个系统中的volume,格式为[host-dir]:[container-dir]:[rw:ro]
- -p选项:映射docker端口与宿主机的端口,常用格式为hostPort:containerPort
docker start/stop/restart
启动、停止重启已存在容器命令- 使用容器ID标识具体容器
docker pull
从Docker registry中拉取image或repositorydocker push
将本地的image或repository推送到镜像库docker images
列出本机的镜像,默认只列出最顶层的镜像docker rmi
删除镜像docker rm
删除容器docker attach
连接至容器启动的终端- 不开启新的终端,多个用户同时使用时会阻塞
- exit将会导致容器停止
docker exec
使用新的线程开启新的终端- 不同用户使用不同终端,不会阻塞
- -d选项:运行后台进程,无交互需求
- -i选项:运行交互进程
docker inspect
查看镜像或容器的详细信息- --format参数:制定输出的模板格式,以便输出特定信息
docker ps
查看容器相关信息- 默认显示正在运行的容器信息
- -a参数:查看所有容器,包括停止的
- -l参数 只查看最新创建的容器,包括不在运行的
docker commit
将一个容器固化为一个新的镜像- 保留容器的配置及安装的特定工具
- 只能选用正在运行的容器来只做新的镜像
- 临时性辅助命令,不推荐使用
docker events
查看Docker实时系统日志docker history
查看指定镜像历史版本信息docker logs
查看容器中进程的运行日志docker top
查看容器内部进程