1、docker是什么?
docker是基于GO语言实现的云开源项目 。
Docker的主要目标是“Build,Ship and Run any App,anywhere”。也就是通过对应用组件的封装、分发、部署运行等生命周期的管理。使用户的APP(可能是一个web应用或者是数据库应用)及其运行环境能够做到“一次镜像、处处运行”。
总结:docker是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
2、容器和传统虚拟机比较
docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面上实现虚拟化,与传统虚拟机相比,Docker优势体现在启动速度快,占用体积小。Docker每个容器之间互相隔离,每个容器都有自己的文件系统。
3、Docker的基本组成
- 镜像文件:是一种轻量级、可执行的独立软件包。它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例。(类似于java中new出来一个对象)
- 容器实例:一个容器运行一种服务,当我们需要的时候,我们可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
- 仓库:存放镜像的地方
4、Docker命令
- 查看docker状态:systemctl status docker
- 查看所有的镜像文件:docker images
- 删除镜像:docker rmi -f
- 下载镜像文件:docker pull redis/mysql
- 运行镜像文件: docker run redis/mysql
5、容器命令
- docker run -it ubuntu /bin/bash:启动交互式容器(进入到ubuntu内部,使用ubuntu)(前台命令行)
- docker run -d ubuntu:启动守护式容器
- docker ps:查看当前正在运行的容器
- docker ps -a:查看当前正在运行和历史运行过的容器
- docker ps -l:查看最近一次运行过的容器
- docker ps -q:查看容器id
- docker run -it --name=myu1 ubuntu bash:启动交互式容器并为容器指定名称
- 退出容器命令:
- exit 容器停止
- ctrl + p + q 容器不停止
- 启动已停止运行的容器:docker start 容器id或容器名字
- 重启容器:docker restart 容器id或容器名字
- 停止容器:docker stop 容器id或容器名字
- 强制停止容器:docker kill 容器id或容器名字
- 删除已停止运行的容器:docker rmi -f 容器id
- 一次性删除多个容器实例:docker rm ${docker -a -q}
- 查看容器日志:docker logs 容器id
- 查看容器内运行的进程:docker top 容器id
- 查看容器内部细节:docker inspect 容器id
- 退出容器实例再重新进入:docker exec -it 容器id /bin/bash
- 容器的导入导出命令:
- 导出:docker export 容器id > xxx.tar
- 导入:cat xxx.tar | docker import - atguigu/ubuntu:3.7
6、Docker镜像
1、是什么?
- 是一种轻量级、可执行的独立软件包。它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例。(类似于java中new出来一个对象)
2、分层的镜像
好处:共享资源,方便复制迁移
3、UnionFS(联合文件系统)
UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同事可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但在外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来。
4、Docker镜像加载原理:
Docker镜像的最底层是引导文件系统bootfs。bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel。Linux刚启动时会加载bootfs文件系统。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权由bootfs转交给内核,系统也会删除bootfs。
5、重点理解:
Docker镜像层都是只读的,容器层是可写的。
6、Docker镜像commit操作:
docker commit:提交容器副本使之称为一个新镜像。
docker commit -m"提交的信息"-a="作者" 容器id 要创建的目标镜像:版本号