docker镜像分层、仓库、容器数据卷与常用软件安装

一、镜像分层

1、镜像概念:

镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,将应用程序和配置依赖打包好行成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。

2、镜像分层:

(1) 联合文件系统 (UnionFS):

Union 文件系统,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时将不同目录挂载到同一个虚拟文件系统下。

UnionFS系统是Docker镜像的基础,镜像可以通过分层来进行集成,基于基础镜像可以制作具体的应用镜像。

① UnionFS 允许将多个文件系统层 (例如基础操作系统层、应用程序层、配置层) 以一种逻辑方式组合,用户可以看到一个单一的文件系统视图;

② 写时复制 (Copy-on-Write):当对 UnionFS 中的文件系统进行修改时,这些修改不会直接影响原始文件系统层。UnionFS 使用写时复制机制,将修改视为一次提交,写入新的层中,保持了原始层的不变性。

(2) bootfs 和 rootfs:

① 在Docker镜像的最底层是引导文件系统bootfs,包含boot加载器和内核。

② rootfs (root file system),在bootfs之上,包含的就是典型Linux系统中的 /dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、CentOS等,对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以。

● 对于不同的Linux发行版,bootfs基本是一致的,可以共用;rootfs会有差别。

(3) 镜像创建过程:

Docker支持扩展现有镜像,创建新的镜像。新镜像是从base镜像一层一层叠加生成的。镜像分层的一个最大好处就是共享资源,方便复制迁移,方便复用。

(4) 容器层:

当容器启动时,一个新的可写层将被加载到镜像的顶部,这一层通常被称为容器层,容器层之下的都叫镜像层。

只有容器层是可写的,容器层下面的所有镜像层都是只读的,所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。

3、commit 命令:

(1) 作用:commit 命令用于将容器的当前状态保存为一个新的镜像,并且可以以此为基础来创建新的容器。

(2) 语法:

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

二、docker 搭建仓库

1、公有仓库

(1) 上传镜像至公有仓库:

公有仓库地址:Docker Hub https://hub.docker.com

① 修改镜像名:

docker tag centos7.6:latest bean445/centos7.6

② 登录自己的公有仓库:

③ 上传镜像:

docker push bean445/centos7.6

查看公有仓库:

(2) 其他节点拉取镜像:

docker pull bean445/centos7.6

2、私有仓库

(1) 搭建私有仓库:

docker pull registry

(2) 私有仓库传输镜像:

① 服务器运行私有仓库:

docker run --name registry_server -d -p 5000:5000 registry

容器名:registry_server ;镜像名:registry ;端口映射:5000

● 查看容器:

② 客户机修改镜像名:

docker tag hello-world:latest 192.168.198.130:5000/hello-world

③ 修改客户机的配置文件:

vim /usr/lib/systemd/system/docker.service

● 指定私有Registry地址:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.198.130:5000

systemctl daemon-reload

systemctl restart docker

④ 客户机将本地镜像推送到私有仓库:

docker push 192.168.198.130:5000/hello-world

3、阿里云仓库:

(1) 本地镜像发布到阿里云:

① 创建镜像仓库:

选择“产品” “容器” “容器镜像服务”, 点击“管理控制台”,选择“个人实例”;

选择并创建命名空间;

选择并创建镜像仓库;

② 根据操作指南将镜像推送到阿里云:

③ 查看阿里云仓库:

(2) 从阿里云仓库拉取镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/bean666kj/beancentos:[镜像版本号]

三、容器数据卷

1、概念:

容器数据卷是 Docker 中用于持久化存储数据的机制,它允许容器与宿主机或其他容器之间共享数据,并且可以在容器之间持久化存储和共享信息。

● 语法:docker run -it --privileged=true -v /宿主机目录:/容器内目录 镜像名

2、特点:

① 数据卷可在容器之间共享和重用数据;

② 数据卷中的更改可以实时生效;

③ 数据卷的更改不会包含在镜像的更新中;

④ 数据卷的生命周期一直持续到没有容器使用它为止。

3、容器使用宿主数据卷:

① 创建数据卷并写入数据:

② 容器挂载数据卷:

● docker run --name nginx1 -d -v /webroot:/usr/share/nginx/html nginx

将主机上的 /webroot 目录挂载到容器 nginx1 中的 /usr/share/nginx/html 目录

● 挂载到多个容器上:

③ 修改数据卷,容器上的数据也会修改:

4、读写映射规则:

① 默认宿主机与容器对文件都有读写权限:

docker run -it --privileged=true -v /宿主机目录:/容器内目录:rw 镜像名

② 限制容器对文件只有读取权限 (宿主机仍然可读可写):

docker run -it --privileged=true -v /宿主机目录:/容器内目录:ro 镜像名

5、容器卷的继承:

容器2继承容器1的卷规则:

docker run -it --privileged=true --volumes-from 容器1 --name 容器2 镜像名

● 容器1挂了并不影响容器2与宿主机之间的关联 (相当于一主二从)

四、docker 常用软件安装

1、安装 tomcat:

