Navicat for Premium 9.0.2激活(Docker 使用教程)

Navicat for Premium 9.0.2激活(Docker 使用教程)

Docker 使用教程

Docker 的简介和安装

Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。

Docker 为什么比虚拟机快?

  1. Docker 有着比虚拟机更少的抽象层
  2. Docker 利用的是宿主机的内核,而 vm 需要 Guest OS,所以新建一个容器的时候,docker 不需要像虚拟机一样重新加载一个操作系统内核,避免引导。
特性 普通虚拟机 Docker 跨平台 通常只能在桌面级系统运行,例如 Windows/Mac 支持的系统非常多,各类 windows 和 Linux 都支持 性能 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 自动化 需要手动安装所有东西 一个命令就可以自动部署好所需环境 稳定性 稳定性不高,不同系统差异大 稳定性好,不同系统都一样部署方式
  • 打包:就是把软件所需的依赖、第三方库、软件打包到一起,变成一个安装包
  • 分发:你可以把打包好的安装包上传到一个镜像仓库,其他人可以非常方便的获取和安装
  • 部署:拿着安装包就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在

Docker 部署的优势?

  • 常规应用开发部署方式:自己在 windows 上开发、测试 ( o) 到 Linux 服务器配置运行环境部署

  • Docker 开发部署流程:自己在 windows 上开发 ( o) 打包为 Docker 镜像(可以理解为软件安装包)( o) 各种服务器上只需要一个命令部署好,确保了不同机器上跑都是一致的运行环境,例如易文档、 的私有化部署就是用 Docker,轻松应对客户的各种服务器

Docker 通常用来做什么?

  • 应用分发、部署,方便传播给他人安装,特别是开源软件和提供私有部署的应用
  • 快速安装测试 / 学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上
  • 多个版本共存,不污染系统
  • Windows 上体验各种 Linux 系统

理解两个重要概念:

  • 镜像 (image):可以理解为软件安装包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件。一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器
  • 容器 (container)):软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器,最终服务运行或者项目运行就是在容器中
  • 仓库 (repository):存放镜像的地方,分为公有仓库和私有仓库

image-20230419155407219

安装链接

  1. 桌面版:https://www.docker.com/products/docker-desktop

    1. 直接按步骤操作
    2. 设置 ( o) Docker Engine,添加镜像
    
    
    1. 修改默认镜像文件位置(为了避免 C 盘容量告急)
      1. 找到 下的 文件,复制到目标路径
      2. 删除上述原 文件夹
      3. 打开 cmd,运行:
  2. 服务器版:https://docs.docker.com/engine/install/#server

    1. 使用 连接远程服务器
    2. 查看 Linux 发行版名称和版本号:
    
    
    1. 查询安装文档,卸载旧版本,然后通过 repository 安装
    
    
    
    
    1. 运行 hello-world
    
    
    1. 查看一下下载的 hello-world 镜像
    
    
    1. 卸载 Docker Engine:如果需要卸载再卸载
    
    
  3. 阿里云镜像加速

    1. 登录阿里云网站 ( o) 产品 ( o) 容器镜像服务
    2. 获取镜像加速地址:https://6jotehk6.mirror.aliyuncs.com
    3. 配置镜像加速器
    
    

Docker 的底层原理:

  1. 是一个 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问。
  2. 接收到 的指令,就会执行这个命令

Docker 的常用命令

帮助命令

帮助文档


镜像命令

  • :查看本地主机上的所有镜像

  • :搜索镜像

  • :下载镜像

  • :删除镜像,一般通过 id 来删除
  • :批量删除

  • :查看镜像的构建过程

容器命令

说明:我们有了镜像才可以创建容器。

  1. 下载一个 centos 镜像来测试学习:

  2. 新建容器并启动


  1. :列出所有运行中容器

  1. :退出容器

  1. :删除容器

  1. 启动和停止容器的操作

