高可用篇_A Docker容器化技术_III Docker镜像和数据卷

news/2024/7/7 19:59:35

原创作者:田超凡(程序员田宝宝)

版权所有,引用请注明原作者,严禁复制转载

Docker 镜像原理

基于docker安装tomcat服务器 是否需要配置jdk环境变量呢?

docker安装tomcat:8 --jdk8 配置环境变量

docker安装tomcat:9 --jdk9 配置环境变量

如何封装配置环境依赖的呢?

Dockerfile---文件

Tomcat 100mb

1.依赖于我们JDK 200mb

2.Linux服务器centos 200mb

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

镜像文件的组成通过 Union fs运行tomcat镜像文件

tomcat镜像文件

  1. 依赖于JDK
  2. Linux服务器

为什么运行tomcat镜像文件,不需要配置jdk环境变量。

  1. tomcat镜像文件包含jdk依赖镜像 tomcat8-----jdk8镜像文件
  2. 底层dockerfile -----描述配置jdk环境

镜像加载的原理

Linux文件系统由bootfs和rootfs两部分组成

 bootfs:包含bootloader(引导加载程序)和 kernel(内核)

 rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件

不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

Docker镜像底层实际上是有多个不同的联合文件系统组成的

最底层:bootfs,并使用宿主机的bootfs-复用

第二层:root文件系统rootfs,称为base image

Union fs

然后再往上可以叠加其他的镜像文件

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,隐藏多层的存在,我们看来只是存在一个文件系统。

所以当我们安装的tomcat镜像大小是600多MB 是因为里面还包含了jdk和centos的镜像

而centos镜像复用了宿主机的bootfs 下载的只有rootfs 所以小很多

所以tomcat>jdk(父镜像)->centos> 所以整个向外暴露就是600MB

镜像只读 当从一个镜像启动容器时, 所以docker会在镜像上面加载一个可读可写的文件系统作为容器运行。

Docker Commit

主要作用:根据当前容器制作为镜像文件

流程:

  1. 从docker hub中下载一个tomcat8镜像文件;
  2. 运行tomcat8镜像文件 在tomcatwebapps 目录中新增 tcf文件夹 index.html
  3. 将当前容器内容根据模板制作为镜像文件

docker commit提交容器副本使之成为一个新的镜像

命令:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

  1. 安装一个tomcat8

docker run -p 8081:8080   tomcat:8

  1. docker exec -it 3a06b4c779a8   bash
  2. cd webapps
  3. mkdir tcf
  4. touch index.html
  5. echo "tcf" >>index.html

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

1.根据当前容器作为模板制作为镜像文件

docker commit -m="tcf tomcat" -a="tcf"  3a06b4c779a8 tcf-tomcat:1.0

2.在以当前自己制作的镜像文件运行

docker run -p 8088:8080   tcf-tomcat:1.0

Docker数据卷

基本的概念

数据卷就是宿主机上的一个文件或目录

当容器目录和数据卷(宿主机)目录绑定,双方修改会立即同步操作

一个数据卷可以被多个容器同时挂载

数据卷作用:容器数据的持久化 外部机器和容器间接通信 容器之间数据交换

使用 -v命令。

数据卷添加的方式

容器内与宿主机实现数据的共享

数据卷--添加两种方式

  1. 直接命令形式添加  docker run -it -v 宿主机绝对路径目录:容器内目录 镜像文件名称
  2. Dockerfile方式添加

安装Nginx实现负载均衡
挂载nginx html文件
  1. 创建挂载目录

mkdir -p /data/nginx/{conf,conf.d,html,logs}

  1. 启动docker容器

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html 虚拟机目录 --挂载 容器目录 /usr/share/nginx/html

上传一个 html 放入到  /data/nginx/html

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html: linux虚拟机目录

/usr/share/nginx/html 容器中html目录

nginx .conf文件和日志文件

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html \

-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \

-v /data/nginx/logs:/var/log/nginx  nginx

\反斜杠  表示换行

/usr/share/nginx/html

/usr/share/nginx/conf

/usr/share/nginx/log

Docker实战部署软件
安装Tomcat服务器

docker run -p 8081:8080   tomcat:8

-p 8081 :8080    容器外部(linux虚拟机访问端口8081):8080(容器端口号)

docker ps  获取tomcat正在运行的容器id 进入到中

docker exec -it 1210e05f1a59 bash

docker run -p 8081:8080   tomcat:8

-p 8081:8080  8081(linux虚拟机访问的端口号):8080(容器内部中端口号)

docker run -p 8081:8080 -d   tomcat:8 后台启动 ---每次运行都会创建一个新的容器

docker run --name tcf-tomcat  -p 8081:8080 -d   tomcat:8

--name: 指定容器名称

-p:指定容器端口号