(1) 拉取镜像:docker pull tomcat

(2) 创建容器实例:

docker run -d -p 8080:8080 --name t1 tomcat

(3) 访问首页:

① 进入容器:

docker exec -it 60464c80190f /bin/bash

② 修改tomcat首页访问文件:

rm -r webapps

mv webapps.dist webapps

查看首页:ip+端口

2、安装 mysql:

(1) mysql 挂载容器数据卷:

① 启动容器:

docker run -d -p 3306:3306 \

                --privileged=true \

                -v /app/mysql/log:/var/log/mysql \

                -v /app/mysql/data:/var/lib/mysql \

                -v /app/mysql/conf:/etc/mysql \

                -e MYSQL_ROOT_PASSWORD=123456\

                --name mysql \

                mysql:5.7

● -v /app/mysql/log:/var/log/mysql:将主机上的/app/mysql/log目录挂载到容器内的/var/log/mysql目录,用于存储 MySQL 的日志文件。

● -v /app/mysql/data:/var/lib/mysql:将主机上的/app/mysql/data目录挂载到容器内的/var/lib/mysql目录,用于存储 MySQL 的数据文件。

● -v /app/mysql/conf:/etc/mysql:将主机上的/app/mysql/conf目录挂载到容器内的/etc/mysql目录,用于存储 MySQL 的配置文件。

② 登录数据库并创建数据:

docker exec -it mysql /bin/bash

宿主机路径下已同步数据:

删除数据库容器再创建,数据依然存在。

(2) mysql 主从配置:

主服务器配置:

① 创建主服务器容器实例:

docker run -p 3307:3306 \

                --name mysql-master \

                --privileged=true \

                -v /app/mysql-master/log:/var/log/mysql \

                -v /app/mysql-master/data:/var/lib/mysql \

                -v /app/mysql-master/conf:/etc/mysql \

                -e MYSQL_ROOT_PASSWORD=123456 \

                -d mysql:5.7

② 在 /app/mysql-master/conf/ 下创建 my.cnf:

[mysqld]

## 设置server_id, 同一个局域网中需要唯一

server_id=101

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql

## 开启二进制日志功能

log-bin=mall-mysql-bin

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed

## 二进制日志过期清理时间。默认值为0,表示不自动清理

expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

重启 master 实例:docker restart mysql-master

③ 进入主服务器创建数据同步用户:

create user 'slave'@'%' identified by '123456';

grant replication slave, replication client on *.* to 'slave'@'%';

flush privileges;

从服务器配置:

① 创建从服务器容器实例:

docker run -p 3308:3306 \

                --name mysql-slave \

                --privileged=true \

                -v /app/mysql-slave/log:/var/log/mysql \

                -v /app/mysql-slave/data:/var/lib/mysql \

                -v /app/mysql-slave/conf:/etc/mysql \

                -e MYSQL_ROOT_PASSWORD=123456\

                -d mysql:5.7

② 在 /app/mysql-slave/conf/ 下创建 my.cnf:

[mysqld]

## 设置server_id, 同一个局域网内需要唯一

server_id=102

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql

## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用

log-bin=mall-mysql-slave1-bin

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed

## 二进制日志过期清理时间。默认值为0,表示不自动清理

expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断

## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致

slave_skip_errors=1062

## relay_log配置中继日志

relay_log=mall-mysql-relay-bin

## log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

## slave设置只读(具有super权限的用户除外)

read_only=1

重启 slave 实例:docker restart mysql-slave

进行主从同步:

① 主服务器中查看主从同步状态:

show master status;

② 进入从服务器:

docker exec -it mysql-slave /bin/bash

③ 从数据库配置主从复制:

change master to master_host='192.168.xxx.xxx',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=769,master_connect_retry=30;

④ 从服务器查看主从同步状态:

show slave status \G;

⑤ 从服务器开启主从同步:

start slave;

⑥ 主从同步测试:

3、安装 redis:

① 在宿主机下新建目录:

mkdir -p /app/redis

② 创建并修改配置文件:

vim /app/redis/redis.conf

# bind 127.0.0.1

protected-mode no

daemonize no

appendonly yes

③ 启动 redis 容器:

将自定义的配置文件挂载到 redis 容器,并用指定的配置文件来启动容器

docker run -d -p 6379:6379 --name redis1 --privileged=true \

                        -v /app/redis/redis.conf:/etc/redis/redis.conf \

                        -v /app/redis/data:/data \

                        redis\

                        redis-server /etc/redis/redis.conf

附:redis 配置文件:Redis configuration | Redis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于深度强化学习的城市配电网多级动态重构优化运行方法》

这个标题涉及到城市配电网(Urban Power Distribution Network)的优化运行方法,其中使用了深度强化学习(Deep Reinforcement Learning)技术,并且特别强调了多级动态重构。 解读每个关键部分: 基…

微机原理_7

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 下列属于串行通信接口标准的有() A. PCI B. IDE C. USB D. EISA Intel 8086/8088…

【Rust】所有权的认识

