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.hqwc.cn/news/229567.html

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

相关文章

哈希函数:保护数据完整性的关键

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

额,收到阿里云给的赔偿了!

众所周知,就在刚过去不久的11月12号,阿里云突发了一次大规模故障,影响甚广。 以至于连咱们这里评论区小伙伴学校的洗衣机都崩了(手动doge)。 这么关键的双11节点,这么多热门业务和产品,这么大规…

应用在智能手环距离检测领域的数字红外接近检测模块

智能手环是现代人日常生活中的一种智能配件,可以帮助我们记录运动数据、监测身体健康状况等。然而,对于许多用户来说,关注的问题之一就是智能手环的有效距离和精准度。智能手环通过内置传感器收集数据并将其发送到手机或其他设备上进行处理。…

毫米波雷达DOA角度计算-----MUSIC算法

MUSIC算法如下: txNum :发射天线 2个 ,rxNum:接收天线 4 个 。 ant : 为目标点的 天线 接收数据 , 为 8*1矩阵。 A ant;d 0.5;M 1; % # 快拍数ang_ax -90:90; % 角度坐标% 接收信号方向向量for k1:…

用Python爬取电影数据并可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

离散系统的频域分析(数字信号处理实验2-1)

创建具有15 Hz和40 Hz分量频率的信号,叠加两个信号形成混合信号x,使用fft命令绘制x的频域图,标注频率为横坐标,平均能量为纵坐标。 文章目录 一.题目二.实验目的三.实验仪器四.实验原理1.MATLAB使用函数2.离散傅里叶变换(DFT)实验…

如何用CHAT写“科技探索者”视频号运营方案

问CHAT:生成一篇“科技探索者”视频号运营方案,要求内容: (1)视频号的定位、面向的人群、主要发布哪方面的内容 (2)视频号的内容设计(用什么样的方式来体现、最好有内容创意&#xf…

深入理解字符串函数和字符函数(二)

目录 strstr 的使用和模拟实现​ 简单的使用: 复杂情况下的使用 模拟实现strstr函数 用暴力求解的方式: strtok的使用 strerror 函数的使用​ 书接上文:深入理解字符串函数和字符函数(一)-CSDN博客 strstr 的使…

基于加拿大降水分析 (CaPA) 系统的北美区域确定性降水数据集

区域确定性降水分析 (RDPA) 基于加拿大降水分析 (CaPA) 系统的区域确定性降水分析 (RDPA) 的域与业务区域模式相对应,即区域确定性预报系统 (RDPS-LAM3D),但太平洋地区除外其中 RDPA 域的西边边界相对于区域模型域稍微向东移动。RDPA 分析的分辨率与运行…

VT-MRPA1-151-1X/V0/0控制2FRE16模块式模拟放大器

适用于控制带有电气位置反馈的直动式比例减压阀(DBETR- 1X 类型)或带有电气位置反馈的比例流量控制阀(2FRE... 类型);控制值输入 1 0 V(差动输入); 可分别调节“上/下”斜坡时间的斜…

深度解读:为什么要做数据合规?如何做到数据合规?

数据资源“入表”在即,企业更需筑牢数据合规防线。但企业主企业购买数据、获取数据到底是否合法合规,入表如何防范合规风险?上周三,亿信华辰邀请到北京鑫诺律师事务所高级合伙人、管委会副主任武婕将和大家分享《数据入表法律合规…

C语言——I /深入理解指针(三)

一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() { char ch w; char *pc &ch; *pc w; return 0; } 还有⼀种使⽤⽅式如下: int main() { const char* pstr "hello bit.";//这⾥是把⼀个字…