96SEO 2026-02-20 03:40 17
服务镜像语法、创建镜像、创建复杂镜像Docker微服务架构、示例NGINXPHP、私有仓库

Docker镜像采用分层设计每一层都是一个只读的文件系统层。
这些层可以被多个镜像共享从而节省存储空间并提高镜像的构建效率。
每一层都代表了对文件系统的增量修改。
当您启动一个容器时Docker会在镜像的最上层添加一个读写层。
这个读写层允许您在容器中进行修改而不会影响底层的只读层。
在容器中您可以进行各种自定义修改例如安装软件包、修改配置文件、添加或删除文件等。
这些修改都会记录在读写层中。
命令将当前容器的读写层和底层的只读层打包成一个新的镜像。
这个新镜像包含了您所做的所有修改。
命令可以将一个正在运行的容器的状态保存为一个新的镜像。
这个过程包括将容器的读写层和底层的只读层打包成一个新的镜像层。
/etc/yum.repos.d/CentOS-Base.repo
http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
sha256:8ee6a9acdcd19ed70e78d74ead608fde5a4bdb12faa147f6fd3acd257179fb76
补充打包完成新镜像后可将制作镜像的容器删除以及基于的centos镜像删除都不会影响现有的新镜像
难以管理复杂配置对于复杂的镜像例如需要设置默认的启动命令、环境变量、开放特定端口等docker
创建的镜像缺乏版本控制难以追踪和管理不同版本的镜像。
不可重复性每次使用
是一种更强大、更灵活的镜像制作方式它允许您通过编写类似脚本的文件来定义镜像的构建过程。
以下是
允许您定义镜像的构建步骤确保每次构建的结果一致。
版本控制Dockerfile
Git结合使用方便追踪和管理不同版本的镜像。
复杂配置管理Dockerfile
支持设置默认的启动命令、环境变量、开放端口等复杂配置使得镜像的构建更加灵活和可控。
依赖管理Dockerfile
可以明确指定镜像的依赖关系确保构建过程中所需的软件包和库都能正确安装。
自动化构建Dockerfile
maintaineryour-emailexample.com3ENV
https://example.com/file.tar.gz
ExecStart/lib/systemd/system/httpd.service
提前拷贝webhome.tar.gz到192.168.1.31参考/web_install/files/webhome.tar.gz
/root/o***r/web_install/files/webhome.tar.gz
73985edea99f5b80bf557dda8e8b663ef7650b24e28d56dfd957089515653117
inspect可以查看镜像或者容器的详细信息只有容器中才会有IP信息
Architecture是一种软件架构风格它将一个大型应用程序拆分为一组小型、独立的服务。
每个服务都运行在自己的进程中并通过轻量级机制如
或消息队列进行通信。
每个服务都专注于完成一个特定的业务功能并且可以独立开发、部署和扩展。
单体架构传统的单体应用将所有功能打包在一个单一的代码库中部署在一个单一的进程中。
虽然开发和部署相对简单但随着应用规模的扩大单体应用会变得越来越复杂难以维护和扩展。
微服务架构微服务架构将应用拆分为多个核心功能每个功能作为一个独立的服务运行。
每个服务都可以独立开发、部署和扩展从而解决了单体应用的复杂性问题。
高可扩展性每个服务都可独立扩展根据需求增加或减少资源出色的弹性微服务架构允许服务之间相互隔离一个服务的故障不会影响整个应用易于部署每个服务都可独立部署减少了部署的风险和复杂性易于访问每个服务都可通过标准化的接口如
API进行访问便于集成和调用更加开发微服务架构鼓励团队独立开发和维护各自的服务提高了开发效率松耦合高内聚服务之间通过明确定义的接口进行通信降低了耦合性同时每个服务内部保持高内聚
微服务的核心思想是将应用服务“拆分”成多个核心功能。
每个服务都应该是独立的、自治的并且可以独立开发、测试、部署和扩展。
服务拆分理清各个服务之间的关系确保每个服务都专注于一个特定的业务功能服务通信选择合适的通信机制如
HTTP/REST、消息队列等确保服务之间的松耦合和高内聚持续演进保持服务的持续演进使服务能够快速、低成本地被拆分和合并以快速响应业务的变化持续迭代自动化工具利用自动化工具如
是一种应用的管理模式它通过容器化技术将每个服务封装在一个独立的容器中。
每个容器承载一个服务一台计算机可以同时运行多个容器从而轻松模拟出复杂的微服务架构。
Docker
确保在开发、测试和生产环境中的一致性减少了环境差异带来的问题。
[/usr/sbin/php-fpm,--nodaemonize]
b2bd2f88c33330c192ca34ec5b373e77dcea70bddbded5010899d35bccaf8182
[/usr/sbin/php-fpm,--nodaemonize]可根据service文件查看需要自行安装php-fpm软件包查找到service启动文件
提示Nginx一般采用编译安装在容器内编译不容易排错也不便于管理根据Dockfile文件中的语法ADD可以将一个压缩包复制到容器内并自动解压释放特性可以在外部编译Nginx并把编译好的程序目录打包使用打包文件构建Nginx镜像服务
提前将所需软件包拷贝到192.168.1.31中参考o***r/nginx-1.12.2.tar.gz
/root/o***r/nginx-1.12.2.tar.gz
/root/kubernetes/docker-images/info.*
192.168.1.31:/usr/local/nginx/html/
补充因为启动Nginx使用/usr/local/nginx/sbin/nginx不需要环境变量
abfe8fcb0685ebccf3b3106813c8a019e9cc5609670a9457b3c59626762f868c
首先Docker容器启动时默认会把容器内部的第一个进程上帝进程也就是pid1的程序作为docker容器是否正在运行的依据如果docker
容器pid1进程挂了那么docker容器便会直接退出。
其次Nginx程序启动并在后台运行这时Nginx并不是pid为1的程序而是执行的bash这个bash执行了Nginx指令后就挂了Nginx运行会再开一个后台子进程并将父进程杀掉然后当Docker
run的时候把command作为容器内部启动命令如果使用Nginx那么Nginx程序将在后台运行Docker未执行自定义的CMD之前Nginx的pid是1执行到CMD之后Nginx就在后台运行bash或sh脚本的pid变成了1。
所以一旦执行完自定义CMDNginx容器也就退出了。
所以使用Docker编写Nginx镜像CMD容器启动命令时需要使用“nginx
默认容器可以访问外网但外部网络的主机不可以访问容器内的资源容器每次创建IP地址都会改变
解决这个问题的最佳方法是端口绑定容器可以与宿主机的端口进行绑定从而把宿主机变成对应的服务不用关系容器的IP地址
参数可以将容器的端口与宿主机的端口进行绑定从而使容器内的服务可以通过宿主机的网络进行访问。
以下是详细的使用方法和注意事项。
端口冲突同一宿主机的同一端口只能绑定一个容器服务。
如果尝试绑定已经使用的端口Docker
会报错。
安全性确保只暴露必要的端口避免不必要的安全风险。
网络配置在生产环境中建议使用
步骤1给docker-0001云主机绑定一个公网IP124.71.115.1
把docker-0001主机绑定Apache容器的端口并提供Apahce服务
eb809138c6c52bc03e519c3807a2f9e1341e516fd88b7d2e8ac81f2a6086875e
users:((docker-proxy,pid32100,fd4))
浏览器测试访问服务http://127.71.115.1/info.php
把docker-0001主机绑定Nginx容器的端口并提供Nginx服务
b142115293b22545071404038df5876995fe7b7cbeb2ebce1900528ae6a13468
users:((docker-proxy,pid32353,fd4))
浏览器测试访问服务http://127.71.115.1/info.html
注意浏览器测试访问服务http://127.71.115.1/info.php不能解析其中包含三个问题
数据持久化数据保存在宿主机上即使容器被删除数据仍然存在。
数据共享多个容器可以共享同一个宿主机目录实现数据同步和共享。
-v用于指定卷映射将宿主机的文件或在前容器的文件或映射到容器内的
权限问题确保宿主机上的文件或时注意数据一致性和并发访问问题。
备份与恢复定期备份宿主机上的数据以防止数据丢失。
/usr/local/nginx/conf/nginx.conf
/var/webconf/nginx.conflocation
/scripts$fastcgi_script_name;include
启用容器并映射宿主机的nginx.conf文件到容器内的nginx.conf文件
/var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf
a685e6096357597a4bfdc1bd7dca3dd7f60d21e760559966a8ce1e5ef534a636
/usr/local/nginx/conf/nginx.conf
容器通常需要利用容器的网络特性特别是通过共享网络命名空间来实现通信。
以下是实现这一目标的步骤和方法。
/host/path/to/web:/usr/share/nginx/html
/host/path/to/web:/usr/share/nginx/html
提前将所需网页文件拷贝到192.168.1.31中参考kubernetes/docker-images
/usr/local/nginx/conf/nginx.conf
/scripts$fastcgi_script_name;include
/var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf
/var/webroot/:/usr/local/nginx/html/
f3f2f92d2df2b4381e19d5703a7b78d485e1429180356e27dd8cc717a9a2b047
/var/webroot/:/usr/local/nginx/html/
155d8c8625a8bc1b611da7298b6d2a158359f54de9b0410b396e81af63cb500b
解释networkcontainer:nginx共享nginx容器的网络命名空间两个容器共用网卡是nginx容器的eth0地址所以不需要再用【-p】发布端口启动php容器后能监听到80和9000端口但监听的80端口无法控制也无法查到对应服务该80端口由nginx容器进行控制
镜像确保镜像的安全性和一致性。
版本控制方便进行镜像的版本控制和回滚。
加速部署减少从公共仓库拉取镜像的时间加速容器部署。
docker-distribution仓库配置文件/etc/docker-distribution/registry/config.yml数据存储路径/var/lib/registry/默认端口号5000
http://192.168.1.100:5000/v2/_catalog查看镜像标签
http://192.168.1.100:5000/v2/镜像名称/tags/list注意私有仓库里的镜像与
[native.cgroupdriversystemd],registry-mirrors:
[https://hub-mirror.c.163.com],insecure-registries:
192.168.1.100:5000/my-image:latest
192.168.1.100:5000/my-image:latest
192.168.1.100:5000/my-image:latest
镜像确保镜像的安全性和一致性。
合理配置私有仓库和客户端可以加速容器部署和版本控制。
http://192.168.1.100:5000/v2/_catalog
[https://hub-mirror.c.163.com],
默认下载仓库insecure-registries:[192.168.1.100:5000,
sha256:4a8d25a7efe3c962c8ec7eb2b21d6d3817319d3e738a4b8fd8d45f4dc9f8cb9a
192.168.1.100:5000/myos:${i}docker
192.168.1.100:5000/myos:${i}done
步骤5验证测试查看私有镜像仓库中的镜像名称和标签docker-0002操作
http://仓库IP:5000/v2/镜像名称/tags/list
http://192.168.1.100:5000/v2/_catalog
http://192.168.1.100:5000/v2/myos/tags/list
{name:myos,tags:[php-fpm,httpd,latest,nginx]}
[native.cgroupdriversystemd],registry-mirrors:
[https://hub-mirror.c.163.com],insecure-registries:[192.168.1.100:5000,
sha256:4a8d25a7efe3c962c8ec7eb2b21d6d3817319d3e738a4b8fd8d45f4dc9f8cb9a
sha256:23c1514167627cad7ab9bf90bab5852a2908a0a1e902bf251da125c68c71cb91
b2209bfc1188312a2e8a055ce1059f3927101c2fb8230eb49e3138d7bbac6928
常见报错Docker本地端未编写配置文件指定私有仓库地址则会有以下报错
/root/kubernetes/docker-images/centos.tar.gz
/etc/yum.repos.d/CentOS-Base.repo
http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
sha256:1ca4ec4086ba5b50d2b6e95e298f96a37e3163b086f639d2ff3d2f4ede75f572
[/usr/local/apache-tomcat-9.0.6/bin/catalina.sh,run]
a4c84ef277549a39bb19f811e219e950d587edc33c125e41eb9c570f20d93090
容器的镜像编排commit简单镜像创建Dockerfile制作服务镜像语法、创建镜像、创建复杂镜像Docker微服务架构、示例NGINXPHP、私有仓库。
Tip毕竟两个人的智慧大于一个人的智慧如果你不理解本章节的内容或需要相关笔记、视频可私信小安请不要害羞和回避可以向他人请教花点时间直到你真正的理解。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback