传统的虚拟机,可以虚拟出一条硬件,运行一个完整的操作系统,在这个操作系统上安装和运行所需的软件
容器内的应用可以直接运行在宿主 主机的内核中,容器没有自己的内核,也不用虚拟硬件 (轻便)
每个容器是相互隔离的,每个容器内都有属于自己的文件系统,之间互不影响。
1. 应用于更快速的交付和部署
传统:通过大量的帮助文档,安装程序!
Docker:打包镜像发布测试,一键运行!
2. 更便捷的升级和扩缩容
通过使用Docker,部署应用 如同搭积木一样!
3. 更简单的系统运维
使用容器化之后,开发和测试环境是高度一致的
4.更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器,让服务器的性能可以压榨到极致
镜像(Image):
docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放 镜像(image)的地方!
仓库又可以分为 公有仓库和私有仓库
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 命令参数可选项
-a, --all # 显示所有镜像 (docker images -a)
-q, --quiet # 仅显示镜像id (docker images -q)
命令参数可选项 (通过搜索来过滤)
--filter=STARS=3000 # 搜索出来的镜像就是stars大于3000的
docker rmi -f 镜像id ? ? ? ? ? ? ? ? ? ?# 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id ? ?# 删除多个镜像(空格分隔)
docker rmi -f $(docker images -aq) ? ?# 删除全部的镜像
docker run [可选参数] image
# 参数说明
--name="name" ? ? ? ?容器名字:用来区分容器
-d ? ? ? ? ? ? ? ? ? ?后台方式运行:相当于nohup
-it ? ? ? ? ? ? ? ? ? ?使用交互式运行:进入容器查看内容
-p ? ? ? ? ? ? ? ? ? ?指定容器的端口(四种方式)小写字母p
? ? -p ip:主机端口:容器端口
? ? -p 主机端口:容器端口
? ? -p 容器端口
? ? 容器端口
-P ? ? ? ? ? ? ? ? ? ? 随机指定端口(大写字母P)
docker ps # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号
exit # 容器直接停止,并退出
ctrl+P+Q # 容器不停止,退出
docker rm 容器id ? ? ? ? ? ? ? ? ? ?# 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
docker rm -f $(docker ps -aq) ? ? ? ?# 删除全部容器
docker ps -a -q|xargs docker rm ? ? ? ?# 删除所有容器
docker start 容器id ? ? ? ?# 启动容器
docker restart 容器id ? ?# 重启容器
docker stop 容器id ? ? ? ?# 停止当前正在运行的容器
docker kill 容器id ? ? ? ?# 强制停止当前容器
# 命令docker run -d 镜像名
[root@JWei_0124 //]# docker run -d centos
5b06d0d14b3312e589a411dd9ae15589dc9321f771e5615b7ae26e85017de080
# 问题:docker ps发现centos停止了
# 常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止。
# 比如:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
docker logs -tf --tail 容器id
docker top 容器id
命令docker inspect 容器id
docker exec -it 容器id /bin/bash
docker attach 容器id
# docker exec ? ? ? ?# 进入容器后开启一个新的终端,可以再里面操作(常用)
# docker attach ? ? ? ?# 进入容器正在执行的终端,不会启动新的进程。