最后更新:2022-07-31 09:01:35 手机定位技术交流文章
什么?我能做什么?我能去哪里?我能怎么玩?
Docker 之所以发展如此迅速,也 是因为它对此给出了一个标准化的解决方案-----系统平 滑移植,容器虚拟化技术。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,你能从根本上解决这个问题吗?该软件可以与环境一起安装 吗?也就是说,安装的时候,用同样的方式复制原始环境。开发人员使用Docker来消除在协同编码时“正常运行在机器上”的问题。

在服务器上运行应用程序环境的预配置,要安装各种软件,不管安装和配置这些东西有多困难,它还不能跨平台。如果我们在Windows上安装这些环境,Linux必须重新安装。即使它不穿过操作系统,切换到同一个操作系统的另一个服务器,移植应用也是非常麻烦的。 传统上认为,软件编码开发/测试后,结果是可编译和执行的程序或二进制代码(例如Java)。为了使这些程序顺利运行,开发团队还必须编写完整的部署文件,使Vim团队部署应用程序,开发需要明确告诉业务部署团队,使用所有配置文件+所有软件环境。不过,即便如此,部署失败仍经常发生。Docker 的出现使得 Docker 得以打破过去「程序即应用」的观念。通过图像排除操作系统的核心,运行应用程序所需的系统环境,由下而上打包,实现跨平台的应用程序之间的无缝接口。
Docker是一个基于Go语言的云开放源代码项目。多克的主要目标是“建设,Ship and Run Any App,Anywhere”,也就是说,通过管理包装、分配、部署和操作等应用程序组件的寿命周期,使用户应用程序(可以是网页应用程序或数据库应用程序等)及其操作环境“一个镜子”,处处运行”。

Linux容器技术的出现解决了这个问题, 而 Docker 就是在它的基础上发展过来的。将应 用打成镜像,通过镜子成为一个运行在多克容器上的例子,而且多克容器在任何操作系统上都是一致的,这允许跨平台、跨服务器的实现。你只需要一次配置环境,换取其他机器,可以用单个键部署,大大简化了操作。
软件容器解决了操作环境和配置问题,促进了连续的集成,并为整个印刷提供容器的虚拟化。


虚拟机(virtual machine)就是带环境安装的一 种解决方案。
传统的虚拟机技术是基于在主操作系统上安装的虚拟机管理系统(如VirtualBox和VMWare),创建虚拟机(虚拟化各种硬件),从操作系统上安装到虚拟机,从操作系统上安装和部署各种应用程序。

由于以前的虚拟机的一些缺陷,Linux开发了另一个虚拟化技术

Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
技术职级变化
DevOps新一代开发工程师

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。
docker 官网
多克中心网站
CentOS端口安装
目前, CentOS只支持发行版本的Docker内核。
Docker运行在CentOS 7(64-bit)上,需要64-bit系统和Linux内核版本3.Eight或以上。
单元命令用于打印当前系统信息(内核版本号码、硬件架构、主机名称和操作系统类型等)。

容器与镜子之间的关系类似于面向对象编程中对象与类之间的关系。
| Docker | 面向对象 |
|---|---|
| 容器 | 对象 |
| 镜像 | 类 |

Docker是一个Client-Server结构的系统,在主机上运行的Dockeremon进程,然后通过客户端访问的接口连接,デーモン进程接受客户端的命令,并管理在主机上运行的容器。 容器,是一个运行时环境,那是我们以前所说的容器。

Docker是一个C/S模型的架构,而后端是一个自由耦合的架构,有许多模块分组。
多克操作的基本过程是:

centos安装
用阿里云的

地址
用了老师的=v=


| Docker容器 | 虚拟机(VM) | |
|---|---|---|
| 操作系统 | 与宿主机共享OS | 在主机OS上运行虚拟机OS |
| 存储大小 | 小型镜子,易于储存和传输 | 大镜子(vmdk, vdi等) |
| 运行性能 | 几乎无额外性能损失 | 操作系统的额外 CPU 和 内存消耗 |
| 移植性 | 轻量、灵活、适合Linux | 重负,高耦合与虚拟化技术 |
| 硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
| 部署速度 | 快速,秒级 | 较慢,10s以上 |
docker images列出本地主机上的镜子

| 参数 | 说明 |
|---|---|
| NAME | 镜像名称 |
| DESCRIPTION | 镜像说明 |
| STARS | 点赞数量 |
| OFFICIAL | 是否是官方的 |
| AUTOMATED | 是否是自动构建的 |
备注:
下载镜像
docker images -qa查看安装镜像ID
删除单个
删除多个
删除全部

