docker学习笔记1

Posted 霜序0.2℃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker学习笔记1相关的知识,希望对你有一定的参考价值。

面试题

传统虚拟机和Docker的区别?

虚拟机

虚拟机其实就是文件,不需要就删掉,操作系统和硬件之间逻辑不变

虚拟机技术基于安装在主操作系统上的虚拟机管理软件,创建虚拟机还能虚拟出各种硬件,从操作系统

  • 资源占用多(内核,硬件,软件都模拟了)
  • 冗余步骤多(打开虚拟机步骤多)
  • 启动太慢了

Docker容器

不是模拟完整的操作系统

轻量级,启动速度快,占用体积小

容器相互之间是隔离的,每个容器有自己的文件系统,容器之间的进程不会相互影响,能区分计算资源

对比

传统虚拟机是虚拟出硬件之后在上面运行操作系统,再在该系统上运行所需应用

Docker容器内的应用进程直接运行于宿主的内核,没有自己的内核也没有进行硬件虚拟,所以轻便很多

为什么Docker比虚拟机快?

  • docker不需要虚拟机虚拟硬件,直接使用物理机的硬件资源,因此在CPU,内存利用率上docker有明显优势

  • docker利用的是宿主机的内核,不需要加载操作系统内核,进而避免费时间的操作,忽略了创建虚拟机的过程

Docker虚悬镜像是什么?

仓库名标签名都是的镜像就是虚悬镜像

无用,删掉

三件套

  • 镜像
  • 容器
  • 仓库

仓库是存放镜像的地方

容器是镜像的实例

仓库分为公开仓库和私有仓库(国内一般用阿里云)

Docker是C/S结构,Docker守护进程运行在主机上,通过Socket链接从客户端访问

https://docs.docker.com/reference/

需要安装gcc和g++

报错

登录阿里云,注册并查看镜像容器服务

获得加速器地址,分为个人和企业

作用:可以加快镜像的下载速度

操作:阿里云官网有

docker 常用命令

帮助启动类命令

启动docker

systemctl start docker

停止docker

systemctl stop docker

重启docker

systemctl restart docker

查看docker状态

systemctl status docker

开机启动

systemctl enable docker

查看docker概要

docker info

查看docker总体帮助文档

docker --help

查看docker命令帮助文档

docker 具体命令 --help

镜像命令

查看镜像

docker images

REPOSITORY:镜像仓库源

TAG:镜像标签,类似版本号

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:经i想大小

ops

  • -a列出本地所有镜像
  • -q只显示镜像ID

查找镜像

docker search 镜像名称

ops:

  • --limit 只列出N个镜像,默认25个

拉取镜像

docker pull 镜像名称

docker pull 镜像名称:TAG

不写TAG默认最新版,等价于docker pull 镜像名称:latest

查看镜像/容器/数据卷所占用的空间

docker system df

删除镜像

docker rmi 镜像ID

docker容器命令

docker执行

docker run

ops:

  • -d 后台运行容器并返回容器ID, 即启动守护式容器(后台运行)
  • -i 交互模式运行容器,通常与-t一起使用
  • -t 为容器重新分配一个伪终端,通常与-i一起使用
  • -P 随机端口映射(大写P)
  • -p 指定端口映射(小写p)

docker ps

-a列出所有正在运行的容器和历史上运行过的容器

-l显示最近创建的容器

-n显示最近n个创建的容器

-q静默模式,只显示容器编号

退出容器

两种退出方式

  • exit退出,容器停止
  • ctrl+p+q退出,容器不停止

启动已经停止运行的容器

docker start 容器ID或容器名

重启容器

docker restart 容器ID或者容器名

停止容器

docker stop 容器ID或者容器名

强制停止容器

docker kill 容器ID或容器名

删除已经停止的容器

docker rm 容器ID

如果是docker rmi那删除的是镜像,不然就是容器

没有停止的强制删除

docker rm -f 容器ID

后台运行

docker run -d 容器名

docker容器后台运行必须要有一个前台进程(一直挂起的命令),如果没有会自动退出(docker程序会认为你没事做了就kill容器)

查看容器日志

docker logs 容器ID

查看容器内运行的进程

docker top 容器ID

查看容器内部细节

docker inspect 容器ID

正在运行的容器以命令行形式进行交互

两种方式:

  • docker exec -it 容器ID hashShell

  • docker attach 容器ID

区别:

  • attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出会导致容器停止
  • exec 是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器停止

容器内拷贝文件到主机

docker cp 容器ID:容器内路径 目的主机路径

导入导出容器

  • export 导出容器的内容流作为一个tar归档文件(docker export 容器ID 文件名.tar)
  • import 从tar包中的内容创建一个新的文件系统再导入为镜像(cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号)

到时候镜像列表显示的是镜像用户名/镜像名

Docker底层原理

镜像分层

UnionFS

UnionFS(联合文件系统)是一种分层,轻量级,高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下.Union文件是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像可以制作各种具体的应用镜像

特性:一次同时加载多个文件系统,但从外面看起来,智能看到一个文件系统,联合加载会把各层文件系统叠加起来

docker加载原理

容器可以看做是一个简易版的linux环境

docker的镜像实际是由一层一层的UnionFS文件系统组成,

docker镜像最底层是引导文件系统bootfs,主要包括bootloaderkernel,bootloader主要是引导加载kernel,linux启动时会加载bootfs,当boot加载完成之后整个内核就都在内存中了,此时bootfs转交给内核,系统也会卸载bootfs,然后加载rootfs

rootfsbootfs之上,包含的就是典型的linux系统中的/dev,/proc,/bin,/etc等标准目录和文件

对于不同发行版bootfs基本一致,所以不同发行版可以公用bootfs

镜像分层的最大好处是共享资源,方便复制迁移,就是为了复用

当容器启动时,一个新的可写层被加载到镜像的顶部

这一层通常被称作"容器层",“容器层"之下的都叫"镜像层”

docker镜像层是只读的,容器层是可写的

以上是关于docker学习笔记1的主要内容,如果未能解决你的问题,请参考以下文章

docker 学习笔记

docker 学习

Docker学习笔记-简介

docker学习笔记——Dockerfile创建自定义镜像

我的Docker学习笔记:从入门到实战过程全记录

我的Docker学习笔记:从入门到实战过程全记录