Fivk博客 - Docker
type: channel
link: https://blog.fivk.cn/tag/Docker/
items: 【Docker 】MongoDB 副本集环境（含数据、日志及配置分离）
items: 【Docker】docker启动mysql 8.x简单方法
items: 【Docker】通过Docker整合ELK并采集Mysql日志
items: Ubuntu安装Docker
items: 【知识总结】Docker常用项目部署
items: 【Docker】docker启动MongoDB简单方法
items: 【Docker】docker启动mysql 5.x简单方法
items: CentOS安装Docker
items: 【微服务】Docker实用篇

【Docker 】MongoDB 副本集环境（含数据、日志及配置分离）
type: item
date: 2025-01-10T18:31:00+08:00
description: 在分布式系统中，MongoDB 的副本集（Replica Set）提供了数据高可用性和故障自动切换能力。本文将详细介绍如何使用 Docker 搭建一个三节点的 MongoDB 副本集，包括分离数据、日志和配置文件，确保环境的灵活性和可维护性。1. 环境准备1.1 安装 Docker确保系统已经安装了 Docker。如果未安装，可以参考 Docker 官方文档。1.2 MongoDB 镜像从 Docker Hub 拉取 MongoDB 的官方镜像。建议选择较新的版本（例如 7.0）以获得最新功能和修复。docker pull mongo:7.02. 文件结构规划为方便管理和持久化数据，建议将 MongoDB 的数据、日志、配置文件分开管理。以下是推荐的目录结构：/docker └── mongo ├── master │ ├── data # 主节点的数据目录 │ ├── conf # 主节点的配置目录 │ └── log # 主节点的日志目录 ├── slave1 │ ├── data # 从节点1的数据目录 │ ├── conf # 从节点1的配置目录 │ └── log # 从节点1的日志目录 └── slave2 ├── data # 从节点2的数据目录 ├── conf # 从节点2的配置目录 └── log # 从节点2的日志目录创建上述目录：mkdir -p /docker/mongo/{master,slave1,slave2}/{data,conf,log}创建日志文件：touch /docker/mongo/master/log/mongod.log touch /docker/mongo/slave1/log/mongod.log touch /docker/mongo/slave2/log/mongod.log将 MongoDB 目录设置权限：chmod -R 777 /docker/mongo3. 配置文件准备为每个节点编写配置文件。在 /docker/mongo/{master,slave1,slave2}/conf 目录下创建 mongod.conf 文件，示例如下：主节点 master/conf/mongod.confstorage: dbPath: /data/db systemLog: destination: file path: /data/log/mongod.log logAppend: true net: bindIp: 0.0.0.0 port: 27017 replication: replSetName: rs从节点配置相同，但 port 可保持默认值 27017。快速复制配置文件：cp /docker/mongo/master/conf/mongod.conf /docker/mongo/slave1/conf/mongod.conf cp /docker/mongo/master/conf/mongod.conf /docker/mongo/slave2/conf/mongod.conf4. 创建 Docker 网络（可以忽略）为了让容器之间可以直接通信，创建一个自定义网络。docker network create --driver bridge mynet5. 启动 MongoDB 容器分别启动主节点和两个从节点容器，挂载数据、配置和日志目录。启动主节点docker run -itd --name mongodb-master \ --network mynet \ -p 10001:27017 \ -v /docker/mongo/master/data:/data/db \ -v /docker/mongo/master/conf:/data/configdb \ -v /docker/mongo/master/log:/data/log \ mongo:7.0 --config /data/configdb/mongod.conf启动从节点1docker run -itd --name mongodb-slave1 \ --network mynet \ -p 10002:27017 \ -v /docker/mongo/slave1/data:/data/db \ -v /docker/mongo/slave1/conf:/data/configdb \ -v /docker/mongo/slave1/log:/data/log \ mongo:7.0 --config /data/configdb/mongod.conf启动从节点2docker run -itd --name mongodb-slave2 \ --network mynet \ -p 1000…

