Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

写在前面

推荐一个不错的Docker讲解视频链接:https://www.bilibili.com/video/BV1og4y1q7M4

【狂神说Java】Docker最新超详细版教程通俗易懂

概述

官网: https://docs.docker.com/

Docker Hub 网站: https://hub.docker.com/

容器较为官方的解释

一句话概括容器:容器就是将软件打包成标准化单,以用于开发、交付和部署。

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

容器较为通俗的解释

如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

在这里插入图片描述

虚拟化技术和容器化技术

虚拟化技术

首先,Docker 容器虚拟化技术为基础的软件,那么什么是虚拟化技术呢?

简单点来说,虚拟化技术可以这样定义:

虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。

Docker 基于 LXC 虚拟容器技术

Docker 技术是基于 LXC(Linux container- Linux 容器)虚拟容器技术的。

LXC,其名称来自 Linux 软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得 Linux 用户可以容易的创建和管理系统或应用容器。

LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 name space 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。

cgroup 和 namespace 介绍:

  • namespace 是 Linux 内核用来隔离内核资源的方式。 通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。

    (以上关于 namespace 介绍内容来自https://www.cnblogs.com/sparkdev/p/9365405.html ,更多关于 namespace 的呢内容可以查看这篇文章 )。

  • CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。

    (以上关于 CGroup 介绍内容来自 https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html ,更多关于 CGroup 的呢内容可以查看这篇文章 )。

cgroup 和 namespace 两者对比:

两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制。

Docker基本组成

Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期

在这里插入图片描述

Docker安装

查看系统内核和系统信息

命令:


示例:


开始安装Docker

卸载旧版本

命令:


示例:


下载依赖安装包


配置镜像仓库


示例:


更新yum软件包


下载docker


一般情况下安装

启动Docker

命令:


示例:


Docker的HelloWorld

命令:


示例:


Docker卸载


配置阿里云镜像

进入阿里云官网,搜索容器镜像服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dikPDByc-1628378213410)(Docker学习笔记.assets/image-20210803135001995.png)]

执行命令


Docker运行流程和原理

在这里插入图片描述

启动流程

在这里插入图片描述

运行原理

在这里插入图片描述

Docker整体架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5ZfnhrM-1628378213415)(Docker学习笔记.assets/image-20210803134704395.png)]

Docker常用命令

命令的帮助文档地址: https://docs.docker.com/engine/reference/commandline/docker/

管理镜像常用命令
在这里插入图片描述

创建容器
Navicat for Premium 9.0.2激活(Docker教程(超全总结))

容器限制
Navicat for Premium 9.0.2激活(Docker教程(超全总结))

基本命令

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

命令:


示例:


镜像命令

docker images 查看本地主机的所有镜像

示例:


列表参数介绍:


docker search 搜索镜像

示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CzY36m6U-1628378213417)(Docker学习笔记.assets/image-20210803143107721.png)]


docker pull 镜像名[:tag] 下载镜像

示例:


docker rmi 删除镜像


容器命令

docker run [可选参数] image 运行容器

Navicat for Premium 9.0.2激活(Docker教程(超全总结))


示例:


进入容器


exit 退出容器


docker ps列出容器


docker rm删除容器


启动和重启容器命令


其他命令

后台启动容器


查看日志


查看容器中进程信息


查看镜像的数据


进入当前正在运行的容器

方式一:



拷贝容器文件到主机

拷贝容器的文件到主机中


常用命令小结

在这里插入图片描述

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Docker图形化管理工具

Docker UI

命令:


示例:


使用:


会出现如下的界面:

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Shipyard

镜像下载


脚本安装shipyard


Portainer

命令:


示例:


使用:


常见容器部署:Nginx, Tomcat, es + kibana

Nginx

命令:


测试访问:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aqvif9AC-1628378213420)(Docker学习笔记.assets/image-20210804143438878.png)]

Tomcat

命令:


测试访问:

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

es + kibana

添加 ’-e ES_JAVA_OPTS=“-Xms128m -Xmx512m” ‘ 配置ElasticSearch的虚拟机占用的内存大小。

docker stats 查看资源占用情况


端口暴露的原理

[外链图片转存中...(img-wrWtj9Ol-1628378213423)]

可视化

  • portainer(先用这个)

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

  • Rancher(CI/CD再用)

Docker镜像讲解

镜像是什么

Docker镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、库、环境变量、配置文件、运行时环境等。
所有的应用,直接打包成Docker镜像,然后通过镜像创建出容器,然后就可以直接跑起来。

如何得到镜像:

  • 从远程仓库下载,比如docker hub、阿里云的镜像仓库等。
  • 朋友拷贝给你。
  • 自己制作一个镜像DockerFile。

通过对原有的镜像创建的容器进行一些修改(也可以不修改),然后通过Commit命令提交一个新的镜像。

