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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在VMcentos7上用docker部署SELKS(IDS系统)

基本安装所需环境: 2核(至少)10 GB 可用 RAM(经测试,4GB也能运行但会卡)至少 30 GB 可用磁盘空间(实际磁盘占用情况主要取决于规则数量和网络流量)。建议使用 200GB SSD 级别。git,…

量子计算软件平台

目录 1.量子语言 2.量子软件开发工具 3.量子云计算平台 1.量子语言 量子语言是一种基于量子计算机的语言,用于描述和实现量子算法。与经典计算机语言不同,量子语言需要考虑量子力学的特殊规则和算法的量子化。其中,最常用的量子语言是量子程…

HCIP --- MGRE综合实验

一、总体规划 二、AR1配置思路及步骤 一、接口地址分配及缺省路由&#xff1a; The device is running! AR1&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sy r1 [r1]interface s4/0/0 [r1-Serial4/0/0]ip address 15.0.0.1 255.0…

React 之 airbnb - 项目实战

一、开发前言 1. 规范 2. 创建项目 node -v > 18.0.0 npm -v > 8.6.0 create-react-app star-airbnb 3. 项目基本配置 配置jsconfig.json {"compilerOptions": {"target": "es5","module": "esnext","ba…

C语言——求π的近似值

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main() {int s;double n,t,pi;t1;pi0;n1.0;s1;while (fabs(t)>1e-6){pipit; nn2; s-s; ts/n;}pipi*4;printf("pi%lf\n",pi);return 0; }这里是求小数点后6位——1e-6&#…

灰度发布专题---3、Nginx+Lua灰度发布

上一章已经讲解了配置文件灰度发布、应用版本灰度发布、API网关灰度发布实现&#xff0c;但如果用户这时候在代理层如何做灰度发布呢&#xff1f; 代理层灰度发布分析 用户无论访问应用服务还是静态页&#xff0c;都要经过Nginx代理层&#xff0c;我们可以在Nginx这里做灰度发…

哈希表——闭散列表

该哈希表实现是闭散列实现法。 闭散列表&#xff1a; 闭散列&#xff1a;也叫开放定址法&#xff0c;当发生哈希冲突时&#xff0c;如果哈希表未被装满&#xff0c;说明在哈希表中必然还有空位置&#xff0c;那么可以把key存放到冲突位置中的“下一个” 空位置中去。 那如何寻…

【傻瓜级JS-DLL-WINCC-PLC交互】3.JS-DLL进行交互

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

万宾科技可燃气体监测仪科技作用全览

燃气管网在运行过程中经常会遇到燃气管道泄漏的问题&#xff0c;燃气泄漏甚至会引起爆炸&#xff0c;从而威胁人民的生命和财产安全&#xff0c;因此对燃气管网进行定期巡检是十分必要的工作。但是传统的人工巡检已不能满足城市的需要&#xff0c;除了选择增加巡检人员之外&…

SELinux(一) 简介

首发公号&#xff1a;Rand_cs 前段时间的工作遇到了一些关于 SELinux 的问题&#xff0c;初次接触不熟悉此概念&#xff0c;导致当时配置策略时束手束脚&#xff0c;焦头烂额&#xff0c;为此去系统的学习了下 SELinux 的东西。聊 SELinux 之前&#xff0c;先来看看什么叫做访…

Mac电脑音乐标签管理 Yate 激活最新 for Mac

Yate是一款非常实用的音频编辑和标记软件&#xff0c;它提供了丰富的功能和工具来帮助用户编辑、整理和管理音频文件。无论是在音乐收藏管理、DJ和音乐制作方面&#xff0c;还是在其他需要处理大量音频文件的领域&#xff0c;Yate都是非常值得推荐的工具。 Yate for Mac功能特…

2023网络安全产业图谱

1. 前言 2023年7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。 嘶吼安全产业研究院根据当前网络安全发展规划与趋势发布《嘶吼2023网络安全产业图谱》调研&#xff0c;旨在进一步了解…

【力扣】189. 轮转数组

【力扣】189. 轮转数组 文章目录 【力扣】189. 轮转数组1. 题目介绍2. 解法2.1 方法一&#xff1a;不太正规&#xff0c;但是简单2.2 方法二&#xff1a;使用额外的数组2.3 方法三&#xff1a;环状替换2.4 方法四&#xff1a;数组翻转 3. Danger参考 1. 题目介绍 给定一个整数…

使用mock.js模拟数据

一、安装mock.js npm i mockjs 二、配置JSON文件 我们创建一个mock文件夹&#xff0c;用于存放mock相关的模拟数据和代码实现。 我们将数据全部放在xxx.json文件夹下&#xff0c;里面配置我们需要的JSON格式的数据。 注意&#xff1a;json文件中不要留有空格&#xff0c;否则…

八股文-如何理解Java中的多态

什么是多态&#xff1f; 多态是面向对象编程的一个重要概念&#xff0c;它允许一个对象以不同的形式表现。也就是说&#xff0c;在父类中定义的属性和方法&#xff0c;在子类继承后&#xff0c;可以有不同的数据类型或表现出不同的行为。这可以使得同一个属性或方法&#xff0…

带残差连接的ResNet18

目录 1 模型构建 1.1 残差单元 1.2 残差网络的整体结构 2 没有残差连接的ResNet18 2.1 模型训练 2.2 模型评价 3 带残差连接的ResNet18 3.1 模型训练 3.2 模型评价 4 与高层API实现版本的对比实验 总结 残差网络&#xff08;Residual Network&#xff0c;ResNet&#xff09;…

【TinyALSA全解析(二)】wav和pcm音频文件格式详解

wav和pcm音频文件格式详解 一、本文的目的二、wav和pcm格式文件介绍三、pcm格式文件解析四、wav文件内容解析4.1 文件内容描述4.2 实战分析 五、如何在各种音频格式之间进行转换 /******************************************************************************************…

中英双语大模型ChatGLM论文阅读笔记

论文传送门&#xff1a; [1] GLM: General Language Model Pretraining with Autoregressive Blank Infilling [2] Glm-130b: An open bilingual pre-trained model Github链接&#xff1a; THUDM/ChatGLM-6B 目录 笔记AbstractIntroductionThe design choices of GLM-130B 框架…

Python Pyvis库:可视化复杂网络结构的利器

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python Pyvis库&#xff1a;可视化复杂网络结构的利器&#xff0c;全文4000字&#xff0c;阅读大约12钟。 在数据科学和网络分析领域&#xff0c;理解和可视化复杂网络结构是…

华为设备使用python实现文件自动保存下载

实验目的&#xff1a; 公司有一台CE12800的设备&#xff0c;管理地址为172.16.1.2&#xff0c;现在需要编写自动化脚本&#xff0c;STELNET实现设备的自动保存配置文件&#xff0c;使用SFTP实现设备的文件下载。 实验拓扑&#xff1a; 实验步骤&#xff1a; 步骤1&#xff1…