有一个镜子来创造一个容器,这是基本前提
| 参数 | 说明 |
|---|---|
| -p hostPort:containerPort | 港口映射-p 8080:80 |
| -p ip:hostPost:containerPort | 配置监听地址 -p 10.0.0.100:8080:80 |
| -p ip::containerPort | 随机分配端口 -p 10.0.0.100::80 |
| -p hostPort:containerPort:udp | 指定协议-p 8080:80:tcp |
| -p 81:80 -p 443:443 | 指定多个 |
两种退出方式
多克运行-d容器名称
问题:然后 docker ps -a 进行查看, 会发现容 器已经退出
重要的是指出:为多克容器在后端运行,必须有一个前端进程
前台交互式启动docker run -it redis:6.0.8
后台守护式启动docker run -d redis:6.0.8
docker attach 容器 ID
附带是一个直接输入容器启动命令的终端,并不会以退出退出启动新的进程,从而导致容器停止。
Exec将打开容器中的一个新的终端,并可以通过退出而启动新的进程,而不致容器停止。
建议使用dockerexec命令,因为退出容器端口不会使容器停止。
通常用-d后端启动程序,并用exec输入相应的容器实例
容器→主机
Docker cp容器ID:内容器路径目标主机路径
export 导出容器的内容留作为一个 tar 归档文件[对应 import 命令]
import 从 tar 包中的内容创建一个新的文件系统再导入为镜像[对应 export]

以我们的 pull 为例,在下载的过程中我们可以 看到 docker 的镜像好像是在一层一层的在下载

花卷QAQ

特点: 一个文件系统同时载入多个文件系统,但从外部看来只能看到一个文件系统。联合载入重叠层级文件系统,最终的文件系统将包含所有文件和目录
rootfs (root file system) ,上面的Bootfs。它包含典型的Linux系统中的标准目录和文件,例如/dev、/proc、/bin、/etc。rootfs是多种操作系统版本,例如,Ubuntu,Centos 等

对于一个简单的操作系统,rootfs可以很小,你只需要包含最基本的命令、工具和库,因为下层直接使用了主机的内核,你只需要提供rootfs。由此可见对于不同的 linux 发 行版, bootfs 基本是一致的, rootfs 会有差别, 因此不同的发行版可以公用 bootfs。
镜层的最大的优点之一是共享资源和复制和迁移方便
例如,多个镜子是由同一基镜子构造的。那么 Docker Host 只需在磁盘上保存一份 base 镜像; 同时内存中也只需加载一份 base 镜像,可以供应所有容器。每一层镜子都可以共享。

docker commit提交容器的副本,使其成为新的镜子
docker commit -m="提交描述信息" -a="作者"容器ID创建对象图像名称:[标签名称]
从Hub本地下载ubuntu镜子并成功运行
原来的默认Ubuntu镜子似乎没有Vim命令
在外部网络连接的情况下安装vim

安装后, 提交我们自己的新镜子
启动新的镜子,与旧镜子比较
多克的镜片层,通过扩展现有的镜子支持,创建 新的镜像。类似于从Base基础类继承的Java,自己 再按需扩展。新的镜子看起来像基础镜子的层层.每安装一 个软件,在现有镜子顶部添加一层

基于当前容器创建一个新的镜像,新功能增强 docker commit [OPTIONS] 容 器 ID [REPOSITORY[:TAG]]

用了老师的=v=,我服务器买的腾讯云的,腾讯云的镜像仓库要收费就不尝试了



docker pull registry







注意有个,
上述理由:docker 默认不允许 http 方式推送镜像,通 过配置选项来取消这个限制。====> 修改完后如果不 生效,建议重启 docke





--privileged=true
一句话:有点类似我们 Redis 里面的 rdb 和 aof 文件 将 docker 容器内的数据保存进宿主机的磁盘中

将运用与运行的环境打包镜像,run 后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
实时的
没有这个目录的主机将自动创建它,只要权限有限






可以挂载多个目录
容器停掉,主机修改

进入容器视图目录

数据同步了
rw = read + write

容器实例是内部限制的,只读和不写


在容器u1.txt中创建u1数据

U1创建的U1数据可以在 host.txt上查看

主机创建 host.txt

继承命令
成功继承

u1悬挂, u2创建c.txt

主机还能看到新增的

从 docker hub 上拉取 tomcat 镜像到本地




查看一下


解决
可能没有映射端口或关闭防火墙
进入容器

删除webapps
将 webapps.dist 改名为 webapps

再次访问,成功

Tomcat8需要修改, Tomcat10需要修改



检查是否占有3306码头

启动成功

进入容器







容器数据卷

停止之前的容器

依旧报错

换个名字
mysql->mysql5.7

进入新目录.cnf

同步容器体积到Mysql容器实例
重新启动mysql容器实例重新输入并查看字符编码


再次建库建表

插入中文数据,成功



删除 containermysql5.7

再次启动



数据恢复了







重启服务

数据库15的选择失败,表明主机修改将与多克容器内部的配置同步。
本文由 在线网速测试 整理编辑,转载请注明出处。