UnionFS(联合文件系统)

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

  • 特性:一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理

docker镜像实际上是由一层层的文件系统组成,这种层级文件系统就是联合文件系统。

  • bootfs(boot file system)主要包含BootLoader和kernel,BootLoader主要负责引导加载kernel,Linux刚启动时会加载bootfs文件系统来引导内核的加载,Docker镜像的最底层就是bootfs。这一层与我们典型的unix系统是一样的,包含boot引导器和内核,当boot加载完成后整个内核就在内存中了,此时内存的使用权已经由bootfs转交给内核,此时系统会卸载bootfs。

  • rootfs(root file system),包含典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同Unix操作系统发行版(Ubuntu,Centos等)。因为底层直接用Host的kernel,rootfs只包含最基本的命令,工具和程序就可以了。

我们平时安装的虚拟机centos镜像好几个G,Docker安装的才200多M,因为对于一个精简的OS,rootfs可以很小,只需包含最基本的命令,工具和程序库就行了,因为底层直接使用宿主机的内核,自己只需提供rootfs(相当于操作内核的客户端)就可以,由此可见不同发行版的bootfs基本是一致的,roorfs有差别,因此不同的发行版可以公有bootfs。虚拟机是分钟级别,容器是秒级。

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

第一个图仅仅是bootfs+rootfs,然后如果要制作一个emacs环境的镜像,就在这个基础上新加一层emacs镜像,如图二。如果要在添加一个Apache环境,那就再图二基础上加一个apache镜像。如图三。图中的每一层镜像都能进行复用。

分层理解

分层的镜像

image-20210521222350269

比如:上面的redis镜像。使用docker inspect redis镜像的ID 命令查看镜像的信息,找到layer信息。

image-20210521222535031

由上图可以看到下载的redis镜像是由6个镜像一层层组成的。

19-4

这些镜像都是一个个独立可复用的镜像,如果下载其他镜像是,某一层镜像是已经存在本地的了,就不用在下载,直接复用该镜像,节省空间。比如上面下载redis镜像时,提示某个镜像已经存在。

注意
Docker镜像都是只读的,用镜像创建容器启动时,实际上是在原本的镜像上新建了一层可写层到原本镜像的顶部,这一层我们叫作容器层,容器层之下的叫作镜像层。

在这里插入图片描述

如上图,使用Tomcat镜像创建容器后,会在Tomcat镜像的基础上新建一个可写层,容器的写入是在可写层进行记录,然后使用commit命令把该容器创建一个新的镜像,实际上新的镜像是tomcat镜像+可写层镜像,以tomcat镜像为基础。通过下面介绍使用容器构建镜像,可以更好地理解。

commit镜像

命令:


实战测试


image-20210521224755933

容器数据卷

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像

数据如果都在容器中,那么我们容器一旦删除,数据就会丢失

MySQL,容器删了,删库跑路

容器之间可以有一个数据共享的技术,Docker容器中产生的数据同步到本地

这就是卷技术,目录的挂载将我们容器内的目录挂载到Linux上面

容器的持久化和同步操作,容器间也是可以做数据共享的

使用数据卷

方式一:直接使用命令来挂载 -v


在这里插入图片描述

测试文件的同步(在主机上改动,观察容器变化)

在这里插入图片描述

再来测试(测试通过)

  1. 停止容器

  2. 主机上修改文件

  3. 启动容器

  4. 容器内的数据依旧是同步的!

好处:我们以后只要在本地进行修改即可,不需要每次都进入容器内部都能实现自动同步

实战:安装MySQL

思考:MySQL的数据持久化的问题!


image-20210524213345565

假设删除了docker镜像

发现,挂载到本地的数据卷依然没有丢失,这实现了容器数据持久化功能

具名和匿名挂载


所有docker容器内的卷,没有指定目录的情况下都是在

我们通过具名挂载可以方便找到我们的一个卷,大多数情况都使用具名挂载


拓展


初识DockerFile

Dockerfile就是用来构建docker镜像的构建文件!也就是命令脚本

通过这个脚本可以生成一个镜像,镜像是一层一层的,脚本一个个的命令对应层数


部署容器

1

启动自己的容器

2

这个卷和外部一定有一个同步的目录!

3

在目录下新建一个测试用的文件

3-1

查看卷挂载的路径

4

测试一下刚才的文件是否同步到主机上了

5

成功。

这种方式我们未来使用的十分多, 因为我们通常会构建自己的镜像!

假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!

数据卷容器

多个mysql同步数据!

6


7

CTRL+p+q 退出当前的docker01,通过docker01挂载docker02

8

同理创建一个docker03,在数据卷上新建的文件也会在其它容器上同步


多个mysql实现数据共享


结论

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用为止。

但是一旦持久化到了本地,这个时候,本地的数据是不会被删除的。