常用的其他命令

  • :后台启动容器

  • :查看日志


  • :查看容器里的进程信息

  • :查看镜像的数据

  • :进入当前正在运行的容器


  • :从容器内拷贝文件到主机

cmd_logic

Docker 快速安装软件

直接安装的缺点

  • 安装麻烦,可能有各种依赖,运行报错。例如:,,,
  • 可能对 Windows 并不友好,运行有各种兼容问题,软件只支持 Linux 上跑
  • 不方便安装多版本软件,不能共存。
  • 电脑安装了一堆软件,拖慢电脑速度。
  • 不同系统和硬件,安装方式不一样

Docker 安装的优点

  • 一个命令就可以安装好,快速方便
  • 有大量的镜像,可直接使用
  • 没有系统兼容问题,Linux 专享软件也照样跑
  • 支持软件多版本共存
  • 用完就丢,不拖慢电脑速度
  • 不同系统和硬件,只要安装好 Docker 其他都一样了,一个命令搞定所有

安装 Redis

  • Docker 官方镜像仓库查找 :https://hub.docker.com/

  • 一个命令跑起来:

  • 命令参考:https://docs.docker.com/engine/reference/commandline/run/

安装 WordPress

新建 文件:


在文件存放处打开 运行:

安装 nginx

Nginx 是一款轻量级的 Web 服务器、反向代理服务器,反向代理服务器在客户端和 Web 服务器之间起到中介作用,它将客户端的请求转发到后端服务器,并将响应发送回客户端,同时隐藏了后端服务器的细节。




思考问题:我们每次改动 nginx 配置文件,都需要进入容器内部?十分麻烦,我们要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改?

答案:

安装 tomcat


发现问题:

  1. linux 命令少了
  2. 没有 webapps

这是阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除掉了,只保证最小可运行的环境。

思考问题:我们以后要部署项目,如果每次都要进入容器,是不是十分的麻烦?我们要是可以在容器外部提供一个映射路径,,我们在外部放置项目,就自动同步到内部就好了!

安装 ES + Kibana


思考:使用 Kibana 连接 es

更多相关命令

  • :查看当前运行中的容器
  • :查看镜像列表
  • :删除指定 id 的容器
  • :停止 / 启动指定 id 的容器
  • :删除指定 id 的镜像
  • :查看 volume 的列表
  • :查看网络列表

制作自己的镜像

使用教程

commit


实战测试:


把自己写好的镜像提交上去,以后我们就使用修改过的镜像即可:


如果你想要保存当前容器的状态,就可以通过 commit 来提交,获得一个镜像,就好像我们之前学习 VM 时的快照!

Dockerfile

Dockerfile 介绍

Dockerfile 就是构建 docker 镜像的构建文件!命令脚本!通过这个脚本可以生成一个镜像,镜像是一层一层的,脚本就是一个一个的命令,每个命令都是一层!

举个栗子:





注意:很多官方镜像都是基础包,很多功能都没有,我们通常会自己搭建镜像。

Dockerfile 构建过程

Dockerfile 命令:

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. 表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!
  5. 是面向开发的,我们以后要发布项目,做镜像,就需要编写 文件

Navicat for Premium 9.0.2激活(Docker 使用教程)
Navicat for Premium 9.0.2激活(Docker 使用教程)

实战测试

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

接下来我们创建一个自己的 centos:


SpringBoot 的 web 项目构建 Docker 镜像

  1. 打包应用:在终端进入项目跟目录,使用 maven 将应用程序打包成可运行的 文件:,或者直接在 IDEA 界面右边的 Maven ( o) 项目 ( o) 生命周期 ( o) clean ( o) package,构建成功之后在 target 文件里可以看到 jar 包

  1. 编写 :在项目根目录下创建 文件,该文件用于描述 Docker 镜像的构建过程:

  1. 构建镜像:在终端进入项目根目录,并在该目录下执行以下命令构建 Docker 镜像:

    1. :用于指定镜像名字为
    2. :最后的句点表示 文件所在的当前目录
  2. 运行容器:执行以下命令即可启动一个新容器并运行应用程序:

    1. :用于将容器内部的 8080 端口映射到主机的 8080 端口上,这样外部就可以通过浏览器访问该应用程序了