【Docker】docker启动mysql 8.x简单方法
type: item
date: 2023-12-13T15:10:00+08:00
description: 一、拉取镜像可以去https://hub.docker.com/找到当前mysql 8版本的最新版本，直接在Tags中搜索8，找到最新的版本比如我这里最新稳定版是目前已经有8.1和8.2但是都是创新版本，不算稳定，暂时来说8版本最稳定的那就是8.0的最后一个版本（2023年12月13日）每一次使用时可以去官网查看一下，从部署方面来说8版本方式不会有改变。这里我们直接使用docker拉取docker pull mysql:8.0.42你每次使用时可以去看看当前最新的，或许8.0又有修复了最新bug，或者8.x稳定版出了，多关注公告。二、检查镜像sudo docker images三、创建映射文件mkdir -p /docker/mysql/mysql-files mkdir -p /docker/mysql/conf mkdir -p /docker/mysql/logs mkdir -p /docker/mysql/data chmod -R 777 /docker/mysqlsudo docker run -p 3306:3306 --name mysql \ -v /docker/mysql/mysql-files:/var/lib/mysql-files \ -v /docker/mysql/conf:/etc/mysql/conf.d \ -v /docker/mysql/logs:/var/log/mysql \ -v /docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.42四、进入容器设置root用户不限制ip连接进入容器sudo docker exec -it mysql bash进入mysqlmysql -u root -p 123456使用user数据库use mysql;查看用户信息select host,user,plugin,authentication_string from mysql.user; 备注：host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码#设置允许任意IP访问，执行语句： update user set host = '%' where user = 'root'; #给root授予所有权限和授权选项，让它可以访问和管理所有数据库和表。%表示允许所有ip， GRANT ALL ON *.* TO 'root'@'%'; #更新用户加密方式，mysql8默认的加密方式为caching_sha2_password 与mysql5的加密方式mysql_native_password 不同 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #刷新权限 flush privileges;

【Docker】通过Docker整合ELK并采集Mysql日志
type: item
date: 2023-11-15T13:31:00+08:00
description: 一、前言我这里有一个需求，需要将日志存储到Elasticsearch，我们使用的是Logstash，接收日志，并使用kibana做可视化。我自己比较喜欢用docker，所以现在参考各种教程，使用docker进行部署。我这里因为不好收集日志，我使用mysql模拟日志来源，输出到Elasticsearch二、介绍1.ElasticsearchElasticsearch是一个开源的搜索和分析引擎，用于存储、搜索和分析大量的结构化和非结构化数据。它基于Apache Lucene引擎，提供了快速、实时的全文搜索能力，并支持复杂的查询、聚合和过滤操作。Elasticsearch具有高可用性、可扩展性和容错性，并支持水平扩展到数百台服务器。2.LogstashLogstash是一个开源的数据收集、处理和传输工具，用于从各种来源（如日志文件、数据库、消息队列）中收集数据，并将其转换为统一的格式。Logstash可以对数据进行过滤、解析和转换，然后将其发送到各种目标，如Elasticsearch、消息队列等。它支持多种输入和输出插件，可以通过配置文件进行灵活的定制。3.KibanaKibana是一个开源的数据可视化平台，用于在Elasticsearch上进行数据分析和可视化。Kibana提供了丰富的图表、仪表盘和地理信息展示功能，可以帮助用户深入挖掘数据并发现有价值的信息。用户可以通过Kibana轻松地创建自定义仪表盘、图形和报告，并与Elasticsearch进行交互，以便实时监测和分析数据。三、版本问题现在最新的版本是8.x版本，但是我担心最新版不稳定，打算寻找以前的版本，我找到7.17.7版本是Elasticsearch、Logstash、Kibana三者共有的（2023年11月14日），其他的版本有可能三者还没更新，比如我现在能在docker hub找到Elasticsearch 7.17.14，但是Kibana却最高只有7.17.7。按照官方要求，版本必须使用统一的，那我就选择了统一的7.17.7。MySQL使用5.7版本。四、搭建MySQL作为日志来源参考以下文章进行搭建[post cid="1691" cover="" size=""/]新建测试表DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', `title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '模块标题', `business_type` int(2) NULL DEFAULT 0 COMMENT '业务类型（0其它 1新增 2修改 3删除）', `method` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '方法名称', `request_method` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '请求方式', `oper_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '操作人员', `oper_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '请求URL', `oper_ip` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '主机地址', `oper_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1585197503834284034 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志记录' ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;五、搭建ELK5.1.创建docker资源挂载路径E…

