Docker

112 阅读4分钟

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 要创建的目标镜像:版本号