所有权 所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存;在另一些语言中,程序员必须亲自分配和释放内存。 Rust 则选择了第三种方式:通过所有权系统管理内…

数据结构-单链表

文章目录 单链表概念链接存储方法头指针head和终端结点链接过程单链表的优缺点:实现代码一览 单链表概念 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置),元素就是存储数据的存储…

MYSQL 8.X Linux-Generic 通用版本安装

下载对应版本MySQL :: Download MySQL Community Server (Archived Versions) 这里我选择的是Linux - Generic (glibc 2.12) (x86, 64-bit), TAR 解压到服务器 只需要里面的mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz 在目录下创建需要的文件夹 这里我改名为mysql-8.0.24…

GitLab 登录中,LDAP和 Standard 验证有什么区别

在 GitLab 中,LDAP(Lightweight Directory Access Protocol)和 Standard 验证是两种不同的身份验证方法,它们有以下区别: LDAP(Lightweight Directory Access Protocol)身份验证: L…

西南科技大学(数据结构A)期末自测练习二

一、填空题(每空1分,共10分) 1、在线性表的下列运算中,不改变数据元素之间结构关系的运算是( D ) A、插入 B、删除 C、排序 D、定位 2、顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( B ) A.110 B.108 C.100 …

C#中的async/await异步编程模型

前言 当谈到异步编程时,C#中的async/await是一个强大且方便的工具。它使得编写并发和异步操作变得更加简单和可读,同时提供良好的可维护性。本文将详细解释async/await的使用,以及如何在C#中有效地利用它来实现异步操作。 目录 前言1. async…

在线教育机构如何借助小程序技术创新

随着人工智能AI技术的发展,我们的生活学习工作方式都在经历变化。在线教育也处于这场变化的核心之中,同样借助这股东风引来了行业的一波红利期。 在正式分享在线教育行业的开始,我们先简单搞清楚什么是在线教育。 在线教育行业是指通过互联…

PCF8591多通道数据读取异常问题

问题描述 PCF8591在循环读取两个通道时,两个通道数据出现交错问题。 例如我们想实现:第一次读取通道一、第二次读取通道二、第三次读取通道一、第四次读取通道二……依次循环 但实际数据:第一次读取的值为0x80、第二次读取的值为通道一的值、…

2023.11.28-电商平台建设03 - 大数据调优手段

1.优化手段 1.1分桶表 HIVE的分桶本质上就是MR的分区操作 建表语句: create table 表名(字段 类型,.... ) clustered by(分桶字段) [sorted by (字段 [asc | desc])] into N buckets --- 定义分桶表核心语句 row format...... 分桶的作用 1) 进行数据采样工作 1.1) …

final关键字-Java

final关键字 一、使用场景1、当不希望类被继承时,可以用final修饰。2、当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final修饰。3、当不希望类的的某个属性的值被修改,可以用final修饰。4、当不希望某个局部变量被修改&#xf…

智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于花授粉算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文献7.…

好用的json处理工具He3 JSON

官网地址:https://he3app.com/zh/ json格式化 https://portal.he3app.com/home/extension/json-to-pretty 其他 https://portal.he3app.com/home/category

芯能科技-603105 三季报分析(20231123)

芯能科技-603105 基本情况 公司名称:浙江芯能光伏科技股份有限公司 A股简称:芯能科技 成立日期:2008-07-09 上市日期:2018-07-09 所属行业:电气机械和器材制造业 周期性:1 主营业务:分布式光伏解…

每日一练:简易计算器

1. 题目 设计实现一个简易的计算器,可以进行加减乘除的计算。可以考虑通过GUI和命令行输入等方式实现。 2. 设计思路 创建一个简单的用户界面,可以使用 Python 的 Tkinter模块。在界面上放置按钮,每个按钮代表一个数字、运算符或其他功能。…

家政预约服务管理系统,轻松搭建专属家政小程序

家政预约服务管理系统,轻松搭建专属家政小程序app; 家政服务app开发架构包括: 1. 后台管理端:全面管理家政服务、门店、员工、阿姨信息、订单及优惠促销等数据,并进行统计分析。 2. 门店端:助力各门店及员工…

Linux命令中的符号

目录 1 管道符 | 1.1 | grep [要检索的东西] 1.2 echo | tee 2 重定向 2.1 输出重定向覆盖 > 2.2 输出重定向添加 >> 2.3 文件输入重定向 < 2.4 多行文本输入重定向 << 2.5 常用搭配 2.5.1 终端不显示 > /dev/null 1 管道符 | 我们…

使用.NET8中的.http文件和终结点资源管理器

本文将以.NET8的模板增加的.http文件为引&#xff0c;介绍 Visual Studio 2022 中的 .http 文件编辑器&#xff0c;这是一个用于测试 ASP.NET Core 项目的强大工具。 文章目录 1. 背景2. HTTP 文件介绍2.1 简介2.2 .http 文件语法3. 在 Visual Studio 中使用3.1 终结点资源管理…

基于Spring原生框架构建原生Spring的第一个程序!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…