Docker
docker概述
发布一个项目.(jar + (redis + MySQL + jdk + …) ),带上环境一起打包.
在服务器配置一个应用环境,配置麻烦,不能够跨平台.Windows -> Linux
开发打包部署上线,一套流程做完.
docker解决以上问题.
JRE — 多个应用(端口冲突) —原来都是交叉
隔离机制: Docker核心思想.
容器化技术不是模拟一个完整的操作系统
- 传统虚拟机,虚拟出一堆硬件,运行一个完整的操作系统,然后在这个系统上安装和运行文件.
- 容器内的应用直接运行在 宿主机的内容,容器是没有自己的内核的.也没有虚拟硬件,所以轻便.
- 每个容器互相隔离,每个容器内都有属于自己的一个文件系统,互不影响.
DveOps(开发、运维)
应用更快速地交付和部署.
传统: 一堆帮助文档,安装运行.
Docker: 打包镜像发布测试,一键运行.
更便捷地升级和扩容
项目打包为一个镜像,扩展 服务器A 服务器B
更简单的系统运维
容器化后,开发和测试环境高度一致.
更高效的计算资源利用
Docker 是内核级别的 虚拟化,可以在物理的机器上运行很多容器实例,把服务器性能压榨到极致.
docker的基本组成
镜像(image):
docker就好比一个模板,可以通过这个模板来创建容器服务,Tomcat镜像 => run => Tomcat01容器 (提供服务器)
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):
docker利用容器技术,独立运行一个或者一组应用,通过容器来创建的.
启动、停止、删除,基本命令!
容器就是一个简易的Linux系统.
仓库(repository):
仓库就是存放镜像的地方.
仓库分为共有仓库和私有仓库.
容器服务器:
dockerhub
阿里云…配置镜像加速.
docker安装
环境查看
1 | 系统内核 3.10 以上 |
1 | 系统版本 |
安装
1 | 安装包 |
Hello world
1 | docker Hello world |
查看镜像
1 | 查看本地镜像 |
卸载docker
1 | 卸载依赖 |
腾讯云镜像加速
1 | 创建docker目录 |
底层原理
docker镜像流程运行分析
底层原理
docker工作分析
docker 是一个 client - server 结构的系统,docker 的守护进程运行在主机上. 通过 socket 从客户端访问.
dockerServer 接收到 dockerClient 的指令,就会执行这个命令.
docker为什么比vm快
- docker有比虚拟机更少的抽象层
- docker 利用的是宿主机的内核,vm 需要的是 Guest OS
新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统的内核,避免引导.
虚拟机加载 Guest OS
docker直接利用 宿主机 的操作系统
docker常用命令
帮助命令
1 | docker version #显示版本信息 |
帮助文档:https://docs.docker.com/engine/reference/commandline/docker/
镜像命令
docker images 查看所有本地主机镜像
1 | docker images |
docker search 搜索镜像
1 | docker search mysql |
docker pull 下载镜像
1 | 下载镜像 docker pull 镜像名[:tag] |
docker rmi 删除镜像
1 | 删除指定镜像 |
容器命令
有了镜像才可以创建容器.
1 | docker pull centos |
新建容器并启动
1 | docker run [可选参数] image |
查看当前正在运行中的容器
1 | docker ps 命令 |
退出容器
1 | exit #停止容器并退出 |
删除容器
1 | docker rm 容器id #删除指定容器,不能删除正在运行的容器 rm -f 强制删除 |
启动和停止容器
1 | docker start 容器id #启动容器 |
run是创建并启动容器(run操作的是镜像),start启动已经停止的容器(操作的是容器id)
常用的其他命令
后台启动容器
1 | 命令 docker run -d 镜像名 |
查看日志
1 | 查看日志 |
进程信息
1 |
|
进入当前正在运行容器
1 | 进入后台已经启动的容器 |
从容器内拷贝文件到主机上
1 | docker cp 容器id:容器内路径 目标主机路径 |
Docker 安装 nginx
1 | docker 拉取 nginx |
端口转发
docker安装Tomcat
1 | 官方的使用 |
docker安装 es + kibana
1 | es 暴露的端口很多 |
可视化
portainer
图形化界面管理工具
1 | docker pull portainer/portainer-ce |
Rancher(CI/CD)
docker镜像理解
镜像是什么
镜像是一种可执行、轻量级的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件.
所有应用,打包docker镜像,就可以直接跑起来.
如何得到镜像?
远程仓库下载
直接拷贝
自己制作一个镜像DockerFile
docker镜像加载原理
UnionFS(联合文件系统)
Union文件系统是一种分层、轻量级且高性能的文件系统.它支持对文件系统的修改作为一次提交来一层层叠加.同时可以将不同目录挂载到同一个虚拟文件系统下.Union文件系统是docker镜像的基础.镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像.
特性:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录.
docker镜像加载原理
docker镜像实际上是由一层一层的文件系统组成的,这种层级的文件系统UnionFS
boot file system 主要包含了bootloader 和 kernel,bootloader主要引导加载kernel.
linux刚启动时会加载 bootfs文件系统,在docker镜像的最底层是bootfs.这一层和典型的linux/Unix系统是一样的.包含boot加载器和内核.当boot加载完成之后整个内核就在内存中了,此时内存的使用权已由bootfs转交给内核.此时文件系统也会卸载bootfs.
rootfs,在bootfs之上.包含的就是典型的linux系统中的/dev,/proc,/bin,/etc等标准目录和文件.rootfs就是各种不同的操作系统发行版.比如Ubuntu、centos等等…
平时安装的centos好几G.docker才200m
对于一个精简的os.rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了.因为底层用的是host的kernel,自己只需要提供rootfs就可以了.由此可见对于不同的linux发行部,bootfs基本是一致的.rootfs会有差别,因此不同的发行版可以公用bootfs.
分层镜像
docker镜同时像采取这种分层结构.最大的好处,莫过于资源共享.比如有多个镜像都从相同的base镜像构建而来.那么宿主机只需要在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有容器服务了,而且镜像的每一层都可以被共享.
查看镜像分层的方式可以通过docker image inspect 命令!
理解:
docker镜像都是只读.当容器启动时,一个新的可写层被加载到镜像顶部.
这一层就是通常说的容器层,容器之下都叫镜像层.
commit镜像
1 | docker commit 提交容器成为一个新的副本 |
容器数据卷
数据持久化
容器之间数据共享.
Docker容器中产生的数据,同步到本地.目录挂载,将容器的目录,挂载到Linux上.
容器的持久化和同步操作,容器之间可以数据共享.
使用容器数据卷
1 | docker run -it -v 主机目录:容器内目录 |
具名挂载和匿名挂载
1 | 匿名挂载 |
DockerFile
DockerFile构建过程
每个保留关键字都必须是大写
执行 从上到下
表示 注释
每个命令都会创建一个新的镜像层,并提交.
dockerfile面向开发,发布制作镜像需要编写dockerfile文件.
docker镜像成为交付标准.
dockerfile:构建文件,定义了一切的步骤,包括源代码.
dockerimages:通过dockerfile构建生成的镜像,最终发布运行的
docker容器:容器就是镜像运行起来提供的服务器
DockerFile命令
1 | FROM # 基础镜像,一切从这里开始构建 |
构建自己的centos
1 | [root@VM-0-17-centos dockerfile]# cat mydockerfile |