Ubuntu安装Docker
type: item
date: 2023-10-11T15:42:00+08:00
description: 安装Docker在 Ubuntu 上安装 Docker 的流程相对简单，以下是详细的安装步骤：1.检查卸载老版本Dockersudo apt-get remove docker docker-engine docker.io containerd runc2. 更新现有的包首先，确保系统的包索引是最新的：sudo apt update sudo apt-get upgrade3. 安装必要的依赖sudo apt-get install ca-certificates curl gnupg lsb-release4. 添加 Docker 的官方 GPG 密钥接着，添加 Docker 官方的 GPG 密钥，用于验证 Docker 包的合法性：curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -5. 添加阿里云docker软件源sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"6. 安装 Docker 引擎使用下面的命令安装 Docker：apt-get install docker-ce docker-ce-cli containerd.iodocker-ce：Docker 社区版（Community Edition）docker-ce-cli：Docker 命令行客户端containerd.io：容器运行时，它是 Docker 的基础组件7. 启动 Docker 服务安装完成后，启动 Docker 服务并设置开机自启：sudo systemctl start docker sudo systemctl enable docker8. 验证 Docker 安装可以通过运行以下命令来检查 Docker 是否成功安装：docker --version你应该会看到类似于以下内容的输出：Docker version 20.10.17, build 100c7019. 运行 Docker 示例你可以通过运行 Docker 官方提供的 hello-world 容器来验证 Docker 是否工作正常：sudo docker run hello-world如果安装成功，Docker 会下载并运行 hello-world 镜像，并输出一条欢迎信息。10. （可选）非 root 用户使用 Docker默认情况下，Docker 需要使用 sudo 来执行。如果你希望以非 root 用户运行 Docker 命令，可以将用户添加到 Docker 组：sudo usermod -aG docker $USER添加用户后，你需要退出并重新登录，或者运行下面的命令来应用更改：newgrp docker之后，你可以直接运行 Docker 命令而无需使用 sudo。11.配置国内镜像加速编辑或创建 /etc/docker/daemon.json 文件，配置镜像源。sudo nano /etc/docker/daemon.json添加以下内容：{ "registry-mirrors": ["https://hub-mirror.c.163.com"] }ubuntu安装DockerCompose1.执行命令sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose提示：如果是普通用户，没有权限，需要切换到root用户：sudo -i可以修改url切换版本如果上面链接失效，请尝试使用下面命令curl -L https://get.daocloud.io/docker/compose/releases/download/v2.23.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose2.授权执行权限sudo chmod +x /usr/local/bin/docker-compose3.查看是否安装正确docker-compose -v4.Docker-compose命令大全# 默认使用docker-compose.yml构建镜像 $ docker-compose build $ docker-compose build --no-cache # 不带缓存的构建…

【知识总结】Docker常用项目部署
type: item
date: 2023-09-02T23:17:00+08:00
description: 使用Docker也有一段时间了，开始在AcWing听不懂，然后跟着黑马的教程学习在微服务章节时听懂了，现在也经常用docker部署mysql、redis、mongoDB和其他的项目，感觉Docker是一个很不错的工具。我吧我学习的过程笔记路线和一些软件安装的方法放在这里，分享给大家[post cid="1639" cover="" size=""/][post cid="6067" cover="" size=""/][post cid="1638" cover="" size=""/][post cid="1691" cover="" size=""/][post cid="6334" cover="" size=""/][post cid="1692" cover="" size=""/][post cid="6590" cover="" size=""/][post cid="1642" cover="" size=""/][post cid="1824" cover="" size=""/][post cid="6205" cover="" size=""/][post cid="6527" cover="" size=""/][post cid="6626" cover="" size=""/]