-d:指定容器后台运行

docker run --name tcf-tomcat    tomcat

docker run --name tcf-tomcat1  -p 8081:8080  tomcat

8081(容器外部或者linux虚拟机访问的端口号 宿主机)

8080 容器内部的端口号

docker run --name tcf-tomcat2022  -p 8081:8080 -d   tomcat:8

-d 后台启动

前台启动与后台启动的区别

前台启动会打印启动日志信息

后台启动不会打印启动日志信息

安装Nginx实现静态服务

Docker run 运行容器

--name nginx-test:容器名称。

-p 8080:80  端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。

-d nginx: 设置容器在在后台一直运行。

docker  ps --- 正在运行的容器

docker ps -a 显示所有的容器 包括为运行的容器

docker ps 容器id

docker run --name nginx-tcf -p 8080:80 nginx   默认前台启动

docker run --name nginx-tcf -p 8080:80 -d nginx   后台启动方式

前台与后台启动区别:

前台启动:会展示容器启动的日志信息-----

后台启动:不会展示启动日志信息

8080:80 8080 虚拟机本地端口 ---浏览器访问 80 容器内部端口

 Elk+kafka---

 systemctl stop firewalld

安装MySQL5.7

1.查询mysql版本

docker search mysql

2.下载MySQL5.7版本

docker pull mysql:5.7  (这里选择的是第一个mysql镜像, :5.7选择的5.7版本)

3.等待下载完成、创建MySQL容器

docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7

 创建容器名称为mysql3308,密码为root

  1. 启动容器

docker start mysql3308

  1. 进入到容器

docker exec -it mysql3308 bash

  1. mysql连接

mysql -uroot –p

Docker运行底层原理
  1. 首先启动docker systemctl start docker
  2. Docker是一个CS架构的系统,docker守护进程运行在主机上,让后通过socket连接

从客户端访问,守护进程从客户端接收命令管理运行在主机上的容器。

ps aux | grep 'docker'

数据卷volumes-from

容器间传递共享数据volumes-from

启动容器报错了如何解决?

先改为前台启动如果没有问题的情况下,在修改为后台启动。

本文部分素材转载自蚂蚁课堂


http://lihuaxi.xjx100.cn/news/2090402.html

相关文章

[媒体宣传]上海有哪些可以邀约的新闻媒体资源汇总

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 上海作为中国最大的城市之一,拥有丰富的新闻媒体资源。以下是一些可以邀约的新闻媒体资源汇总: 报纸媒体: 《新民晚报》:上海最具影响力…

宏集案例 | 风电滑动轴承齿轮箱内多点温度采集与处理

前言 风力发电机组中的滑动轴承齿轮箱作为关键的传动装置,承担着将风能转化为电能的重要角色。齿轮箱内多点温度的实时监测可以有效地预防设备故障和性能下降。实时监测齿轮箱内多点温度可以有效地预防设备故障和性能下降。 为了确保风力发电机组的安全稳定运行&a…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

【Docker】Minio 容器化部署配置详情

qingtcloud-oss标准软件基于Bitnami minio 构建。当前版本为2024.2.26 连接容器 使用Docker 容器网络&#xff0c;应用程序容器可以轻松访问容器内运行的 MinIO 服务器。 使用命令行 在此示例中&#xff0c;我们将创建一个MinIO 客户端容器&#xff0c;该容器将连接到与客户…

mapperXML标签总结

MyBatis 的真正强大在于它的语句映射&#xff0c;这是它的魔力所在。由于它的异常强大&#xff0c;映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比&#xff0c;省掉了将近 95% 的代码。MyBatis 致力于减少使用成本&#xff0c;让用户能更专注于…

NVIDIA相关工具

模型profile相关 nvvp&#xff0c;nvprof是cuda toolkit集成的工具&#xff0c;用于生成GPU timeline的工具。nvprof是命令行工具&#xff0c;我们的模型常常是运行在远端的服务器上&#xff0c;我们需要把输出的监测数据拷贝至本地查看&#xff0c;这个时候需要用到nvvp进行可…

算法D45 | 动态规划7 | 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 这道题目 爬楼梯之前我们做过&#xff0c;这次再用完全背包的思路来分析一遍 代码随想录 Python: 翻译成背包问题&#xff0c;即&#xff1a;在容量为n的背包里&#xff0c;装入重量为1/2的物品&#xff0c;可以重复利用物品&#x…

RabbitMQ学习笔记——声明队列和交换机的方式(Config配置方式)

1.config配置文件方式 Config配置这种方式的缺点就是队列绑定交换机时设置的routingKey&#xff0c;需要一个个的创建方法去绑定&#xff0c;如下就需要绑定两次&#xff0c;太麻烦了&#xff0c;如下&#xff1a;