DockerFile

DockerFile介绍

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

构建步骤:

  1. 构建一个dockerfile文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库)

查看一下官方是怎么做的

9

10

很多官方镜像都是基础包,我们通常会自己搭建自己的镜像。

官方既然可以制作镜像,那我们也可以自己构建。

DockerFile构建过程

基础知识:

  1. 每个保留关键字(指令)都必须是大写字母

  2. 执行顺序从上到下

  3. #表示注释

  4. 每一个指令都会创建提交一个新的镜像层,并提交!

Docker镜像原理

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Dockerfile概念及作用

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

Dockerfile 关键字

关键字作用备注FROM指定父镜像指定dockerfile基于那个image构建MAINTAINER作者信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用COPY复制文件build的时候复制文件到image中ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=valueARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udpWORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

Dockerfile 案例

Navicat for Premium 9.0.2激活(Docker教程(超全总结))

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。

步骤:开发、部署、上线运维

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

Dockerimage:通过Dockerfile构建生成的镜像,最终发布和运行的产品

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

DockerFile指令

以前的时候我们是使用别人的,现在我们尝试用dockerfile构建一个自己的镜像


11

实战测试

DockerHub中99%的镜像都是从基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建

12

创建一个自己的centos


对比之前原生的centos:增加之后的镜像默认进入了工作目录,且可以使用vim

13

我们可以列出本地进行的变更历史

14

我们平时拿到一个镜像,可以研究一下它是如何构建的了。

CMD 和 ENTRYPOINT 区别


测试CMD


测试ENTRYPOINT


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

实战:Tomcat镜像

  1. 准备镜像文件 tomcat 压缩包

15

  1. 编写dockerfile文件,官方命名,build会自动寻找这个文件,就不需要 -f 进行指定了

  1. 构建镜像

  1. 启动镜像

  1. 访问测试

访问网站

16

  1. 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

在tomcat的test文件夹下建立文件夹WEB-INF ,在其中创建web.xml


在test文件夹下创建index.jsp文件


发现:项目部署成功,可以正常访问页面

17

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

发布自己的镜像

DockerHub

  1. 地址https://hub.docker.com/ 注册自己的账号

  2. 确定这个账号可以登录

  3. 在我们的服务器上提交自己的镜像


  1. 登录完毕后就可以提交镜像了 docker push

5.提交镜像


提交的时候也是按照镜像层级来进行提交的

阿里云镜像服务

  1. 登录阿里云

  2. 找到容器镜像服务

  3. 创建命名空间

  4. 创建容器镜像

  5. 浏览阿里云

18

小结:

19

Docker 网络

理解Docker0

清空所有环境


20

三个网络


21

Docker在官网下载Tomcat镜像里面没有ip addr等命令解决


解决方案:

  1. 进入上面你利用Tomcat镜像运行的容器。

  1. 执行下面两个命令

  1. 成功

原理:

  1. 我们每启动一个docker容器,docker就会给docker容器分配一个id,我们只要安装了docker,就会有一个网卡docker0

桥接模式,使用的技术是veth-pair技术

再次测试 ip addr

20-1

  1. 再启动一个容器测试,发现又多了一对网卡

20-2


  1. 我们来测试下tomcat01和tomcat02是否可以ping通

20-3


绘制一个网络模型图

22

结论:tomcat01 和tomcat02 是共用的一个路由器,docker0。

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP

小结

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

23

docker中所有网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件)

只要容器删除,对应网桥一对就没了!

20-4

–link

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



20-5

其实这个tomcat03就是在本地配置了tomcat02的配置


本质探究:–link 就是我们在hosts配置中增加了一个172.17.0.3 tomcat02 56140c84bab0

我们现在玩Docker已经不建议使用–link了!

自定义网络!不使用Docker0!

Docker0的问题:它不支持容器名链接访问!

自定义网络

查看所有的docker网络


网络模式

bridge: 桥接模式,桥接 docker 默认,自己创建的也是用brdge模式

none: 不配置网络

host: 和宿主机共享网络

container:容器网络连通!(用的少, 局限很大)

  • 测试

我们自己的网络就创建好了

20-6-1

在自己创建的网络里面启动两个容器


我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:

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

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

网络连通

测试打通tomcat01 和 mynet

20-6



实战 部署Redis集群

20-7

20-8


docker搭建redis集群完成!

在这里插入图片描述

SpringBoot微服务打包Docker镜像

  1. 构建springboot项目

  2. 打包应用


  1. 编写Dockerfile

  2. 构建镜像

  3. 发布运行

  4. Navicat for Premium 9.0.2激活

今天的文章
Navicat for Premium 9.0.2激活(Docker教程(超全总结))分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/112053.html

(0)
编程小号编程小号
上一篇 2024-07-26 08:30
下一篇 2024-07-26

相关推荐