【Docker】docker启动MongoDB简单方法
type: item
date: 2023-02-09T02:59:00+08:00
description: 1.docker 拉取MongoDB镜像docker pull mongo:7.02.创建配置和数据挂载点cd /docker mkdir mongo cd mongo mkdir data logs conf chmod 777 data touch logs/mongod.log chmod 777 logs/mongod.log touch conf/mongod.conf chmod 766 conf/mongod.conf3.修改mongod.conf配置文件（添加如下配置）# 数据库文件存储位置 dbpath = /data/db # log文件存储位置 logpath = /data/log/mongod.log # 使用追加的方式写日志 logappend = true # 是否以守护进程方式运行 # fork = true # 全部ip可以访问 bind_ip = 0.0.0.0 # 端口号 port = 27017 # 是否启用认证 auth = true # 设置oplog的大小(MB) oplogSize=20484.执行启动mongodb容器命令docker run \ -itd \ --name mongodb \ --restart=always \ -p 27017:27017 \ -v /docker/mongo/data:/data/db \ -v /docker/mongo/conf:/data/configdb \ -v /docker/mongo/logs:/data/log/ \ mongo:7.0参数说明--restart=always Docker 服务重启容器也启动--privileged 拥有真正的root权限-f 指定配置文件5.查看启动的容器并进入容器命令1> docker ps -a 命令2> docker exec -it mongodb bash 命令3> mongo # 6.0以上版本进入命令是 mongosh 命令4> use admin6.创建管理员账号# 创建一个名为 admin，密码为 123456 的用户。 > db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]}); # 尝试使用上面创建的用户信息进行连接。 > db.auth('admin', '123456')注意：记得添加角色 readWrite, 不然会没有权限读写数据库；权限说明read允许用户读取指定数据库readWrite允许用户读写指定数据库dbAdmin允许用户在指定数据库中执行管理函数，如索引创建、删除，查看统计或访问system.profileuserAdmin允许用户向system.users集合写入，可以在指定数据库里创建、删除和管理用户clusterAdmin只在admin数据库中可用，赋予用户所有分片和复制集相关函数的管理权限readAnyDatabase只在admin数据库中可用，赋予用户所有数据库的读权限readWriteAnyDatabase只在admin数据库中可用，赋予用户所有数据库的读写权限userAdminAnyDatabase只在admin数据库中可用，赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase只在admin数据库中可用，赋予用户所有数据库的dbAdmin权限root只在admin数据库中可用。超级账号，超级权限7.创建数据并创建具有该数据库读写功能的用户7.1. 连接到 MongoDB通过终端或 MongoDB 客户端工具（如 mongo 或 mongosh）连接到 MongoDB 服务器。mongosh7.2. 创建数据库在 MongoDB 中，数据库是通过切换到一个不存在的数据库并插入数据自动创建的。例如：use myDatabase注意：此时数据库 myDatabase 尚未实际创建，直到向其中插入数据或创建集合为止。7.3. 创建用户要为新数据库创建用户，执行以下命令：db.createUser({ user: "username", // 替换为你希望的用户名 pwd: "password", // 替换为用户的密码 roles: [ { role: "readWrite", db: "myDatabase" } // 赋予该用户对 myDatabase 的读写权限 ] });示例：假设数据库名为 myDatabase，用户名为 adminUser，密码为 adminPass：use myDatabase db.createUse…

