第一章 Docker 概述
- 什么时Docker
Docker 为什么出现?
开发加运维—— 开发打包部署上线,一套流程
java - jar(环境) - 镜像 - Docker 仓库 - 下载发布镜像Docker 给以上问题提出了解决方案
Docker 通过隔离机智,可以将服务器利用到极致
本质:所有的技术都是因为出现了问题,需要去解决
Docker历史
容器技术出来之前,使用的虚拟机技术
vm: linux centos 原生镜像, 需要开启多个虚拟机
dockers, 隔离 镜像(最核心的环境)
Docker 基于Go 开发的
Docker
docker hub
Docker能干嘛
- 虚拟机技术
- 资源占用多
- 冗余步骤多
- 启动很慢
= 容器化技术
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机技术
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器没有自己的内核,没有虚拟硬件,所以就轻便了
- 每个容器间时互相隔离,每个容器内都有属于自己的文件系统,互不影响
DevOps
- 应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一件运行 - 更便捷的升级和扩缩容
使用Docker,部署应用就和搭积木一样
项目大包围一个镜像,扩展服务器 - 更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的 - 更高效的计算资源利用
Docker是内核级别的虚拟化, 可以在一个物理机上运行很多容器实例
Docker 安装
Docker中的名词概念
Docker的基本组成
- image 镜像
Docker镜像 好比是一个模板,可以通过这个模板来创建容器服务
通过这个镜像可以创建多个容器。 - container 容器
Docker利用容器技术,独立运行一个或者一组应用,通过镜像创建的。 repository 仓库
安装Dokcer
环境准备
Docker 帮助文档
镜像加速
运行流程
底层原理
- Docker 是怎么工作的?
Docker是一个CLient-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。
Docker server 接收到Docker CLient的指令,就会执行进程。
- Docker 为什么比虚拟机快?
1、 Docker有着比虚拟机更少的抽象层
2、 Docker利用的是宿主机的内核,vm需要的是Guest OS
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载GUestOs 分钟级别的,而daocker是利用宿主机的操作系统,省略了这个复杂过程,秒级。
Docker 常用命令
docker --help
docker version
docker info
镜像命令
官网
docker images # 查看镜像
docker search # 搜索镜像
docker pull # 下载镜像
docker dmi # 删除镜像
容器基本命令
docker pull centos
新建容器并启动
docker run [] image
常用的其他命令
后台启动容器
docker run -d
查看docker 日志
docker logs -f -t--tail
-tf 显示日志
-0-tail 要显示日志的条数
查看容器中进程信息
docker top **** 容器id
检查镜像的元数据
docker inspect **** 容器id
进入当前正在运行的容器
docker exec -it ****(容器 id) /bin/bash
docker exec -it 容器id bashShell
docker attach 容器id
docker exec 进入容器后开启一个新的终端
docker attach 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内的路径 主机路径
命令小结
端口暴露
我们每次改动nginx配置文件都需要进入容器内部,十分麻烦,可以再容器外面提供要给映射路径,达到再容器修改文件名,容器内部就可以自动修改?
Portainer 可视化管理工具
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true protainer/portainer
镜像原理之联合文件系统
- 镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容、包括代码、运行时、库、环境变量和配置文件
所有应用,直接打包docker 镜像,就可以直接跑起来。
如何得到镜像
从远程仓库加载
拷贝
自己制作 DockerFile
docker 镜像加载原理
Union FS 联合文件系统
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同事可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统时Docker镜像的基础,镜像可以通过分层来进行集成,基于基础镜像,可以制作各种具体的应用镜像。
特点: 一次同事加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统——Union FS
bootfs(root file system)主要包含bootloader和kernel bootloader主要是引导加载 kernel Linux刚启动时,会加载bootfs文件系统。再Docker镜像的最底层时bootfs,这一层与我们典型的Linux Unix系统时一样。 包含boot加载器和内核,当boot加载完成之后,整个内核就都再内存中了,此时内存的使用权已由 bootfs转交给了内核,此时系统也会卸载bootfs。
rootfs 再bootfs之上,包含的就是典型的Linux系统中的 /dev /proc /bin /etc 等标准目录和文件。 rootfs就是各种不同的操作系统发行版, 如 ubantu centos
对于一个精简的os, rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host 的 hernel,自己只需要提供rootfs就可以. 由此可见,对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别。
镜像原理之分层理解:
镜像为什么要采用分层的结构?
最大的好处就是共享资源。
理解:
所有的镜像都起始于一个基础镜像层,当进行修改活增加新的内容是,就会再当前镜像层上,创建新的镜像层。
Docker通过存储引擎(新版本采用快照机制) 的方式来实现镜像层堆栈, 并保证多镜像对外展示为统一的额文件系统。
Linux上可用的存储引擎由 AUFS、 Overlay2、 Device Mapper、 Btrfs以及Zfs。
Docker 再Windows上仅支持windowsfilter 一种存储引擎。
- 特点:
Docker镜像都是只读的, 当容器启动时,一个新的可写层被加载到镜像层的地步,这一层就是我们通常所说的容器层,容器之下的都是镜像层。
Commit 镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标敬香茗: 【TAG】
容器数据卷
数据都在容器中,如果我们容器删除,数据据就会丢失
需求: 数据可以持久化
MySQL : MYSQL数据可以存储在本地
Docker容器之间可以有一个数据共享的技术, Docker容器中产生的容器,同步到本地
这就是卷技术, 即目录挂载,将我们容器内的目录,挂载到Linux上面
容器的持久化和同步操作。 容器间也是可以数据共享的
使用数据卷
1、使用命令挂载
docker run -it -v 主机目录:容器内目录
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。