推广 热搜: page  小红  红书  数据  论文  考试  数据分析  关键词  哪些  搜索 

Docker入门到精通

   日期:2025-01-01     移动:https://sicmodule.kub2b.com/mobile/quote/17670.html

教程地址:https://www.bilibili.com/video/BV1og4y1q7M4?p=1,此笔记配合狂神老师讲的Docker教程使用《【狂神说Java】Docker最新超详细版教程通俗易懂>,如有错误十分抱歉

 
 

1.1 Docker简介

1.2 Docker出现原因

  • 开发-上线 两套环境难以匹配
  • 环境配置十分麻烦,费时、费力 (集群Redis、MySQL、Hadoop…
  • 不能跨平台 —— 虚拟机
  • 传统: 开发jar ,运维
  • 现在: 开发、打包、部署。一套流程完成

java——apk——发布(应用商店)——安装既可用

java——jar——打包项目,带上环境(Docker仓库:商店)——下载镜像,直接运行便可使用

1.3 Docker官方

  • Docker官网

https://www.docker.com/

  • Docker文档

https://docs.docker.com/

  • DockerHub(仓库
  • 传统虚拟机:虚拟出硬件,运行一套完整的操作系统,然后在这个系统上安装和运行软件
  • Docker
    • 容器中的应用直接运行在宿主机的内核,容器是没有自己的内核的
    • 每个容器间是相互隔离的,每个容器内都拥有一个属于自己的文件系统,互不影响

1.4 Docker优点

DevOps(开发,运维

  • 更快速的交付和部署

    • 传统:帮助文档,安装程序
    • Docker:打包镜像、发布测试、一键运行
  • 更便捷的升级和扩缩容(拼积木

  • 更简单的系统运维(开发、测试环境高度一致

  • 更高效的计算资源利用

    • Docker 是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,可以充分利用物理机性能

1.5 Docker学习路线

1.5.1Docker单体应用
  • Docker安装
  • Docker命令
    • 镜像命令
    • 容器命令
    • 操作命令
  • Docker镜像
  • 容器数据卷
  • DockerFile
  • Docker网络原理
  • IDEA整合Docker
1.5.2 Docker集群应用
  • Docker Compose
  • Docker Swarm
  • CICD Jenkins
  • K8s

2.3 Docker为什么比VM快

  • Docker比虚拟机有着更少的抽象层
  • Docker利用的是宿主机的内核,VM需要Guest OS

    • VM加载Guest OS,分钟级
    • Docker新建容器不需要重新加载一个操作系统的内核,避免引导,利用宿主机的操作系统,省略了加载过程,秒级

2.4 概念

  • 镜像(image:一个模板,通告镜像创建多个容器
  • 容器(container:独立运行一个或一组应用,一个简易的操作系统
  • 仓库(repository:存放镜像

2.5 安装

前置

  • Linux基础
  • Linux系统
  • Xshell连接工具
2.5.1 CentOS 7安装Docker
  • 查看系统环境
 
  • 删除旧版Docker
 
  • 下载需要的安装包
 
  • 设置镜像的仓库
 
  • 更新软件包索引
 
  • 安装docker
 
  • 启动Docker
 
  • 查看Docker版本号
 
  • 判断是否安装成功
 
  • 找到镜像加速器
  • 配置使用

帮助文档: https://docs.docker.com/reference/

3.1 基础命令

3.1.1 帮助命令
 
3.1.2 版本信息
 
3.1.3 系统信息
 

3.2 镜像命令

3.2.1 查看本地镜像
 
3.2.2 搜索镜像

DockerHub:https://hub.docker.com

 
3.2.3 下载镜像
 
3.2.4 删除镜像
 

3.3 容器命令

说明:有了镜像才能创建容器,需要先下载镜像

3.3.1 运行容器
 
3.3.2 启动容器
 
3.3.3 停止容器
 
3.3.4 退出容器
 
3.3.5 查看运行容器
 
3.3.6 删除容器
 
3.3.7 重启容器
 
3.3.8 杀掉容器(强制删除
 
3.3.9 暂停容器
 
3.3.9 恢复暂停容器
 

3.4 常用命令

3.4.1 后台启动
 
3.4.2 日志命令
 
3.4.3 查看容器中的进程
 
3.4.4 查看容器元数据
 
3.4.5 进入容器
 
3.4.6 数据拷贝
 
3.4.7 查看状态
 
 

4.1 Docker安装Nginx

 

5.2 Docker镜像加载原理

UnionFs(联合文件系统)

Union文件系统(UnionFS) 是一种分层、轻量级且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同录挂载到同一个虚拟文件系统下(unite severaldirectories into a single virtua filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像( 没有父镜像 ),可以制作种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot fle svstem)主要包含bootloader和kernel, bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系
,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成
之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs.
rootfs (root file system),在bootfs之上。包合的就是典型 Linux 系统中的 /dev,/proc,/bin,/etc 等标准目录和文件。rootfs就是
各种不同的操作系统发行版,比如Ubuntu,Centos等等。

对于一个精简的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只
需要提供rootfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用
bootfs.

5.3 分层理解

分层的镜像

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!

思考 : 为什么Docker镜像要采用这种分层的结构呢 ?
最大的好外,莫过于是资源共享了!比如有多个镜像都从相同的base像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
查看镜像分层的方式可以通过 docker image inspect 命令 !

 

理解

所有的 Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层
举一个简单的例子,假如基于 Ubuntu Linux 16.04 创建一个新的镜像,这就是新镜像的第一层,如果在该镜像中添加 Pvthon包就会在基础镜像层之上创建第二个镜像层,如果继续添加一个安全补丁,就会创建第三个镜像层。
该镜像当前已经包含 3 个镜像层,如下图所示( 这只是一个用于演示的很简单的例子)。

特点

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层就是我们说所的容器层,容器层之下的都叫镜像层

5.4 Commit镜像

 
 

6.1 容器数据卷

总结一句话: 容器的持久化和同步操作!容器间也是可以数据共享的!

6.2 挂载 -v

 

6.3 实战:安装MySQL

 

6.4 具名和匿名挂载

 

6.4 宿主机-容器数据共享

 

6.5 数据卷容器

多个容器之间实现数据同步

 

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止,但一旦持久化到本地,本地的数据是不会删除的

7.1 DockerFile概述

DockerFile就是用来构建docker镜像的构建文件,命令参数脚本

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个一个的命令,每个命令都是一层

构建步骤

  • 编写一个dockerfile文件
  • docker build dockerfile 构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(Dockerhub、阿里云镜像仓库

查看一下官方是怎么做的

Dockerhub

github

很多官方镜像都是基础包,很多功能都没有,因此后期需要自己补充,自己完善

官方既然可以制作镜像,我们也可以

7.2 DockerFile构建

基础知识

  • 每个保留关键字(指令)都是必须大写字母
  • 执行从上到下顺序执行
  • “#” 表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件

Docker镜像逐渐成为企业交付的标准,必须要掌握

步骤:开发、部署、运维缺一不可

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通告DockerFile构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务的

7.3 DockerFile指令

 
 
 

CMD和ENTRYPOINT 区别

 

DockerFile中很多命令十分相似,我们需要了解它们的区别,我们最好的学习就是对比然后测试它们的效果

7.4 实战测试

7.4.1 构建centos镜像
 

列出本地镜像的变更历史(可以看看别人是怎么写的)

 
7.4.2 构建tomcat镜像

步骤

  • 准备镜像文件tomcat压缩包,jdk的压缩包
  • 编写dockerfile文件
  • 构建镜像
  • 运行容器
  • 访问测试
  • 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以本地发布
 

发布项目

 

以后的开发的步骤:都需要掌握DockerFile的编写,我们之后都是使用docker镜像来运行

7.5 发布镜像

7.5.1 发布到DockerHub

地址:https://hub.docker.com/

步骤

  • 注册账号
  • 在服务器上提交自己的镜像
 
  • 登陆完毕就可以提交镜像了,docker push
 
  • 给镜像添加tag
 

提交的时候也是分层级提交的

7.5.2 发布到阿里云镜像

地址:https://cr.console.aliyun.com/cn-shanghai/instance/repositories

步骤

  • 登录
  • 找到容器镜像服务
  • 创建命名空间
  • 创建镜像仓库

小结

8.1 Docker0网络

 

三个问题

  • docker如何处理容器网络访问的
 

原理——Linux系统的桥接模式

  • 我们每次启动一个docker容器,docker就会给docker容器分配一个ip,只要按照了docker,就会有一个docker0,桥接模式,使用的技术是evth-pair【一对虚拟设备接口,一段连着协议,一段彼此相连,当作宿主机与容器、容器与容器之间交流的桥梁】

开启容器后查看宿主机ip,新加了一个网卡与容器内网卡配对

  • 宿主机与容器、容器与容器之间可以相互连接(ping 通

tomcat01和tomcat02公用一个路由器——docker0

所有容器不指定网路的情况下,都是docker0路由,docker会自动给容器分配ip

docker使用的是Linux的桥接模式,宿主机中是一个docker容器的网桥,docker0

docker中所有的网络接口都是虚拟的,虚拟的转发效率高

只要容器删除,对应网桥会被自动删除

8.2 --link

思考一个场景,我们编写了一个微服务,database url=ip:,项不重启,数据库ip换掉了,我们希望可以处理这个问题,可以
名字来进行访问容器?

 

本质探究:–link 就是我们在hosts配置中增加了一个172.18.0.3 tomcat02 312857784cd4
我们现在玩Docker 已经不建议使用 --link了!

自定义网络,不使用docker0,docker0不支持容器名访问连接

8.3 自定义网络

 

自定义网络优点

不同的集群使用不同的网络,保证集群是安全和健康的

8.3 网络连通

 

结论:假如要跨网络访问容器,就需要使用docker network connect 网络名 容器

8.4 实战:Redis集群

shell脚本



特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号