【Docker】docker启动mysql 5.x简单方法
type: item
date: 2023-02-09T00:13:00+08:00
description: 1、拉取Mysql镜像我们可以去docker hub下载Mysql镜像1.1 先搜索MySql[album type="photos"][/album]1.2 找到对应版本(office版本)点击进入[album type="photos"][/album]1.3 找到对应版本及其命令[album type="photos"][/album]docker pull mysql:5.72、在本地某个位置创建以下内容建议将以下内容放在一起，方便以后管理和查看# 以MySql为例 mkdir -p /docker/mysql/data touch /docker/mysql/mysql.conf编辑配置文件vim /docker/mysql/mysql.conf[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 datadir=/var/lib/mysql # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb43、从镜像中运行容器docker run --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/mysql.conf:/etc/mysql/.conf.d \ -d mysql:5.7解释以上命令docker run --name mysql # 运行一个容器，名字取名为mysql -p 3306:3306 # 映射本地3306端口到容器3306端口，前为本地端口 -e MYSQL_ROOT_PASSWORD=123456 # 这是说mysql启动需要的开机密码，默认的账号是root ，密码就是上面设置的：123456 -v /docker/mysql/data:/var/lib/mysql # 这是宿主机的数据存放路径（你也可以自定义）， /var/lib/mysql:这是mysql容器存放数据的地方。也是为了同步数据，防止，容器被删除以后，数据就不存在了。 -v /docker/mysql/mysql.conf:etc/mysql/conf.d # MySql容器配置文件 -d # 后台启动，使用此方式启动，则redis.conf中daemonize必须设置为no，否则会无法启动 mysql:5.7 # 选定mysql版本为5.7的镜像4、进入容器连接mysql进入容器，并链接mysqldocker exec -it mysql bash mysql -uroot -p123456

CentOS安装Docker
type: item
date: 2022-08-16T22:59:00+08:00
description: Docker 分为 CE 和 EE 两大版本。CE 即社区版（免费，支持周期 7 个月），EE 即企业版，强调安全，付费使用，支持周期 24 个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的 安装指南，这里主要介绍 Docker CE 在 CentOS上的安装。1.CentOS安装DockerDocker CE 支持 64 位版本 CentOS 7，并且要求内核版本不低于 3.10， CentOS 7 满足最低内核的要求，所以我们在CentOS 7安装Docker。1.1.卸载（可选）如果之前安装过旧版本的Docker，可以使用下面命令卸载：yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce1.2.安装docker首先需要大家虚拟机联网，安装yum工具yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken然后更新本地镜像源：# 设置docker镜像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo yum makecache fast然后输入命令：yum install -y docker-cedocker-ce为社区免费版本。稍等片刻，docker即可安装成功。1.3.启动dockerDocker应用需要用到各种端口，逐一去修改防火墙设置。非常麻烦，因此建议大家直接关闭防火墙！启动docker前，一定要关闭防火墙后！！启动docker前，一定要关闭防火墙后！！启动docker前，一定要关闭防火墙后！！# 关闭 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld通过命令启动docker：systemctl start docker # 启动docker服务 systemctl stop docker # 停止docker服务 systemctl restart docker # 重启docker服务然后输入命令，可以查看docker版本：docker -v如图：1.4.配置镜像加速docker官方镜像仓库网速较差，我们需要设置国内镜像服务：参考阿里云的镜像加速文档：https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors2.CentOS7安装DockerCompose2.1.下载Linux下需要通过命令下载：# 安装 curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose如果下载速度较慢，或者下载失败，可以使用课前资料提供的docker-compose文件：上传到/usr/local/bin/目录也可以。2.2.修改文件权限修改文件权限：# 修改权限 chmod +x /usr/local/bin/docker-compose2.3.Base自动补全命令：# 补全命令 curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose如果这里出现错误，需要修改自己的hosts文件：echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts2.4Docker-compose命令大全# 默认使用docker-compose.yml构建镜像 $ docker-co…