目录挂载

现存问题

  1. 使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新 和 ,很是麻烦
  2. 容器里面产生的数据,例如 文件,数据库备份文件,容器删除之后就丢失了

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

目录挂载可以解决以上问题:将容器内的目录,挂载到 Linux 上面,实现容器的持久化同步操作。容器间也是可以数据共享的。

几种挂载方式:

  • :直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上
  • : 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上。
  • : 适合存储临时文件,存宿主机内存中。不可多容器共享。

文档参考:https://docs.docker.com/storage/

img

挂载演示:

  • 方式用绝对路径
  • 方式,只需要一个名字

示例:

注意:挂载后,容器里的代码就会替代你本机的代码了,如果你的代码目录没有 目录,你需要在代码目录执行下 确保依赖库都已经安装,否则可能会提示 “Error: Cannot find module ‘koa’”


image-20230422154621795

好处:以后修改只需要在本地修改即可,容器内会自动同步!

实战:


在本地进行连接:Navicat Premium 16

image-20230422160536961


具名挂载和匿名挂载:

  • 匿名挂载:,不写主机地址,所有 docker 容器内的卷,没有指定目录的情况下都是在 ,匿名挂载会随机生成一个名字
  • 具名挂载:,不同于匿名挂载,具名卷需要赋予其一个有意义的名称,其存放在 中,具名挂载可以方便地找到我们的卷,大多数情况使用

  • 指定路径挂载:, 是一种将主机文件系统的目录 (绝对路径)直接挂载到容器中的方式,容器中的修改也会同时影响到主机上的文件系统,因为它们使用的是同一个文件系统。这种挂载方式的优点是,您可以轻松地将您需要的主机文件目录(例如代码或配置文件)与容器分离出来。

数据卷通信:多容器间进行数据共享


只要有一个容器还在用这个数据,这个数据就会一直存在!因为容器间共享的文件是一个双向拷贝的概念。


结论:

  1. 容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
  2. 但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

Docker 网络:多容器通信

理解 Docker0

  1. 清空所有容器和镜像

  2. 查看网卡


  1. 思考:docker 是如何处理容器的网络访问的?

  1. 启动容器后再次测试:

原理:

  1. Docker 使用的是 Linux 的桥接,宿主机中是一个 Docker 容器的网桥 docker0
  2. Docker 中的所有网络接口都是虚拟的,虚拟的转发效率高
  3. 只要安装了 Docker,就会有一个网卡 docker0,网卡使用桥接模式,使用的技术是 技术!
  4. 我们每启动一个 docker 容器,docker 就会给容器分配一个 ip
  5. 每多启动一个容器,主机 就会发现多了一对网卡

就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连。正因为有这个特性, 可以充当一个桥梁,连接各种虚拟网络设备。

  1. 容器之间是可以互相 ping 通的,因为容器公用一个路由器 docker0,所有的容器不指定网络的情况下,都是 docker0 路由的,docker 会给我们的容器分配一个默认的可用 ip

image-20230423103147499
image-202304175

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



本质探究: 就是我们在 hosts 配置中增加了一个 172.17.0.3 tomcat02 2344c 的映射,所以可以通过容器名称 ping 通。

但是现在 Docker 已经不建议使用 –link 了

docker0 问题:不支持容器名连接访问

创建虚拟网络


网络模式:

  1. bridge:桥接模式(默认),自己创建的网络也属于这个模式
  2. none:不配置网络
  3. host:和宿主机共享网络

接下来我们的容器可以放在自己创建的网络当中:


现在同一网络内的容器就可以互相 ping 通:


网络连通



结论:假设要跨网络操作别人,就需要使用 docker network connect 连通!

实战:部署 Redis 集群