【微服务】Docker实用篇
type: item
date: 2022-08-16T22:57:00+08:00
description: 1.初识Docker1.1.什么是Docker微服务虽然具备各种各样的优势，但服务的拆分通用给部署带来了很大的麻烦。分布式系统中，依赖的组件非常多，不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署，环境不一定一致，会遇到各种问题1.1.1.应用部署的环境问题大型项目组件较多，运行环境也较为复杂，部署时会碰到一些问题：依赖关系复杂，容易出现兼容性问题开发、测试、生产环境有差异例如一个项目中，部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等，这些服务部署时所需要的函数库、依赖项各不相同，甚至会有冲突。给部署带来了极大的困难。1.1.2.Docker解决依赖兼容问题而Docker确巧妙的解决了这些问题，Docker是如何实现的呢？Docker为了解决依赖的兼容问题的，采用了两个手段：将应用的Libs（函数库）、Deps（依赖）、配置与应用一起打包将每个应用放到一个隔离容器去运行，避免互相干扰这样打包好的应用包中，既包含应用本身，也保护应用所需要的Libs、Deps，无需再操作系统上安装这些，自然就不存在不同应用之间的兼容问题了。虽然解决了不同应用的兼容问题，但是开发、测试等环境会存在差异，操作系统版本也会有差异，怎么解决这些问题呢？1.1.3.Docker解决操作系统环境差异要解决不同操作系统环境差异问题，必须先了解操作系统结构。以一个Ubuntu操作系统为例，结构如下：结构包括：计算机硬件：例如CPU、内存、磁盘等系统内核：所有Linux发行版的内核都是Linux，例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互，对外提供内核指令，用于操作计算机硬件。系统应用：操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装，使用更加方便。应用于计算机交互的流程如下：1）应用调用操作系统应用（函数库），实现各种功能2）系统函数库是对内核指令集的封装，会调用内核指令3）内核指令操作计算机硬件Ubuntu和CentOSpringBoot都是基于Linux内核，无非是系统应用不同，提供的函数库有差异：此时，如果将一个Ubuntu版本的MySQL应用安装到CentOS系统，MySQL在调用Ubuntu函数库时，会发现找不到或者不匹配，就会报错了：Docker如何解决不同系统环境的问题？Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包Docker运行到不同操作系统时，直接基于打包的函数库，借助于操作系统的Linux内核来运行如图：1.1.4.小结Docker如何解决大型项目依赖关系复杂，不同组件依赖的兼容性问题？Docker允许开发中将应用、依赖、函数库、配置一起打包，形成可移植镜像Docker应用运行在容器中，使用沙箱机制，相互隔离Docker如何解决开发、测试、生产环境有差异的问题？Docker镜像中包含完整运行环境，包括系统函数库，仅依赖系统的Linux内核，因此可以在任意Linux操作系统上运行Docker是一个快速交付应用、运行应用的技术，具备下列优势：可以将程序及其依赖、运行环境一起打包为一个镜像，可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器，各个应用互不干扰启动、移除都可以通过一行命令完成，方便快捷1.2.Docker和虚拟机的区别Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机，也能在一个操作系统中，运行另外一个操作系统，保护系统中的任何应用。两者有什么差异呢？虚拟机（virtual machine）是在操作系统中模拟硬件设备，然后运行另一个操作系统，比如在 Windows 系统里面运行 Ubuntu 系统，这样就可以运行任意的Ubuntu应用了。Docker仅仅是封装函数库，并没有模拟完整的操作系统，如图：对比来看：小结：Docker和虚拟机的差异：docker是一个系统进程；虚拟机是在操作系统中的操作系统docker体积小、启动速度快、性能好；虚拟机体积大、启动速度慢、性能一般1.3.Docker架构1.3.1.镜像和容器Docker中有几个重要的概念：镜像（Image）：Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起，称为镜像。容器（Container）：镜像中的应用程序运行后形成的进程就是容器，只是Docker会给容器进程做隔离，对外不可见。一切应用最终都是代码组成，都是硬盘中的一个个的字节形成的文件。只有运行时，才会加载到内存，形成进程。而镜像，就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。容器呢，就是将这些文件中编写的程序、函数加载到内存中允许，形成进程，只不过要隔离起来。因此一个镜像可以启动多…