参考资料:【狂神说 Java】Redis 最新超详细版教程通俗易懂

使用 shell 脚本:


image-20230423141529840

使用 docker 搭建 redis 集群完成!

Docker Swarm

Docker-Compose

如果项目依赖更多的第三方软件,我们需要管理的容器就更加多,每个都要单独配置运行,指定网络。
在这节,我们使用 docker-compose 把项目的多个服务集合到一起,一键运行。

  1. 安装 Docker Compose
    1. 如果你是安装的桌面版 Docker,不需要额外安装,已经包含了。
    2. 如果是没图形界面的服务器版 Docker,你需要单独安装 安装文档
    3. 运行 检查是否安装成功
  2. 编写脚本:要把项目依赖的多个服务集合到一起,我们需要编写一个 文件,描述依赖哪些服务。参考文档:https://docs.docker.com/compose/

  1. 跑起来:

    1. 在 文件所在目录,执行:
    2. 命令参考:https://docs.docker.com/compose/reference/up/
  2. Docker-Compose 的其他命令:

    1. 在后台运行只需要加一个 -d 参数
    2. 查看运行状态:
    3. 停止运行:
    4. 重启:
    5. 重启单个服务:
    6. 进入容器命令行:
    7. 查看容器运行 log:

发布和部署

镜像仓库介绍

镜像仓库用来存储我们 build 出来的 “安装包”,Docker 官方提供了一个 镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。

我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便传播。
当然你也可以搭建自己的私有镜像库,或者使用国内各种大厂提供的镜像托管服务,例如:阿里云、腾讯云

上传我们的镜像

发布到 Docker Hub

  1. 注册一个账号

  2. 创建一个镜像库

  3. 命令行登录账号:

  4. 新建一个 tag,名字必须跟你注册账号一样:

  5. 推上去:

  6. 部署试下:

发布到阿里云上

  1. 登录阿里云
  2. 找到容器镜像服务
  3. 创建命名空间
  4. 创建镜像仓库
  5. 浏览仓库信息

image-20230422204441268

备份和迁移数据

迁移方式介绍

容器中的数据,如果没有用挂载目录,删除容器后就会丢失数据。

  • 如果你是用 直接把宿主机的目录挂进去容器,那迁移数据很方便,直接复制目录就好了。
  • 如果你是用 方式挂载的,由于数据是由容器创建和管理的,需要用特殊的方式把数据弄出来。

备份和导入 Volume 的流程

  1. 备份:
    1. 运行一个 ubuntu 的容器,挂载需要备份的 volume 到容器,并且挂载宿主机目录到容器里的备份目录。
    2. 运行 tar 命令把数据压缩为一个文件
    3. 把备份文件复制到需要导入的机器
  2. 导入:
    1. 运行 ubuntu 容器,挂载容器的 volume,并且挂载宿主机备份文件所在目录到容器里
    2. 运行 tar 命令解压备份文件到指定目录

备份 MongoDB 数据演示

  1. 运行一个 mongodb,创建一个名叫 的 volume 指向容器的 /data 目录

  2. 运行一个 Ubuntu 的容器,挂载 容器的所有 volume,映射宿主机的 backup 目录到容器里面的 /backup 目录,然后运行 tar 命令把数据压缩打包

  3. 最后你就可以拿着这个 文件去其他地方导入了

恢复 Volume 数据演示

  • 运行一个 ubuntu 容器,挂载 mongo 容器的所有 volumes,然后读取 /backup 目录中的备份文件,解压到 /data/ 目录
  • 注意,volumes-from 指定的是容器名字,strip 1 表示解压时去掉前面 1 层目录,因为压缩时包含了绝对路径

参考资Navicat for Premium 9.0.2激活料

  1. Docker 快速入门

  2. 官方文档 | Docker Hub

  3. 狂神说 Java: Docker 最新超详细版教程通俗易懂

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

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

(0)
编程小号编程小号
上一篇 2024-07-20 17:06
下一篇 2024-07-20

相关推荐